使用流式布局与选择性分页控制,将 HTML/CSS 转换为专业 PDF,避免打印页面空白和布局问题。
PDF 生成技能 : 目的: 从 HTML/ CSS 生成专业 PDF , 无需空白或布局问题是一项面向实际任务的技能,主要用于问题 : 当 HTML 生成 PDF 时, 页面断开侧面: 避免原因 orph。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
目的:从 HTML/CSS 生成专业 PDF,避免空白间隙与布局异常。
在基于 HTML 生成 PDF 时,使用 page-break-inside: avoid 会导致孤立空白(orphan whitespace)——即无法完整容纳在当前页的内容会被整体推至下一页,从而在当前页底部留下大片空白。
❌ 错误做法:
✅ 正确做法:
应改用 @page CSS 规则,而非依赖固定高度的页面容器:
@page {
size: A4;
margin: 18mm 15mm;
}
仅对满足以下条件的元素应用 break-inside: avoid:
✅ 应保护的元素:
tr)❌ 不应保护的元素:
.small-element {
break-inside: avoid; /* 现代标准 */
page-break-inside: avoid; /* 兼容旧版引擎 */
}
h2, h3, h4, .section-header {
break-after: avoid;
page-break-after: avoid;
}
body {
orphans: 3; /* 页面底部至少保留 3 行 */
widows: 3; /* 页面顶部至少保留 3 行 */
}
table {
/* 不设置 break-inside: avoid */
}
tr {
break-inside: avoid;
page-break-inside: avoid;
}
@page {
size: A4;
margin: 18mm 15mm;
}
body {
font-size: 10pt;
line-height: 1.5;
orphans: 3;
widows: 3;
}
/* 标题与后续内容保持同页 */
h2, h3, h4 {
break-after: avoid;
page-break-after: avoid;
}
/* 小型元素禁止分页截断 */
.card, .highlight-box, .step, .timeline-item {
break-inside: avoid;
page-break-inside: avoid;
}
/* 表格行保持完整,表格本身可跨页 */
tr {
break-inside: avoid;
page-break-inside: avoid;
}
/* 大型容器保持自然流式布局 */
table, .section, .two-col {
/* 不设置 break-inside: avoid */
}
@media print {
body {
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
}
}
| 工具 | 适用场景 | 安装方式 |
|---|---|---|
| WeasyPrint | HTML/CSS → PDF(CSS 支持最完善) | brew install weasyprint 或 pip install weasyprint |
| Pandoc | Markdown → PDF(经由 LaTeX) | brew install pandoc |
| wkhtmltopdf | 复杂布局场景 | 从 wkhtmltopdf.org 下载安装 |
| Puppeteer | 含 JavaScript 渲染内容的页面 | npm install puppeteer |
weasyprint input.html output.pdf
在发送任何 PDF 文件之前,请务必完成以下检查:
| 错误做法 | 修正方式 |
|---|---|
对大型容器设置 page-break-inside: avoid |
移除此样式,允许内容自然流动 |
使用固定高度的页面 div(如 min-height: 297mm) |
改用 @page 规则定义页面尺寸与边距 |
| 文档末尾的引用框(quote box)设置了防断行保护 | 移除其 break-inside: avoid 类或样式 |
对整张 table 元素设置防断行保护 |
仅对 tr 设置,不要作用于 table |
未设置 orphans/widows |
添加 orphans: 3; widows: 3; |
本技能由 Bartok 创建 — 2026 年 3 月 6 日
相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.5万人学习
最新文章