C#中使用PrintDocument打印PDF时如何设置Actual Size(实际尺寸)
解决Crystal Reports转PDF后打印时强制使用实际尺寸(Actual Size)的问题
我在C#程序中使用Crystal Reports打印提货单,必须先将报表导出为PDF再执行打印。现在需要确保调用PrintDocument打印时,不会自动执行页面适配(fit to page),要实现打印机设置界面中“Actual Size”(实际尺寸)选项的效果,目前查阅资料未找到明确方案。
现有代码
PrinterSettings printerSettings = new PrinterSettings(); System.Drawing.Printing.PageSettings pageSettings = new System.Drawing.Printing.PageSettings(printerSettings); printerSettings.PrinterName = toPrinter; printerSettings.Duplex = Duplex.Simplex; //printerSettings.FromPage = 1; //printerSettings.ToPage = 3; PaperSource ps = new PaperSource(); ps.RawKind = (int)PaperSourceKind.Middle; printerSettings.DefaultPageSettings.PaperSource = ps; PrintDocument printDocument = document.CreatePrintDocument(); printDocument.PrinterSettings = printerSettings; printDocument.PrintController = new StandardPrintController(); PrintingPermission perm = new PrintingPermission(System.Security.Permissions.PermissionState.Unrestricted); perm.Level = PrintingPermissionLevel.AllPrinting; // Something here to set "Actual Size" // The Big MOMENT!!! printDocument.Print();
解决方案
要实现“Actual Size”的效果,需要从页面设置和缩放控制两方面入手:
- 禁用页面自动适配:设置
PageSettings.FitToPage为false,阻止打印机自动将内容适配到打印区域。 - 强制100%缩放比例:将
PageSettings.Zoom设为100,确保内容按原始尺寸打印。 - 匹配纸张尺寸:确保打印使用的纸张尺寸与Crystal Reports设计时的尺寸完全一致,避免打印机自动调整。
修改后的代码
PrinterSettings printerSettings = new PrinterSettings(); System.Drawing.Printing.PageSettings pageSettings = new System.Drawing.Printing.PageSettings(printerSettings); printerSettings.PrinterName = toPrinter; printerSettings.Duplex = Duplex.Simplex; //printerSettings.FromPage = 1; //printerSettings.ToPage = 3; PaperSource ps = new PaperSource(); ps.RawKind = (int)PaperSourceKind.Middle; printerSettings.DefaultPageSettings.PaperSource = ps; // 关键设置:启用实际尺寸打印 pageSettings.FitToPage = false; pageSettings.Zoom = 100; // 强制100%缩放 // 可选:如果知道报表的纸张尺寸,直接指定避免自动适配 // pageSettings.PaperSize = new PaperSize(PaperName.Custom, reportWidth, reportHeight); PrintDocument printDocument = document.CreatePrintDocument(); printDocument.PrinterSettings = printerSettings; printDocument.DefaultPageSettings = pageSettings; // 应用修改后的页面设置 printDocument.PrintController = new StandardPrintController(); PrintingPermission perm = new PrintingPermission(System.Security.Permissions.PermissionState.Unrestricted); perm.Level = PrintingPermissionLevel.AllPrinting; printDocument.Print();
补充说明
如果上述设置仍未生效,可能是PDF导出过程中已经引入了缩放适配,需要检查Crystal Reports的导出设置:
- 在导出PDF时,确保勾选“无缩放”或“实际尺寸”选项
- 确认报表设计的页面边距与打印机的可打印区域匹配,避免打印机因边距问题自动调整
内容的提问来源于stack exchange,提问作者j.hull
相关产品推荐
相关产品推荐

