html2pdf

HTML2PDF

Go Report Card Docker Pulls License

HTML 渲染成 PDF 文件,此项目用 Golang 开发,提供一个 HTTP 接口将本地或者远程 HTML 页面输出成为 PDF 文件格式。

使用 HTML 作为模板的原因是因为 HTML 的表达能力最好,而且 wkhtmltopdf 使用 webkit 作为渲染内核,可以使用一些现代的 CSS 方案,尽量降低模板复杂度。

功能

提供 4 个接口,分别对应不同的使用场景:

编译

依赖

配置

使用 Phantomjs 渲染:

{
    "listen": "127.0.0.1:4444", // HTTP 服务绑定地址
    "tmp_path": "", // 生成 PDF 文件中间的所有过渡临时文件存放路径
    "web_root": "", // HTTP 服务自带了一个示例 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 配置会有不一样的情况,需要从两方面入手解决在不同系统下渲染差别的问题:

  1. 尽量使用 embed font 处理渲染的字体,包括默认的字体。
  2. 同步 fontconfig 的一些公用配置,一般放在 /etc/fonts/conf.d 下,修改完后执行 fc-cache -fv 重置 fontconfig

HTML 模板

经过测试发现,如果需要 A4 规格的 PDF 文件铺满需要使用 1240px x 1754px 这个尺寸,但这也只是参考值;因为我们发现不同系统上 wkhtmltopdf 渲染网页的页面尺寸是不一样的,这需要控制 --zoom 参数进行预匹配。

各种纸张的打印尺寸规格可以参考这里

请参考用于生成支持 HTML2PDF 的 HTML 模板项目 html2pdf-template

Docker

此项目已经打包成 Docker 镜像。

Docker Compose

你也可以使用 docker-compose 来运行此项目。以下是一个示例 docker-compose.yml 文件:

version: "3.7"

services:
  app:
    image: mmhk/html2pdf
    restart: always
    environment:
      - HOST=0.0.0.0:4444
      - ROOT=/app/web_root
      - TIMEOUT=60
      - WORKER=4
      - TTL=3600
      - LOG_LEVEL=INFO
      - TZ=Asia/Hong_Kong
    ports:
      - 4444:4444

使用以下命令启动服务:

docker-compose up -d

License

此项目使用 Apache 2.0 许可证。 ```

希望这些信息对你有帮助!如果有任何问题或需要进一步的信息,请随时联系我。