持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情
在项目开发过程中,需要使用到将html转化为pdf的需求。目前已经有较多解决方案,现提供一种相对较旧的但是极为简单的解决方案,一些小项目使用完全够了。本文就wkhtmltopdf做一个小小的demo总结
入门使用
wkhtmltopdf的官方下载地址:wkhtmltopdf.org/downloads.h…
下载完成后,直接在cmd中输入其参数指令wkhtmltopdf xxx.html d:a.pdf即可
则在d盘就会a.pdf,该pdf即是由xxx.html转换而来的。
参数详解
由上可知wkhtmltopdf的基本命令参数语法为:
wkhtmltopdf [GLOBAL OPTION]... [OBJECT]... <output file>
其中,命令参数包含五部分,分别是“全局参数”,“大纲参数选项”,“页面对象参数”,“页眉和页脚参数选项”和“目录对象参数”。
全局参数
| 命令 | 解析 |
|---|---|
| --collate | 当输出多个副本时进行校验(这是默认设置) |
| --no-collate | 当输出多个副本时不进行校验 |
| --cookie-jar | 从提供的JAR文件中读写cookie数据 |
| --copies | 设置输出副本的数量(默认主1),其实为1就够了 |
| -d, --dpi | 指定一个要分辨率(这在 X11 系统中并没有什么卵用) |
| -H, --extended-help | 相对 -h 参数,显示更详细的说明文档 |
| -g, --grayscale | 指定以灰度图生成PDF文档。占用的空间更小 |
| -h, --help | 显示帮助信息 |
| --htmldoc | 输出程序的html帮助文档 |
| --image-dpi | 当页面中有内嵌的图片时, 会下载此命令行参数指定尺寸的图片(默认值是 600) |
| --image-quality | 当使用 jpeg 算法压缩图片时使用这个参数指定的质量(默认为 94) |
| --license | 输出授权信息并退出 |
| -l, --lowquality | 生成低质量的 PDF/PS ,能够很好的节约最终生成文档所占存储空间 |
| --manpage | 输出程序的手册页 |
| -B, --margin-bottom | 设置页面的 底边距 |
| -L, --margin-left | 设置页面的 左边距 (默认是 10mm) |
| -R, --margin-right | 设置页面的 右边距 (默认是 10mm) |
| -T, --margin-top | 设置页面的 上边距 |
| -O, --orientation | 设置为“风景(Landscape)”或“肖像(Portrait)”模式, 默认是肖像模块(Portrait) |
| --page-height | 页面高度 |
| -s, --page-size | 设置页面的尺寸,如:A4,Letter等,默认是:A4 |
| --page-width | 页面宽度 |
| --no-pdf-compression | 不对PDF对象使用丢失少量信息的压缩算法,不建议使用些参数, 因为生成的PDF文件会非常大。 |
| -q, --quiet | 静态模式,不在标准输出中打印任何信息 |
| --read-args-from-stdin | 从标准输入中读取命令行参数 |
| --readme | 输出程序的 readme 文档 |
| --title | 生成的PDF文档的标题,如果不指定则使用第一个文档的标题 |
| -V, --version | 输出版本信息后退出 |
大纲参数选项
| 命令 | 解析 |
|---|---|
| --dump-default-toc-xsl | 输出默认的 TOC xsl 样式表到标准输出 |
| --dump-outline | 输出“大纲”到指定的文件(文件内容为xml) |
| --outline | 在生成的PDF文档中输出“大纲”(这是默认设置) |
| --no-outline | 不在pdf文档中输出大纲 |
| --outline-depth | 设置生成大纲的深度(默认为 4) |
关于模块设置不分页
由于需求涉及某个模块需要设置不分页的情况,这该怎么办呢?这就可以用到css的这个属性了:page-break-inside: avoid; 如给下图方框中的div模块设置分页不被截断,则可给该模块增加cell-col,并设置page-break-inside: avoid,那么就算pdf需要分页,也不会将这个模块截断。
.cell-col {
page-break-inside: avoid;
}