如何在HTML到PDF页面中处理断页

使用 C# 在 HTML PDF 中添加或避免分页符

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

在使用 C# 通过 IronPDF 将 HTML 转换为 PDF 时,可在 HTML 元素中添加 page-break-after: always; 来控制 PDF 文档的分页,或使用 page-break-inside: avoid; 来防止分页。

IronPDF 支持 PDF 文档中的分页符。 PDF 文档和 HTML 的一个主要区别是 HTML 文档通常是滚动的,而 PDF 是多页的,可以打印。 将 HTML 字符串转换为 PDF 时,开发人员通常需要精确控制页面断开的位置,以确保文档外观专业。

快速入门:在 HTML 转 PDF 转换中实现分页符

使用 IronPDF 将 HTML 转换为带分页符的 PDF。 此示例演示了在特定 HTML 内容后插入分页符,以确保正确分页。 通过添加 page-break-after: always; 样式,开发者可以控制分页位置,从而提高生成的 PDF 文档的可读性和组织性。 <div> <section> <article> <div> page-break-inside DIV page-break-inside: avoid page-break-inside: avoid DIV <thead> page-break-inside: avoid page-break-after: always page-break-before: always orphans widows break-inside break-after break-before

  1. 使用 NuGet 包管理器安装 https://www.nuget.org/packages/IronPdf

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

    new IronPdf.ChromePdfRenderer()
      .RenderHtmlAsPdf("<html><body><h1>Hello World!</h1><div style='page-break-after: always;'></div></body></html>")
      .SaveAs("pageWithBreaks.pdf");
  3. 部署到您的生产环境中进行测试

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

    arrow pointer


如何在 HTML 到 PDF 之间添加分页符?

要在 HTML 中创建分页符,请在 HTML 代码中使用此方法:

<div style="page-break-after: always;"></div>
<div style="page-break-after: always;"></div>
HTML

在将 HTML 渲染为 PDF 时,page-break-after CSS 属性是控制分页的最可靠方法。 该属性会告诉 PDF 渲染器在包含该样式的元素后立即插入分页符。 在使用自定义页边距或特定页面布局时,分页符可确保内容准确出现在预定位置。

为什么 page-break-after 比其他方法更有效?

在此示例中,我的 HTML 代码中包含以下 tableimg,我希望将它们分在两个不同的页面上,方法是在 table 之后添加分页符。 与 page-break-after 属性相比,page-break-before 或其他手动空格等替代方案在不同渲染引擎中呈现的效果更为一致。 在创建具有复杂布局的 新 PDF 时,这种方法可确保可预测的分页。

分页符应使用哪些元素?

分页功能可与 sectionarticle 等块级元素有效配合使用。 虽然您可以将分页样式应用于各种 HTML 元素,但将内容包裹在专用的 div 标签中能获得最可靠的结果。 这一点在处理 页眉和页脚时尤为重要,因为这些页眉和页脚需要在不同页面中保持一致。

表格

<table style="border: 1px solid #000000">
  <tr>
    <th>Company</th>
    <th>Product</th>
  </tr>
  <tr>
    <td>Iron Software</td>
    <td>IronPDF</td>
  </tr>
  <tr>
    <td>Iron Software</td>
    <td>IronOCR</td>
  </tr>
</table>
<table style="border: 1px solid #000000">
  <tr>
    <th>Company</th>
    <th>Product</th>
  </tr>
  <tr>
    <td>Iron Software</td>
    <td>IronPDF</td>
  </tr>
  <tr>
    <td>Iron Software</td>
    <td>IronOCR</td>
  </tr>
</table>
HTML

图像

<img src="/static-assets/pdf/how-to/html-to-pdf-page-breaks/ironpdf-logo-text-dotnet.svg" style="border:5px solid #000000; padding:3px; margin:5px" />
<img src="/static-assets/pdf/how-to/html-to-pdf-page-breaks/ironpdf-logo-text-dotnet.svg" style="border:5px solid #000000; padding:3px; margin:5px" />
HTML

如何在 C# 代码中实现分页符?

:path=/static-assets/pdf/content-code-examples/how-to/html-to-pdf-page-breaks-page-break.cs
using IronPdf;

const string html = @"
  <table style='border: 1px solid #000000'>
    <tr>
      <th>Company</th>
      <th>Product</th>
    </tr>
    <tr>
      <td>Iron Software</td>
      <td>IronPDF</td>
    </tr>
    <tr>
      <td>Iron Software</td>
      <td>IronOCR</td>
    </tr>
  </table>

  <div style='page-break-after: always;'> </div>

  <img src='https://ironpdf.com/img/products/ironpdf-logo-text-dotnet.svg'>";

