ASP.NET MVC中iTextSharp生成的A5 PDF打印默认尺寸为Letter的解决办法
问题:生成的A5 PDF打印默认尺寸为Letter,如何修正?
你当前用iText 7生成了旋转的A5 PDF,但打开后打印对话框默认用Letter尺寸,核心原因是仅设置了页面尺寸,未在PDF中指定打印偏好规则,阅读器会 fallback 到自身默认打印设置。
解决方法:
给PDF添加打印元数据,明确指定默认打印纸张为A5、禁用自动缩放,让阅读器优先遵循文档的打印设置。
修改后的完整代码:
MemoryStream ms = new MemoryStream(); PdfWriter pw = new PdfWriter(ms); PdfDocument pdfDocument = new PdfDocument(pw); // 添加打印偏好设置,禁用自动缩放 PdfViewerPreferences viewerPreferences = new PdfViewerPreferences(); viewerPreferences.SetPrintScaling(PdfViewerPreferences.PdfPrintScalingMode.NONE); pdfDocument.GetCatalog().SetViewerPreferences(viewerPreferences); // 指定打印纸张尺寸为旋转后的A5 PdfPrintParams printParams = new PdfPrintParams(); printParams.SetMediaSize(PdfPrintParams.SizeName.ISO_A5, PageSize.A5.Rotate().GetWidth(), PageSize.A5.Rotate().GetHeight()); pdfDocument.GetCatalog().SetPrintParams(printParams); Document doc = new Document(pdfDocument, PageSize.A5.Rotate()); doc.SetMargins(5, 5, 5, 5); // 这里添加内容... doc.Close(); byte[] bytesStream = ms.ToArray(); ms = new MemoryStream(); ms.Write(bytesStream, 0, bytesStream.Length); ms.Position = 0; return File(ms, "application/pdf", ID + ".pdf");
关键说明:
PdfViewerPreferences设置PrintScaling为NONE,避免阅读器自动缩放页面适配默认纸张;PdfPrintParams明确指定打印介质为ISO_A5,并传入旋转后的页面尺寸,确保和文档实际尺寸匹配;- 这两个设置组合后,主流PDF阅读器(如Adobe Acrobat、Chrome PDF阅读器)会自动将A5设为打印对话框的默认纸张尺寸。
内容的提问来源于stack exchange,提问作者naxzhull
相关产品推荐
相关产品推荐

