使用Node WKHTMLTOPDF将Handlebar生成的多HTML合并为单个PDF的方法
使用wkhtmltopdf合并多HTML为单PDF解决方案
前置准备
- 先完成Handlebar模板渲染,导出10个独立的HTML文件,确保所有HTML引用的静态资源(CSS、图片、字体等)路径为绝对路径或者可正常访问的相对路径,避免PDF渲染时资源丢失。
- 正确安装wkhtmltopdf到本地环境,确保终端/命令行可以直接调用
wkhtmltopdf命令。
多页面合并核心操作
wkhtmltopdf原生支持多输入源合并输出,不需要额外的拆分合并工具,直接按页面展示顺序传入多个HTML文件路径作为输入参数,最后指定输出PDF路径即可。
基础命令格式
wkhtmltopdf [可选全局参数] 第一个HTML路径 第二个HTML路径 ... 第10个HTML路径 输出PDF路径
举个实际示例,10个HTML按顺序命名为page1.html到page10.html,存放在当前目录,要输出为result.pdf,命令如下:
wkhtmltopdf page1.html page2.html page3.html page4.html page5.html page6.html page7.html page8.html page9.html page10.html result.pdf
常用进阶参数配置
你可以根据需求添加全局参数调整PDF效果,常用参数如下:
--page-size A4:指定PDF页面尺寸为A4,也可自定义大小比如--page-width 210mm --page-height 297mm--margin-top 20mm --margin-bottom 20mm --margin-left 15mm --margin-right 15mm:调整PDF四边边距--encoding UTF-8:指定HTML文件编码,避免中文乱码--enable-local-file-access:允许访问本地静态资源,部分版本默认关闭本地文件访问时需要添加该参数--disable-smart-shrinking:关闭智能缩放,避免HTML内容被自动压缩导致样式错位- 如果需要统一添加页眉页脚,可加
--header-left "页眉文本" --header-right "[page]/[topage]" --footer-center "页脚文本"这类参数
带参数的完整示例:
wkhtmltopdf --page-size A4 --margin-top 20mm --margin-bottom 20mm --encoding UTF-8 --enable-local-file-access page1.html page2.html page3.html page4.html page5.html page6.html page7.html page8.html page9.html page10.html result.pdf
代码调用时的多页面传入方式
如果是用各语言封装的wkhtmltopdf SDK,一般都会提供多页面添加的接口,逻辑和命令行一致,按顺序传入多个HTML路径即可,比如Node.js的wkhtmltopdf包示例:
const wkhtmltopdf = require('wkhtmltopdf'); const fs = require('fs'); // 直接传入HTML路径数组即可 wkhtmltopdf(['page1.html', 'page2.html', 'page3.html', 'page4.html', 'page5.html', 'page6.html', 'page7.html', 'page8.html', 'page9.html', 'page10.html'], { pageSize: 'A4', encoding: 'UTF-8', enableLocalFileAccess: true }, (err, stream) => { stream.pipe(fs.createWriteStream('result.pdf')); });
注意事项
- 多个HTML的传入顺序就是PDF里页面的展示顺序,注意按需求调整参数里的HTML路径排序
- 如果单个HTML内容过长,wkhtmltopdf会自动分页,不需要手动拆分
- 如果需要在不同HTML内容之间强制分页,可以在每个HTML的末尾添加如下样式的标签:
@media print { .page-break { page-break-after: always; } }
<div class="page-break"></div>
即可保证每个HTML的内容结束后强制开启新的一页。
内容的提问来源于stack exchange,提问作者r2alpha
相关产品推荐
相关产品推荐

