如何在 C# 中设置打印纸张边距

This article was translated from English: Does it need improvement?
Translated
View the article in English

打印边距控制着文档内容与物理页面边缘之间的空白区域。 正确处理这些内容可避免文本被截断,确保不同打印机上的版式一致,并满足发票、报告及法律文件的排版要求。

IronPrint 的 Margins 类支持以毫米为单位输入值,并提供三种构造函数重载——统一、水平/垂直以及单边——因此我们只需一行代码即可满足任何版面布局需求。下面我们将逐一介绍这些方法,从安装到使用自定义边距进行打印。

快速入门:设置纸张边距

  1. 通过 NuGet 安装 IronPrint:Install-Package IronPrint
  2. 在文件中添加 using IronPrint;
  3. 创建一个 PrintSettings 对象
  4. Margins 的值赋给 PaperMargins(单位为毫米)
  5. 将设置(包含文件路径)传递给 Printer.Print()
  1. 使用 NuGet 包管理器安装 https://www.nuget.org/packages/IronPrint

    PM > Install-Package IronPrint
  2. 复制并运行这段代码。

    using IronPrint;
    
    // Set 15 mm margins on all sides and print
    PrintSettings settings = new PrintSettings();
    settings.PaperMargins = new Margins(15);
    Printer.Print("report.pdf", settings);
  3. 部署到您的生产环境中进行测试

    通过免费试用立即在您的项目中开始使用IronPrint

    arrow pointer

如何设置四边等宽页边距?

最简单的构造函数接受一个整数,并将其均匀应用于所有四边。 我们将值以毫米为单位传递:

:path=/static-assets/print/content-code-examples/how-to/set-paper-margins/set-paper-margins-uniform-margins.cs
using IronPrint;

// 20 mm margin on every side
PrintSettings settings = new PrintSettings
{
    PaperMargins = new Margins(20),
    PaperSize = PaperSize.A4
};

Printer.Print("invoice.pdf", settings);
Imports IronPrint

' 20 mm margin on every side
Dim settings As New PrintSettings With {
    .PaperMargins = New Margins(20),
    .PaperSize = PaperSize.A4
}

Printer.Print("invoice.pdf", settings)
$vbLabelText   $csharpLabel

Margins(20)RightBottom 分别设置为 20 毫米。 这是标准商业文档中最常见的选择,此类文档仅需在每行两端保持一致的空格即可。

IronPrint 以毫米为单位测量边距,从而避免了 System.Drawing.Printing.Margins 类使用英寸百分之一单位所造成的混淆。 在 IronPrint 中,25.4 毫米的页边距等同于 new System.Drawing.Printing.Margins(100) —— 我们无需进行任何换算。

如何为每一侧设置不同的页边距?

当文档顶部需要额外空间放置页眉,或底部需要额外空间放置页脚时,我们使用四参数构造函数:

:path=/static-assets/print/content-code-examples/how-to/set-paper-margins/set-paper-margins-per-side-margins.cs
using IronPrint;

// Left: 10 mm, Top: 25 mm, Right: 10 mm, Bottom: 20 mm
PrintSettings settings = new PrintSettings
{
    PaperMargins = new Margins(10, 25, 10, 20),
    PaperOrientation = PaperOrientation.Portrait
};

Printer.Print("letterhead.pdf", settings);
Imports IronPrint

' Left: 10 mm, Top: 25 mm, Right: 10 mm, Bottom: 20 mm
Dim settings As New PrintSettings With {
    .PaperMargins = New Margins(10, 25, 10, 20),
    .PaperOrientation = PaperOrientation.Portrait
}

Printer.Print("letterhead.pdf", settings)
$vbLabelText   $csharpLabel

参数顺序为 left, top, right, bottom。 每个数值都是独立的,因此我们可以创建非对称布局,以适应页眉、页脚、装订边缘或打孔区域。 Margins 类的 API 参考文档对每个字段进行了详细说明。

常见的页边距布局有哪些简写选项?