var renderer = new ChromePdfRenderer();

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("Page_Break.pdf");
Imports IronPdf

Private Const html As String = "
  <table style='border: 1px solid #000000'>
    <tr>
      <th>Company</th>
      <th>Product</th>
    </tr>
    <tr>
      <td>Iron Software</td>
      <td>IronPDF</td>
    </tr>
    <tr>
      <td>Iron Software</td>
      <td>IronOCR</td>
    </tr>
  </table>

  <div style='page-break-after: always;'> </div>

  <img src='https://ironpdf.com/img/products/ironpdf-logo-text-dotnet.svg'>"

Private renderer = New ChromePdfRenderer()

Private pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("Page_Break.pdf")
$vbLabelText   $csharpLabel

上述代码生成一个包含 2 页的 PDF:第一页为 table,第二页为 img

如何防止图像出现断页?

为避免在图片或 table 内部出现换行,请在包裹的 div 元素上应用 CSS avoid 属性。 当使用 Chrome 浏览器调试 HTML 以确保您的 PDF 完全按照预期呈现时,这种技术对于保持视觉完整性至关重要。

<div style="page-break-inside: avoid">
    <img src="no-break-me.png" />
</div>
<div style="page-break-inside: avoid">
    <img src="no-break-me.png" />
</div>
HTML

为什么要在 DIV 元素中包裹图像?

将图片包裹在 div 标签中,可以更好地控制分页行为。 page-break-inside 属性在块级元素上运行最为可靠。 图片默认为内联元素,因此要对其进行包装,以确保正确应用样式。 在处理需要在 PDF 格式中保持结构的 响应式 CSS 布局时,这种方法尤其有用。

图像断页的常见问题有哪些?

常见问题包括图像被分割到不同页面、页面边界部分呈现、标题或相关文本丢失。 当图片靠近页面底部时,经常会出现这些问题。 使用 page-break-inside: avoid 包裹标签可避免此类问题,它能确保整个图片及其容器作为一个整体移至下一页。

using IronPdf;

// Example showing how to prevent image breaks in a more complex layout
const string htmlWithProtectedImage = @"
<html>
<head>
    <style>
        .no-break { page-break-inside: avoid; }
        .image-container { 
            border: 2px solid #333; 
            padding: 10px; 
            margin: 20px 0;
        }
    </style>
</head>
<body>
    <h1>Product Gallery</h1>
    <p>Our featured products are displayed below:</p>

    <div class='no-break image-container'>
        <img src='product1.jpg' alt='Product 1' />
        <p>Product 1 Description</p>
    </div>

    <div class='no-break image-container'>
        <img src='product2.jpg' alt='Product 2' />
        <p>Product 2 Description</p>
    </div>
</body>
</html>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlWithProtectedImage);
pdf.SaveAs("ProductGallery.pdf");
using IronPdf;

// Example showing how to prevent image breaks in a more complex layout
const string htmlWithProtectedImage = @"
<html>
<head>
    <style>
        .no-break { page-break-inside: avoid; }
        .image-container { 
            border: 2px solid #333; 
            padding: 10px; 
            margin: 20px 0;
        }
    </style>
</head>
<body>
    <h1>Product Gallery</h1>
    <p>Our featured products are displayed below:</p>

    <div class='no-break image-container'>
        <img src='product1.jpg' alt='Product 1' />
        <p>Product 1 Description</p>
    </div>

    <div class='no-break image-container'>
        <img src='product2.jpg' alt='Product 2' />
        <p>Product 2 Description</p>
    </div>
</body>
</html>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlWithProtectedImage);
pdf.SaveAs("ProductGallery.pdf");
Imports IronPdf

' Example showing how to prevent image breaks in a more complex layout
Const htmlWithProtectedImage As String = "
<html>
<head>
    <style>
        .no-break { page-break-inside: avoid; }
        .image-container { 
            border: 2px solid #333; 
            padding: 10px; 
            margin: 20px 0;
        }
    </style>
</head>
<body>
    <h1>Product Gallery</h1>
    <p>Our featured products are displayed below:</p>

    <div class='no-break image-container'>
        <img src='product1.jpg' alt='Product 1' />
        <p>Product 1 Description</p>
    </div>

    <div class='no-break image-container'>
        <img src='product2.jpg' alt='Product 2' />
        <p>Product 2 Description</p>
    </div>
</body>
</html>"

Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlWithProtectedImage)
pdf.SaveAs("ProductGallery.pdf")
$vbLabelText   $csharpLabel

如何避免表格中的分页符?

如上所示,可通过 CSS avoid 避免表格内的分页。 将此样式应用于包裹的 div 标签,而非表格本身,可确保样式正确应用于块级 HTML 节点。 在创建全面的 HTML 转 PDF 教程时,正确的表格格式对可读性至关重要。

