You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 03:08:28