wkhtmltopdf 0.12.6 中文文档(精心整理)
wkhtmltopdf 0.12.6 中文文档
说明
- 示例的测试代码均在 Windows10 的 Linux子系统 中进行;
- 原文档地址:https://wkhtmltopdf.org/usage/wkhtmltopdf.txt
- 版本名称: wkhtmltopdf 0.12.6 (with patched qt)
概述
wkhtmltopdf patched qt 是将一个或多个HTML页面合并为一个PDF文档的应用程序。
基本语法
wkhtmltopdf [GLOBAL OPTION]... [OBJECT]... <output file>
GLOBAL OPTION : 全局选项
OBJECT: 输入的文档对象,即网页(页面对象)、封面、目录中任何对象
output file: 输出的PDF文件, 如../dir/file_name.pdf
文档对象
wkhtmltopdf能够将多个对象(页面对象、封面、目录等)合并输出到一个PDF文件中,这个对象可以是网页(页面对象)、封面、目录中的任何一个或多个。
这些对象输出到PDF文件中的顺序,可以通过命令行中的选项参数配置。
配置选项参数,既可以针对每个对象配置选项参数,也可以配置全局选项。
配置选项参数有两种方式:
- 配置全局选项
- 配置页面选项,针对输入的文档对象配置参数
注意:
全局选项只能在 全局选项区域 [GLOBAL OPTION] 处配置,也就是 wkhtmltopdf 后面的位置
只针对某个输入文档对象的配置选项,紧跟在输入对象之后,进行配置
> 页面对象
页面对象是将输入的单个网页的内容输出到PDF文档中。
页面对象的参数可以配置在全局选项区域 [GLOBAL OPTION] 或 页面选项区域 [PAGE OPTION] 的位置。
在下方的【页面选项】、【页眉页脚选项】部分,可以找到适合你需求的选项配置。
语法
(page)? <input url/file name> [PAGE OPTION]...
input url/file name: 输入的页面文件对象
PAGE OPTION:页面选项
示例
wkhtmltopdf https://www.baidu.com/ --no-images /mnt/d/pdf/baidu.pdf
> 封面对象
封面对象是将输入的单个网页的内容输出到PDF文档中。
封面对象生成的PDF页面,不会出现在目录中,也没有页眉和页脚。
所有页面对象的选项(页面选项),对于封面对象同样也适用。
语法
cover <input url/file name> [PAGE OPTION]...
示例
wkhtmltopdf --footer-center '页脚内容' cover https://www.baidu.com/ --no-images https://www.baidu.com/more/ --no-images /mnt/d/pdf/baidu.pdf
> 目录对象
目录对象是将内容中的 <h?>
标签生成目录,然后把目录的内容输出到PDF文档中。
所有页面对象的选项(页面选项),对于目录对象同样也适用,另外目录对像还有自己对应的专门【目录选项】。
目录是通过XSLT样式表生成的,这意味着可以对其进行自定义样式设置,使其外观符合您的样式要求。
要想了解目录如何自定义样式,可以通过wkhtmltopdf --dump-default-toc-xsl
选项,查看默认样式配置,然后可以通过--dump-outline
选项,将生成的大纲(目录)保存到文件中,进行查看修改对应样式。要想了解更多内容,请查看【大纲选项】。
语法
toc [TOC OPTION]...
全局选项
> 帮助与输出
选项 | 描述 | 默认/值 | 可选值 |
---|---|---|---|
-h, --help | 显示帮助 | ||
-H, --extended-help | 显示详细的帮助说明 | ||
–htmldoc | 输出HTML格式的帮助 | ||
–readme | 输出 readme 文档 | ||
–license | 输出许可证信息并退出 | ||
-V, --version | 输出版本信息并退出 | ||
–manpage | 输出man配置说明 | ||
–log-level | 设置日志级别 | info | none, error, warn,info |
-q, --quiet | 不输出任何日志,(同 --log-level none) |
> 页面尺寸与方向
选项 | 描述 | 默认/值 | 可选值 |
---|---|---|---|
-B, --margin-bottom | 设置页面下边距 | 0 | |
-L, --margin-left | 设置页面左边距 | 10mm | |
-R, --margin-right | 设置页面右边距 | 10mm | |
-T, --margin-top | 设置页面上边距 | 0 | |
–page-width | 页面宽度,值需带单位 | ||
–page-height | 页面高度,值需带单位 | ||
-s, --page-size | 页面尺寸 | A4 | A4, Letter, 等 |
-O, --orientation | 设置纸张方向 | Portrait | Landscape(横向) , Portrait(纵向) |
> 输出PDF数量
选项 | 描述 | 默认/值 | 可选值 |
---|---|---|---|
–copies | 输出副本的数量,也就是说一次性输出几份PDF | 1 | |
–collate | 输出多个副本时进行校验 | 默认选项 | |
–no-collate | 输出多个副本时不校验 |
> 颜色图像分辨率
选项 | 描述 | 默认/值 | 可选值 | |
---|---|---|---|---|
-d, --dpi | 设置分辨率(基于X11的系统无效) | 96 | ||
-g, --grayscale | PDF输出颜色为黑白色 | |||
–image-dpi | PDF中嵌入的图像,缩放到该分辨率 | 600 | ||
–image-quality | jpeg图片压缩到这个质量 | 94 |
> 其他
选项 | 描述 | 默认/值 | 可选值 | |
---|---|---|---|---|
–cookie-jar
| 读取和写入cookie,从jar文件中 | 存放jar文件路径 | ||
-l, --lowquality | 生成低质量文档;减少存储空间 | |||
–no-pdf-compression | 不压缩PDF文档(不建议使用) | |||
–read-args-from-stdin | 从标准输入中读取命令行参数, 并应用到每个命令行,用于批处理 | |||
–title
| 生成PDF文档标题(不指定则使用第一个文档的标题) | ??? | ||
–use-xserver | 使用X服务器(没有X11,某些插件和其他东西可能无法工作) |
页面选项
> HTTP、代理、cookie
选项 | 描述 | 默认/值 | 可选值 |
---|---|---|---|
–cookie | 设置cookie,value应为url编码 | 可重复 | |
–custom-header | 设置HTTP请求头 | 可重复 | |
–custom-header-propagation | 为每个加载的资源设置HTTP请求头,请求头的参数由–custom-header 指定 | ||
–no-custom-header-propagation | 不为每个加载的资源设置HTTP请求头 | ||
–bypass-proxy-for | 可重复 | ||
-p, --proxy | 使用代理 | ||
–proxy-hostname-lookup | 使用这个( --proxy)代理解析主机名 | ||
–username | http授权用户名 | ||
–password | Http认证密码,访问带账号密码的页面 | ||
–post | 添加额外的POST字段 | 可重复 | |
–post-file
| 添加额外的文件 | 可重复 | |
–ssl-crt-path
| OpenSSL PEM格式的ssl客户端证书公钥的路径,optionally followed by intermediate ca and trusted certs | ||
–ssl-key-password | SSL客户端证书私钥密码 | ||
–ssl-key-path
| OpenSSL PEM格式的ssl客户端证书私钥的路径 |
> javascript 相关
选项 | 描述 | 默认/值 | 可选值 |
---|---|---|---|
–debug-javascript | 输出javascript调试信息 | ||
–no-debug-javascript | 不输出javascript调试信息 | 默认选项 | |
-n, --disable-javascript | web页面禁用javascript | ||
–enable-javascript | web页面加载javascript | 默认选项 | |
–javascript-delay | 等待javascript完成的时间 | 200 | 单位毫秒 |
–run-script | 页面加载完成后,运行此javascript | ||
–stop-slow-scripts | 停止运行缓慢的javascripts | 默认选项 | |
–no-stop-slow-scripts | 等待运行缓慢的javascripts | ||
–window-status | 等待window.status等于此字符串时,打印PDF页面 |
> 样式、显示、编码
选项 | 描述 | 默认/值 | 可选值 |
---|---|---|---|
–user-style-sheet
| 指定样式表,应用到每个页面 | ||
–default-header | 设置一个默认页眉,左侧是页面名称,右侧是页码;相当于设置 --header-left=’[webpage]’ --header-right=’[page]/[toPage]’ --top 2cm --header-line | ||
–page-offset | 设置起始页码 | 0 | |
–minimum-font-size | 设置最小字号 | ||
–print-media-type | 使用print媒体类型代替screen类型 | ||
–no-print-media-type | 禁止用print媒体类型代替screen类型 | 默认选项 | |
–viewport-size <> | 设置视口大小,如果有自定义滚动条或css属性overflow 模拟窗口 | ||
–disable-smart-shrinking | 禁止使用WebKit pixel/dpi比值非恒定的智能缩放策略 | ||
–enable-smart-shrinking | 允许使用WebKit pixel/dpi比值非恒定的智能缩放策略 | 默认选项 | |
–zoom | 设置生成PDF时,web页面的缩放比例 | 1 | |
–exclude-from-outline | 禁止当前页面添加到目录和大纲中 | ||
–include-in-outline | 允许当前页面添加到目录和大纲中 | 默认选项 | |
–encoding | 设置输入文本的默认编码 |
> HTML、图片、背景
选项 | 描述 | 默认/值 | 可选值 |
---|---|---|---|
–checkbox-checked-svg
| 复选框选中状态,应用此svg文件 | ||
–checkbox-svg
| 复选框未选中状态,应用此svg文件 | ||
–radiobutton-checked-svg
| 复选框选中状态,应用此svg文件 | ||
–radiobutton-svg
| 复选框未选中状态,应用此svg文件 | ||
–disable-forms | 禁止将HTML表单字段转换为pdf表单字段 | 默认选项 | |
–enable-forms | 允许将HTML表单字段转换为pdf表单字段 | ||
–background | 打印PDF背景 | 默认选项 | |
–no-background | 不打印PDF背景 | ||
–images | 允许加载并打印图片 | 默认选项 | |
–no-images | 禁止加载并打印图片 |
> 链接挑转
选项 | 描述 | 默认/值 | 可选值 |
---|---|---|---|
–disable-external-links | 禁用PDF文档中的外部链接生成超链接 | ||
–enable-external-links | 允许PDF文档中的外部链接生成超链接 | 默认选项 | |
–disable-internal-links | 禁止PDF文档中的内部链接生成超链接 | ||
–enable-internal-links | 允许PDF文档中的内部链接生成超链接 | 默认选项 | |
–keep-relative-links | 相对路径的外部链接,生成相对路径超链接 | ||
–resolve-relative-links | 相对路径的外部链接,生成绝对路径超链接 | 默认选项 | |
–disable-toc-back-links | 禁止从节标题链接到目录 | 默认选项 | |
–enable-toc-back-links | 允许从节标题链接到目录 |
> 文件、缓存、文件加载失败、插件
选项 | 描述 | 默认/值 | 可选值 |
---|---|---|---|
–allow
| 加载文件夹中的一个或多个文件 | 可重复 | |
–disable-local-file-access | 禁止本地文件读取加载其他本地文件,除非设置–allow | 默认选项 | |
–enable-local-file-access | 允许本地文件读取加载其他本地文件 | ||
–cache-dir
| Web缓存目录 | ||
–load-error-handling | web页面加载失败的处理方式 | abort | abort, ignore,skip |
–load-media-error-handling | 媒体文件加载失败的处理方式 | ignore | abort, ignore,skip |
–disable-plugins | 禁用插件 | 默认选项 | |
–enable-plugins | 允许使用插件,但是插件可能不工作 |
页眉页脚选项
> 页眉页脚通用
选项 | 描述 | 默认/值 | 可选值 |
---|---|---|---|
–replace | 用value值替换[name]变量,适用页眉页脚,不适用–footer-html | 可重复 |
> 页眉
选项 | 描述 | 默认/值 | 可选值 |
---|---|---|---|
–header-font-name | 设置页眉字体 | Arial | |
–header-font-size | 设置页眉字号 | 12 | |
–header-left
| 页眉左侧插入文本 | ||
–header-center
| 页眉中间插入文本 | ||
–header-right
| 页眉右侧插入文本 | ||
–header-html | 添加html页面作为页眉 | ||
–header-line | 页眉下方的显示分割线 | ||
–no-header-line | 页眉下方的不显示分割线 | 默认选项 | |
–header-spacing | 页眉与内容之间的间距 | 0 | 单位mm |
> 页脚
选项 | 描述 | 默认/值 | 可选值 |
---|---|---|---|
–footer-font-name | 设置页脚字体 | Arial | |
–footer-font-size | 设置页脚字号 | 12 | |
–footer-left
| 页脚左侧插入文本 | ||
–footer-center
| 页脚中间插入文本 | ||
–footer-right
| 页脚右侧插入文本 | ||
–footer-html | 添加html页面作为页脚 | ||
–footer-line | 页脚上方的显示分割线 | ||
–no-footer-line | 页脚上方的不显示分割线 | 默认选项 | |
–footer-spacing | 页脚与内容之间的间距 | 0 | 单位mm |
大纲选项(Outline)
大纲就是PDF阅读器中,用于显示导航跳转的部分
选项 | 描述 | 默认/值 | 可选值 |
---|---|---|---|
–dump-default-toc-xsl | 输出默认目录的xsl样式表到命令行面板 | ||
–dump-outline | 保存大纲内容到文件中 | ||
–outline | PDF文件中包含大纲 | 默认选项 | |
–no-outline | 禁止PDF文件阅读器显示大纲内容 | ||
–outline-depth | PDF文件中大纲的层级深度 | 4 | |
xsl是XML 样式表,相当于CSS 是 HTML 样式表
目录选项(TOC)
TOC 是 英文table of contents的缩写。
目录是PDF文件中的一个页面,和我们书本中的目录是一个意思。
选项 | 描述 | 默认/值 | 可选值 |
---|---|---|---|
–disable-dotted-lines | 目录中标题与页码之间不使用点线 | ||
–toc-header-text
| 目录的头部文字,一般设置为“目录” | Table of Contents | |
–toc-level-indentation | 目录中每一级标题,缩进的宽度 | 1em | |
–disable-toc-links | 禁止从目录连接到节标题 | ||
–toc-text-size-shrink | 目录中每一级标题的字号,缩放比例 | 0.8 | |
–xsl-style-sheet | 指定目录使用的xsl样式表,可以自定义目录样式 |
解释说明
> 页面尺寸
默认的页面尺寸是 A4 纸大小,但是通过–page-size选项可以修改为其他的任何尺寸,例如A3、Letter、Legal。
更多页面尺寸查阅:https://doc.qt.io/archives/qt-4.8/qprinter.html#PaperSize-enum
如果要对页面设置其他尺寸大小可以使用 --page-width 和 --page-height 这两个选项。
> 从标准输入流中读取参数
主要应用于批处理。
如果需要批量转换许多页面,并且感到 wkhtmltopdf 速度很慢,那么可以尝试 --read-args-from-stdin
选项。
当使用--read-args-from-stdin
选项时,批处理的每一行输入命令,都会与--read-args-from-stdin
后的选项参数合并到一起,并应用到每一行命令中。
示例如下:
echo "https://www.baidu.com/ baidu.pdf" >> cmds
echo "cover https://www.baidu.com/ http://www.people.com.cn/GB/208743/403202/403212/index.html people.pdf" >> cmds
wkhtmltopdf --read-args-from-stdin --no-images < cmds
echo 的两行命令用于生成批处理文件cmds,
最后一行wkhtmltopdf --read-args-from-stdin --no-images < cmds
用于读取cmds中的命令,
并把 --no-images
选项与每一个输入命令合并后,输出PDF文件,
以上示例会输出两个PDF文件,baidu.pdf 和 people.pdf。
> 设置代理
默认情况下,代理信息将从环境变量中读取:proxy、 all_proxy 和 http_proxy,
代理设置也能通过 -p, --proxy <proxy>
选项配置
用 BNF 设置代理如下:
<type> := "http://" | "socks5://"
<serif> := <username> (":" <password>)? "@"
<proxy> := "None" | <type>? <string>? <host> (":" <port>)?
如果不熟悉 BNF配置,下面是一些示例:
http://user:password@myproxyserver:8080
socks5://myproxyserver
None
> 页眉页脚
使用 --header-*
and --footer-*
选项,可以把页眉、页脚添加到PDF文档中。
在使用一些选项(如 --header-left
)设置页眉、页脚的文本字符串中,可以使用以下变量:
这些变量将被替换为相应的值。
变量 | 简介 | 说明 |
---|---|---|
[page] | 页码 | 当前正在打印的页数 |
[frompage] | 第一页的页码 | 要打印的第一页的页码,因为第一页的页码可能不是1 |
[topage] | 总页码 | 要打印的最后一页的页码 |
[webpage] | url地址 | 当前正在打印页面的URL地址 |
[section] | 节名 | 当前正在打印的节名称 |
[subsection] | 小节名 | 当前正在打印的小节名称 |
[date] | 当前日期 | 系统本地格式的当前日期 |
[isodate] | 当前日期 | ISO 8601扩展格式的当前日期 |
[time] | 当前时间 | 系统本地格式的当前时间 |
[title] | 页面标题 | 当前页面对象的标题 |
[doctitle] | 文档标题 | 输出文档的标题 |
[sitepage] | 站点页码 | 当前web页面中正在转换的页面的编号 |
[sitepages] | 站点总页数 | 当前web页面中正在转换的页面数 |
例如,在页面右上角显示“当前是第x页|共y页”, 设置页眉选项如下:
--header-right "当前是第[page]页|共[topage]页"
页眉、页脚也支持用html文档设置。
例如,通过设置--header-html header.html
选项,header.html中内容如下:
<!DOCTYPE html>
<html>
<head>
<script>
function subst() {
var vars = {};
var query_strings_from_url = document.location.search.substring(1).split('&');
for (var query_string in query_strings_from_url) {
if (query_strings_from_url.hasOwnProperty(query_string)) {
var temp_var = query_strings_from_url[query_string].split('=', 2);
vars[temp_var[0]] = decodeURI(temp_var[1]);
}
}
var css_selector_classes = ['page', 'frompage', 'topage', 'webpage', 'section', 'subsection', 'date', 'isodate', 'time', 'title', 'doctitle', 'sitepage', 'sitepages'];
for (var css_class in css_selector_classes) {
if (css_selector_classes.hasOwnProperty(css_class)) {
var element = document.getElementsByClassName(css_selector_classes[css_class]);
for (var j = 0; j < element.length; ++j) {
element[j].textContent = vars[css_selector_classes[css_class]];
}
}
}
}
</script>
</head>
<body style="border:0; margin: 0;" onload="subst()">
<table style="border-bottom: 1px solid black; width: 100%">
<tr>
<td class="section"></td>
<td style="text-align:right">
Page <span class="page"></span> of <span class="topage"></span>
</td>
</tr>
</table>
</body>
</html>
从示例中可以看出,参数以GET方式发送到页眉、页脚的html文档,如下形式。
http://www.xxx.com/header.html?page=xxx&frompage=xxx&topage=xxx&webpage=xxx§ion=xxx&subsection=xxx&date=xxx&isodate=xxx&time=xxx&title=xxx&doctitle=xxx&sitepage=xxx&sitepages=xxx
页眉、页脚的html文档也支持自定义参数--header-html header.html?abc=123
,在html文档的url中,自定义参数将自动与默认参数拼接到一起,如下:
http://www.xxx.com/header.html?page=xxx&frompage=xxx&topage=xxx&webpage=xxx§ion=xxx&subsection=xxx&date=xxx&isodate=xxx&time=xxx&title=xxx&doctitle=xxx&sitepage=xxx&sitepages=xxx&abc=123
> 大纲
大纲就是PDF阅读器中,用于显示导航跳转的部分,不属于PDF文档中的一部分,主要是方便阅读器浏览导航使用。
Wkhtmltopdf 用 patched qt 支持PDF大纲(也称为书签),可以通过设置--outline
(默认选项)选项实现。
大纲是根据 <h?>
(h1–h6) 标签生成的,有关如何实现的详细说明,请参见目录部分。
如果 <h?>
标签在HTML文档中嵌套的层级非常深,那么大纲树的层级也会变得非常深。可以通过--outline-depth
选项来设置大纲的层级深度。
> 目录
TOC 是 英文table of contents的缩写。
目录是PDF文件中的一个页面,和我们书本中的目录是一个意思。
目录是根据web文档中的 <h?>
(h1–h6) 标签生成。
首先生成一个XML文档,然后使用XSLT将其转换为HTML。
- 生成目录
通过向命令行添加toc对象,可以将目录添加到文档中,示例如下:
wkhtmltopdf toc https://doc.qt.io/archives/qt-4.8/qstring.html qstring.pdf
- 保存大纲到文件中
通过使用 --dump-outline
选项,将生成的xml大纲文档转储到文件(示例中:toc.xml)中,可以查看生成的XML文档。例如:
wkhtmltopdf --dump-outline toc.xml https://doc.qt.io/archives/qt-4.8/qstring.html qstring.pdf
- 指定目录样式表
通过使用 --xsl-style-sheet
选项,指定生成目录的XSLT样式表文档。
wkhtmltopdf toc --xsl-style-sheet my.xsl https://doc.qt.io/archives/qt-4.8/qstring.html qstring.pdf
- 查看默认样式表
通过使用 --dump-default-toc-xsl
选项,把默认的XSLT样式表输出到命令行面板中。这对于自定义样式表,将是一个很好的参考建议。
wkhtmltopdf --dump-default-toc-xsl
XML文档位于命名空间"http://wkhtmltopdf.org/outline"之中,它有一个名为"outline" 的根节点,它包含许多“item”节点。一个“item”节点,可以包含任意数量的“item”节点。这些是项目所代表部分的概要小节。项目节点具有以下属性:
The XML document is in the namespace "http://wkhtmltopdf.org/outline" it has a
root node called "outline" which contains a number of "item" nodes. An item
can contain any number of item. These are the outline subsections to the
section the item represents. A item node has the following attributes:
- “title” 章节的名称
- “page” 章节所在位置的页码
- “link” 从链接跳转到该章节的URL。(a URL that links to the section.)
- “backLink” 从章节返回锚点的链接。(the name of the anchor the section will link back to.)
其他的 TOC 选项只影响默认样式表,因为它们在指定自定义样式表时将无法工作。
联系我们
如果有任何问题反馈,请查看https://wkhtmltopdf.org/support.html
更多推荐
所有评论(0)