# html2pdf
**Repository Path**: wakanoc/html2pdf
## Basic Information
- **Project Name**: html2pdf
- **Description**: html2pdf web service
- **Primary Language**: Go
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 1
- **Created**: 2018-04-03
- **Last Updated**: 2023-10-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# HTML2PDF
将 `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文件。
## 编译
- 安装Golang环境, Go >= 1.8
- checkout 源码
- 在源码目录 执行 ` go get -v `签出所有的依赖库
- ` go build -o html2pdf .` 编译成二进制可执行文件
- 执行文件 ` html2pdf -c ./config.json`
## 依赖
- [Phantomjs](http://phantomjs.org/) ,基于 `qtwebkit`的渲染引擎。
- 在 `puppeteer` 分支,还有依赖于 [puppeteer](https://github.com/GoogleChrome/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 渲染器位置
"worker": 4, //生成pdf的工作进程数
"timeout": 40 //生成PDF的进程的超时时间
}
```
> 注意: 由于`Phantomjs` 依赖 `fontconfig`, 而不同环境下 `fontconfig` 配置会有不一样的情况,
> 需要从两方面入手解决在不同系统下渲染差别的问题。
> 1. 尽量使用`embed font`处理渲染的字体,包括默认的字体。
> 2. 同步 `fontconfig` 的一些公用配置,一般放在 `/etc/fonts/conf.d` 下,修改完后执行 `fc-cache -fv` reset `fontconfig`。
## HTML 模板
经过测试发现如果需要 `A4` 规格的 `PDF` 文件铺满需要使用`1240px x 1754px`
这个尺寸,但是这个也只是参考值;因为我们发现不同系统上 `wkhtmltopdf`
渲染web page的页面尺寸是不一样的,这个需要控制 `--zoom` 参数进行预匹配。
个种纸张的打印尺寸规格可以参考[这里](http://www.papersizes.org/a-sizes-in-pixels.htm)
## Docker
此项目已经打包成docker 镜像
- 签出docker 镜像
```
docker pull mmhk/html2pdf
```
- 环境变量,具体请参考 `config.json` 的说明。
- WORKER ,同时渲染的进程数, 默认为 4
- HOST,service绑定的服务地址及端口,默认为 `127.0.0.1:4444`
- ROOT, swagger-ui 存放的本地目录,可以设置空来屏蔽 swagger-ui 的显示, 默认为 `/usr/local/html2pdf/web_root`
- TIMEOUT, 每个渲染进程的超时时间(秒), 默认为 60
- 运行
```
docker run --name html2pdf -p 4444:4444 mmhk/html2pdf:latest
```