
本文详解如何在 Django 项目中利用 pdfkit 将多个 HTML 内容块分别渲染为独立 PDF 页面,核心是通过 CSS 的 page-break-after: always 实现精准分页。
本文详解如何在 django 项目中利用 pdfkit 将多个 html 内容块分别渲染为独立 pdf 页面,核心是通过 css 的 `page-break-after: always` 实现精准分页。
在使用 pdfkit(基于 wkhtmltopdf 的 Python 封装)将 HTML 转换为 PDF 时,若需确保每个逻辑单元(如报告章节、用户数据块或示例卡片)独占一页,不能依赖 PDF 渲染器自动分页——它可能因内容高度变化导致跨页断裂或合并。正确做法是在 HTML 结构中显式插入强制分页符。
最可靠且广泛兼容的方式是使用 CSS page-break-after: always(适用于 wkhtmltopdf 0.12.5+,即 pdfkit 默认后端)。该样式需作用于一个块级元素(如 <div>),并置于每页内容末尾(最后一项除外,避免生成空白末页)。<p>以下是优化后的完整实现(适配 Django 环境):</p>
<pre class="brush:php;toolbar:false;">import pdfkit
from django.template.loader import render_to_string
my_contents = [
{'title': 'Example 1', 'contents': ['Lorem ipsum dolor', 'Second paragraph']},
{'title': 'Example 2', 'contents': ['Another section', 'More content']},
{'title': 'Example 3', 'contents': ['Third page data', 'End of example']},
]
final_html = ""
for i, content in enumerate(my_contents):
data = {
'title': content['title'],
'contents': content['contents'],
}
# 渲染单个页面的 HTML 模板
html_page = render_to_string('pdfs/routines_handout.html', data)
final_html += html_page
# 在非最后一个内容后插入分页符
if i </pre>
</div>'
# 生成 PDF(注意:确保 wkhtmltopdf 已安装且路径正确)
pdfkit.from_string(final_html, 'output.pdf')<p>? <strong>关键注意事项</strong>:</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill6473" title="Sakura python draw"><img
src="https://img.php.cn/upload/skill/000/000/081/179098925061873.jpg" alt="Sakura python draw" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill6473" title="Sakura python draw" class="overflowclass">Sakura python draw</a>
<p class="overflowclass">使用Python的turtle和random库,递归绘制分形樱花树,并动画模拟花瓣自然飘落效果。</p>
</div>
<a rel="nofollow" href="/xiazai/skill6473" title="Sakura python draw" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
<ul>
<li>✅ <code>page-break-after: always 是 wkhtmltopdf 官方推荐的分页方式,比 break-after: page 兼容性更好;
<table>、<code><thead> 或浮动元素内使用分页符,可能导致渲染异常;建议将分页符置于 <code> 直接子级或清晰的容器外层;/ 标签,请确保所有分页符位于 内,且最终拼接的 final_html 不重复嵌套根标签;style="page-break-after: always; clear: both; height: 0;" 消除意外间距;--enable-local-file-access(尤其当模板引用本地 CSS/JS 时)。通过此方法,你可完全掌控 PDF 的页面结构,轻松构建手册、报告、票据等多页文档,兼顾灵活性与专业排版效果。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