何时应在表头使用 thead?

若要在跨越多个 PDF/A 页面的大型 HTML 表格中,使所有页面都显示相同的表头和表尾,请在表格内使用 thead 代码组:

<thead>
    <tr>
        <th>C Sharp</th><th>VB</th>
    </tr>
</thead>
<thead>
    <tr>
        <th>C Sharp</th><th>VB</th>
    </tr>
</thead>
HTML

<thead> 元素可确保当表格跨页时,表格标题在每一页上重复显示。 这对于财务报告、数据列表以及任何需要在每一页都提供上下文的文档尤其有用。 对于初始设置和安装概述,IronPDF 会自动处理这些 HTML 标准。

为什么用 DIV 封装表格很重要?

将表格包裹在带有分页控制的 div 元素中具有以下优势:

  • 确保整个表格在需要时作为一个整体移动到下一页
  • 防止标题与数据行分离
  • 允许额外的样式和间距控制
  • 更容易添加与表格保持一致的标题或说明

哪些高级 CSS3 设置可控制断页?

为了获得更大的控制权,请在 thead 组之外使用 CSS3:

<style type="text/css">
    table { page-break-inside:auto }
    tr { page-break-inside:avoid; page-break-after:auto }
    thead { display:table-header-group }
    tfoot { display:table-footer-group }
</style>
<style type="text/css">
    table { page-break-inside:auto }
    tr { page-break-inside:avoid; page-break-after:auto }
    thead { display:table-header-group }
    tfoot { display:table-footer-group }
</style>
HTML

哪些 CSS 属性最适合复杂布局?

对于复杂的布局,应结合多个 CSS 属性:

  • page-break-inside - 防止元素被拆分
  • page-break-after - 强制在元素后换行
  • page-break-before - 在元素前强制换行
  • orphanswidows - 控制分页时的最小行数
  • break-inside, break-after, break-before - 现代 CSS3 替代方案

这些属性共同作用,创建出具有适当流程和可读性的专业外观 PDF。

如何解决分页问题?

分页符无法正常工作时: 1.验证您的 HTML 结构是否有效 2.检查样式是否应用于块级元素 3.先用简单的例子进行测试,然后增加复杂性 4.使用浏览器开发工具检查计算样式 5.考虑使用 IronPDF 的渲染选项进行额外控制

请记住,不同的 PDF 呈现器在处理分页符时可能会略有不同,因此根据您的具体使用情况进行测试对于在所有情况下实现一致的结果非常重要。

常见问题解答

用 C# 将 HTML 转换为 PDF 时,如何添加分页符?

要在使用 IronPDF 时添加分页符,请在 HTML 代码中希望分页符出现的位置插入 `

` 。IronPDF 的 ChromePdfRenderer 将识别该 CSS 属性,并在 PDF 文档中的该处创建新页。

在 PDF 转换中控制分页符最可靠的 CSS 属性是什么?

使用 IronPDF 时,"page-break-after: always;` CSS 属性是最可靠的方法。该属性可在不同的渲染引擎中提供一致的结果,并确保转换后的 PDF 文档具有可预测的分页。

如何防止表格或图片内出现分页符?

要防止表格或图片中出现不必要的分页符,请使用 "page-break-inside: avoid;` CSS 属性。在使用 IronPDF 将 HTML 转换为 PDF 时,这种样式可确保您的表格和图片在单页中保持完整,而不会被分割到多个页面中。

哪些 HTML 元素最适合使用分页符样式?

分页符对于块级元素(如"

`"、"`"和"
`")最为有效。IronPDF 建议在将 HTML 转换为 PDF 时,使用具有分页符样式的专用 `
` 元素包装内容,以获得最可靠的结果。

我能否在 CSS 层面控制分页符而不是内联样式?

是的,您可以在 CSS 层设置分页符样式,而不是使用内联样式。IronPDF 的渲染引擎完全支持 CSS 样式表,允许您在 CSS 文件中定义分页符规则,并维护更简洁、更易维护的 HTML 代码。

为什么要使用 page-break-after 而不是 page-break-before?

与 "page-break-before "属性相比,"page-break-after "属性在不同的渲染引擎中提供更一致的结果。在使用 IronPDF 创建具有复杂布局的 PDF 时,page-break-after 可确保分页行为更具可预测性和可靠性。

Curtis Chau
技术作家

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

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

准备开始了吗?
Nuget 下载 19,014,616 | 版本: 2026.5 just released
Still Scrolling Icon

还在滚动吗?

想快速获得证据? PM > Install-Package IronPdf
运行示例看着你的HTML代码变成PDF文件。

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我