将 HTML 渲染成 PDF 文件,此项目用Golang开发,提供一个HTTP 接口将本地
或者远程HTML页面输出成为PDF文件格式。
使用HTML作为模板的原因是因为HTML的表达能力最好,而且wkhtmltopdf使用
webkit作为渲染内核,可以使用一些现代的CSS方案,尽量降低模本复杂度。
提供2个接口,分别对应不同的使用场景。
htmlpdf,将HTML源码渲染成PDF文件格式。linkpdf,将online的link渲染成为PDF文件格式。combine,将若干个pdf url,合并成一个的pdf文件。link/combine,将若干个pdf/网页 url,合并成一个的pdf文件。go get -v签出所有的依赖库 go build -o html2pdf . 编译成二进制可执行文件 html2pdf -c ./config.jsonqtwebkit的渲染引擎。puppeteer 分支,还有依赖于 puppeteer , 使用chrome-headless 渲染页面。使用 Phantomjs 渲染:
{
"listen": "127.0.0.1:4444", //http service绑定地址
"tmp_path": "", //生成pdf文件中间的所有过渡临时文件存放路径
"web_root": "", //http service自带了一个示例sample存放路径
"webkit_bin": "", //Phantomjs 执行文件的存放路径
"webkit_args": [ "./render/phantomjs/pdf.js" ], //Phantomjs cli 默认的参数,执行js渲染的具体脚本
"pdftk_bin": "pdftk.exe", //pdftk 渲染器位置
"cache_ttl": 3600, //静态pdf缓存时间(秒)
"worker": 4, //生成pdf的工作进程数
"timeout": 40 //生成PDF的进程的超时时间
}
注意: 由于
Phantomjs依赖fontconfig, 而不同环境下fontconfig配置会有不一样的情况, 需要从两方面入手解决在不同系统下渲染差别的问题。
- 尽量使用
embed font处理渲染的字体,包括默认的字体。- 同步
fontconfig的一些公用配置,一般放在/etc/fonts/conf.d下,修改完后执行fc-cache -fvresetfontconfig。
经过测试发现如果需要 A4 规格的 PDF 文件铺满需要使用1240px x 1754px
这个尺寸,但是这个也只是参考值;因为我们发现不同系统上 wkhtmltopdf
渲染web page的页面尺寸是不一样的,这个需要控制 --zoom 参数进行预匹配。
个种纸张的打印尺寸规格可以参考这里
请参考用于生成支持HTML2PDF的html模版项目html2pdf-template
此项目已经打包成docker 镜像
docker pull mmhk/html2pdf
config.json 的说明。
127.0.0.1:4444/usr/local/html2pdf/web_rootdocker run --name html2pdf -p 4444:4444 mmhk/html2pdf:latest
Content type
Image
Digest
sha256:66bbeddfd…
Size
214.6 MB
Last updated
over 1 year ago
docker pull mmhk/html2pdf