IronPrint 的 Margins 类除了统一版本和单面版本之外,还提供了两个额外的构造函数:

水平/垂直缩写Margins(int horizontal, int vertical) 将 left+right 设置为第一个值,top+bottom 设置为第二个值:

:path=/static-assets/print/content-code-examples/how-to/set-paper-margins/set-paper-margins-shorthand-margins.cs
using IronPrint;

// 10 mm left & right, 20 mm top & bottom
PrintSettings settings = new PrintSettings
{
    PaperMargins = new Margins(10, 20)
};

Printer.Print("report-landscape.pdf", settings);
Imports IronPrint

' 10 mm left & right, 20 mm top & bottom
Dim settings As New PrintSettings With {
    .PaperMargins = New Margins(10, 20)
}

Printer.Print("report-landscape.pdf", settings)
$vbLabelText   $csharpLabel

零边距Margins.Zero 移除所有边距以实现无边框打印:

:path=/static-assets/print/content-code-examples/how-to/set-paper-margins/set-paper-margins-zero-margins.cs
PrintSettings borderless = new PrintSettings
{
    PaperMargins = Margins.Zero
};

Printer.Print("poster.png", borderless);
Dim borderless As New PrintSettings With {
    .PaperMargins = Margins.Zero
}

Printer.Print("poster.png", borderless)
$vbLabelText   $csharpLabel

请注意,大多数实体打印机都有硬件规定的最小可打印区域。 设置 Margins.Zero 会向驱动程序发送零边距指令,但根据打印机的具体性能,边缘附近的内容仍可能被裁切。

如何将页边距与其他打印文档设置结合使用?

PaperMarginsPrintSettings 上的一个属性。 我们可以将纸张尺寸、方向、DPI、份数、灰度模式和打印机选择整合到一个配置对象中:

:path=/static-assets/print/content-code-examples/how-to/set-paper-margins/set-paper-margins-combined-settings.cs
using IronPrint;

// Full print configuration for a quarterly report
PrintSettings settings = new PrintSettings
{
    PaperMargins = new Margins(15, 20, 15, 25),
    PaperSize = PaperSize.A4,
    PaperOrientation = PaperOrientation.Portrait,
    Dpi = 300,
    NumberOfCopies = 2,
    Grayscale = false,
    PrinterName = "HP LaserJet Pro MFP M428"
};

Printer.Print("Q4-report.pdf", settings);
Imports IronPrint

' Full print configuration for a quarterly report
Dim settings As New PrintSettings With {
    .PaperMargins = New Margins(15, 20, 15, 25),
    .PaperSize = PaperSize.A4,
    .PaperOrientation = PaperOrientation.Portrait,
    .Dpi = 300,
    .NumberOfCopies = 2,
    .Grayscale = False,
    .PrinterName = "HP LaserJet Pro MFP M428"
}

Printer.Print("Q4-report.pdf", settings)
$vbLabelText   $csharpLabel

对于异步工作流(如 WPF、MAUI 或 ASP.NET Web 应用程序),请将 Printer.Print() 替换为 await Printer.PrintAsync(),以避免阻塞 UI 线程。 同一个 PrintSettings 对象可同时适用于这两种方法。

我的下一个步骤是什么?

我们介绍了使用 IronPrint 配置打印边距的四种方法:使用 Margins(int) 设置统一边距、使用 Margins(int, int, int, int) 进行每页单独控制、使用 Margins(int, int) 的水平/垂直简写,以及使用 Margins.Zero 进行无边距打印。 每种方法都集成到 PrintSettings.PaperMargins 中,并兼容 Printer.Print()Printer.PrintAsync()

欲了解更多信息,请探索以下资源:

获取免费试用许可证,在真实环境中测试所有功能;或准备部署时查看授权选项

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

准备开始了吗?
Nuget 下载 38,930 | 版本: 2026.4 刚刚发布
Still Scrolling Icon

还在滚动吗?

想快速获得证据? PM > Install-Package IronPrint
运行示例 观看您的文档打到打印机上。