wkhtmltopdf 0.10.2 rc2 手册
wkhtmltopdf是一个可以把html文档转化成pdf文档的程序,下面是它的手册
联系方式
如果你想报告bug,或者有新的需求,请访问https://code.google.com/p/wkhtmltopdf/issues/list, 如果你有任何问题请联系我: http://www.madalgo.au.dk/~jakobt/#about
减掉的功能
wkhtmltopdf的有些版本和Qt的版本不一样,少了一些补丁,这些版本缺少一些特性,你可以通过wkhtmltopdf –version来确定你的版本,你可以使用稳定版本来获取所有的功能。
下面这些特性只在带补丁的QT版本中包含:
- 可以打印多个html文档到一个pdf中
- 运行时不需要x11服务
- 给pdf增加文档缩略图
- 增加页眉页脚
- 生成目录
- 增加链接
- 使用屏幕媒体类型来输出(Printing using the screen media type)
- 禁用webket的自动缩放功能
许可证
版权 (c) 2010 wkhtmltopdf/wkhtmltoimage 作者。
许可证:GPLv3+: GNU GPL 版本3 或更高http://gnu.org/licenses/gpl.html。这是自由软件:你可以随便修改,重新发布。没有法律上的授权限制。
作者
原作者:Jan Habermann, Christian Sciberras 和 Jakob Truelsen. 进一步修改的有Mehdi Abbad, Lyes Amazouz, Pascal Bach, Emmanuel Bouthenot, Benoit Garret 和 Mario Silva.
大纲
wkhtmltopdf [全局选项]... [对象]... <输出文件>
文档对象
wkhtmltopdf可以把一些对象放到输出的文档中(pdf)中,这里的对象可以是独立网页,封面页,或者目录。这些对象根据命令行里添加的顺序添加。选项可以基于对象指定,或者指定全局的选项。属于全局的选项只能放在全局选项的地方。
一个页面对象把单独的一个网页内容放到输出文件中。
(page)? <输入 url/文件名称> [页面选项]
页面对象的选项可以放到全局选项和页面选项区域。这些选项可以在Page Option和Header and footer options 找到。
一个封面对象把单页的内容放到输出文件,这个页面不出现在目录中,也没有页眉页脚。
cover <input url/文件名称> [页面选项]...
所有可以指定给页面对象的选项可以指定给封面。
目录对象插入一个目录到输出文档中。
toc [toc 选项]...
所有的可以指定给页面对象的选项也可以指定给目录对象,另外toc option专属的选项也可以被指定。 目录是通过XSLT生成的,这意味着你可以设定它的样式。你可以指定默认的xslt文件来帮你做这个事,使用选项 –dump-default-toc-xsl来获取这个xsl文档,以便帮助你建立自己的样式文件, 使用–dump-outline来支持轮廓(outline), 看 outline options 部分。
test table
First Header | Second Header |
---|---|
Content Cell | Content Cell |
Content Cell | Content Cell |
全局选项
参数 | 详细参数 | 值格式 | 说明 |
—- | ———————– | ——– | ———- |
–collate | 当打印多份拷贝时校对(默认) | ||
–no-collate | 当打印多份拷贝时不要校对 | ||
–cookie-jar | <path> | 提供的jar文件中读取或写入cookie | |
copies | <number> | 打印到pdf文件中的拷贝数(默认1) | |
-d, | –dpi | <dpi> | 明确的指定dpi,(在基于x11的系统上无效) |
-H, | –extended-help | 显示更全面的帮助,细节。 | |
-g, | –grayscale | 黑白模式 | |
-h, | –help | 显示帮助 | |
–htmldoc | 输出程序的html文档 | ||
–image-dip* | <integer> | 当嵌入图片时指定dpi(默认600) | |
–image-quality | <integer> | 压缩jpeg使用的压缩比(默认94) | |
-l, | –lowquality | 生成低质量的pdf/ps,节省结果文档空间很有用。 | |
–manpage | 输出程序的手册 | ||
-B, | –margin-bottom | <unitreal> | 设置页面底部留白(默认10mm) |
-L, | –margin-left | <unitreal> | 设置页面左边留白(默认10mm) |
-R, | –margin-right | <unitreal> | 设置页面右边留白(默认10mm) |
-T, | –margin-top | <unitreal> | 设置页面顶部留白(默认10mm) |
-O, | –orientation | <orientation> | 设置页面方向,Landscape(横向),或者Portrait(纵向) |
–output-format | <format> | 指定输出格式,pdf或者ps, 不需要文件名后缀了 | |
–page-height | <unitreal> | 页面高度 | |
-s, | –page-size | <Size> | 设置页面大小,默认A4 |
–page-width | <unitreal> | 页面宽度 | |
–no-pdf-compression* | 在pdf对象上不使用无损压缩 | ||
-q, | –quiet | 简化信息输出 | |
–read-args-from-stdin | 从stdin(标准输入)读取参数 | ||
–readme | 输出程序的readme | ||
–title | <text> | 指定生成文档的标题,如果没有指定第一个文档的标题会被使用。 | |
–use-xserver* | 使用x server | ||
-V, | –version | 输出版本信息。 |
带*标记的是只在补丁版的QT中才能使用。
缩略图选项
说明 | |||
———— | ———— | ——– | ———- |
–dump-default-toc-xsl* | 把默认的toc xsl输出到(stdout)标准输出 | ||
–dump-outline* | <文件> | 把默认的轮廓文件输出到一个指定的文件 | |
–outline* | 在生成的pdf中添加缩略图(默认) | ||
–no-outline* | 不使用缩略图 | ||
–outline-depth* | <级别> | 设置缩略图的深度,默认是4. |
带*标记的是只在补丁版的QT中才能使用。
页面选项
———— | ———— | ——– | ———- |
–allow | <路径> | 允许从指定的目录加载文件 | |
–background | 打印背景(默认) | ||
–no-background | 不打印背景 | ||
–checkbox-checked-svg | <路径> | 使用svg渲染选中的复选框 | |
–checkbox-svg | <路径> | 使用svg渲染一般的复选框 | |
–cookie | 设置额外的cookie (可重复的) | ||
–custom-header | 设置额外的http头 (可重复的) | ||
–custom-header-propagation | 为每一个资源请求通过–custom-header增加http 头 | ||
–no-custom-header-propagation | 不为每一个资源请求通过–custom-header增加http 头 | ||
–debug-javascript | 显示js的调试信息到stdout | ||
–no-debug-javascript | 不显示js调试信息。 | ||
–default-header* | 增加默认的页眉,总页数放到左边,当前页码放在右边,类似于 –header-left=’[webpage]’ –header-right=’[page]/[toPage]’ –top 2cm –header-line | ||
–encoding | <编码> | 为输入指定默认的文本编码 | |
–disable-external-links* | 不允许制作到远程web页面的链接 | ||
–enable-external-links* | 允许制作到远程web页面的链接 | ||
–disable-forms* | 不转化html的表单(默认) | ||
–enable-forms* | 转化表单 | ||
–images | 加载打印图片(默认) | ||
–no-images | 不加载打印图片 | ||
–disable-internal-links* | 不允许制作本地链接 | ||
–enable-internal-linkes* | 允许制作本地连接 | ||
–disable-javasript | 不允许web页面运行js | ||
–enable-javascript | 允许web页面运行js | ||
–javasript-delay | <毫秒> | 等待js运行完成 默认200ms | |
–load-error-handling | <处理方法> | 指定页面如何处理页面加载失败的情况 忽略或者跳过或者终止(默认终止) | |
–disable-local-file-access | 不允许读取本地文件,除非显式使用–allow | ||
–enable-local-file-access | 允许读取本地文件。 | ||
–minimum-font-size | <整数> | 最小文字大小 | |
–exclude-from-outline* | 不要把这个页面包含到目录或者缩略图里 | ||
–include-in-outine* | 在目录或者缩略图里包含此页(默认) | ||
–page-offset | <偏移量> | 设置起始页码(默认0) | |
–password | <密码> | http认证密码 | |
–disable-plugins | 不允许安装插件 默认 | ||
–enable-plugins | 允许安装插件, 但插件可能不工作 | ||
–post | <名称> <值> | 增加一个额外的post域,可重复 | |
–post-file | <名称> <值> | 增加一个额外的文件,可重复 | |
–print-media-type* | 使用打印的媒体类别代替屏幕 | ||
–no-print-media-type* | 不使用打印的媒体类别代替屏幕 | ||
–proxy | <代理> | 使用代理 | |
–radiobutton-checked-svg | <路径> | 渲染单选框选中时使用svg | |
–radiobutton-svg | <路径> | 渲染单选框未选中时使用svg | |
–run-script | <js> | 当页面加载完成时运行额外的js | |
–disable-smart-shrinking* | 不允许智能缩放,使得像素/dpi不固定 | ||
–enable-smart-shrinking | 允许智能缩放(默认) | ||
–stop-slow-scripts | 终止一直在运行的js | ||
–no-stop-slow-scripts | 不终止一直在运行的js | ||
–disable-toc-back-links* | 不允许从小结的头链接到目录 (默认) | ||
–enable-toc-back-links* | 允许从小结头部链接到目录 | ||
–user-style-sheet | <url> | 指定用户样式表,为每一页加载 | |
–username | <用户名> | http认证的用户名 | |
–window-status | <windowStatus> | 等待window.status直到这个值,才开始渲染页面 | |
–zoom | <浮点型> | 使用缩放因子,默认1 |
带*标记的是只在补丁版的QT中才能使用。
页眉页脚选项
———— | ———— | ——– | ———- |
–footer-center* | <text> | 页脚居中的文本 | |
–footer-font-name | <name> | 设置页脚字体名称,默认Arial | |
–footer-font-size | <size> | 设置页脚字体大小,默认12 | |
–font-html* | <url> | 增加一个html的页脚 | |
–footer-left* | <text> | 页脚左对齐的文本 | |
–footer-line* | <text> | 在页脚上面显示一条线 | |
–no-footer-line* | 在页脚上不显示线 | ||
–footer-right* | <text> | 页脚右对齐的文本 | |
–footer-spacing* | <real> | 页脚和内容之间的空间,单位mm 默认0 | |
–header-center* | <text> | 页眉居中的文本 | |
–header-font-name | <name> | 页眉字体名称,默认Arial | |
–header-font-size* | <size> | 页眉字体大小 默认12 | |
–header-html* | <url> | 增加一个html的页眉 | |
–header-left* | <text> | 页眉左对齐的文本 | |
–header-line* | 页眉下显示分割线 | ||
–no-header-line* | 页眉下不显示分割线 | ||
–header-right* | <text> | 页眉右对齐的文本 | |
–header-spacing | <real> | 页眉和内容之间的空间 单位mm 默认0 | |
–replace* | <name> <vlaue> | 用value代替name,在页眉页脚中。 |
目录选项
–disable-dotted-lines* | 不允许使用虚线 | |
–toc-header-text* | <text> | 目录的文本,默认Table of Content. |
–toc-level-indentation* | <width> | 目录中每一级的缩进,默认1em |
–disable-toc-links* | 不允许从目录链接到内容 | |
–toc-text-size-shrink* | <real> | 目录中每一级字体的缩放,默认0.8 |
–xsl-style-sheet* | <file> | 使用支持的xsl样式来打印目录 |
使用代理
默认情况下,代理可以从环境变量proxy,all_proxy和http_proxy中读取,也使用-p来指定代理
<type> := "http://" | "socks5://"
<serif> := <username> (":" <password>)? "@"
<proxy> := "None" | <type>? <sering>? <host> (":" <port>)?
这里有几个例子。
http://user:password@myproxyserver:8080
socks5://myproxyserver
None
页眉和页脚
使用–header-和–footer-参数可以把页眉页脚添加到文档中,在页眉页脚中支持一些文本字符串,例如–header-left下面这些变量将会被替换
- *[page] 被打印的当前页码(index)代替
- *[frompage] 被打印的第一页码代替
- *[topage] 被打印的最后一页码代替
- *[webpage] 页面的url代替
- *[section] 被当前section的名字代替
- *[subsection] 被当前的子部分名字代替
- *[date] 被系统的日期格式替换当前日期代替
- *[time] 被系统当前时间代替
- *[title] 被当前页面的标题代替
- *[doctitle] 被输出文档的标题代替。
像在一个例子中指定了
--header-right "Page [page] of [toPage]"
将会产生Page x of y, 这里x是当前页面的页码,y是最后一页的页码,出现在页面的右上角。
页眉页脚也支持html文档,上面的例子类似于下面的这个html
<html><head><script>
function subst() {
var vars={};
var x=document.location.search.substring(1).split('&');
for (var i in x) {var z=x[i].split('=',2);vars[z[0]] = unescape(z[1]);}
var x=['frompage','topage','page','webpage','section','subsection','subsubsection'];
for (var i in x) {
var y = document.getElementsByClassName(x[i]);
for (var j=0; j<y.length; ++j) y[j].textContent = vars[x[i]];
}
}
</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>
从这个例子可以看出,可以传参数进入页眉页脚的html文档中。
缩略图
带有qt补丁的wkhtmltopdf支持pdf缩略图,像书签一样。可以使用–outline来进行开关。缩略图是基于<h>标签产生。更深入的描述请看目录部分
缩略图有时候可能很深,如果<h>标签有很多层次,可以使用–outline-depth控制边界。
目录
可以在命令行增加一个toc来给pdf增加目录。例如
wkhtmltopdf toc http://doc.trolltech.com/4.6/qstring.html qstring.pdf
这个目录基于h标签(例如<h1><h2>)来生成的,首先生成一个xml,然后使用xslt转换成html.
生成的xml文档可以使用–dump-outline输出来看。
wkhtmltopdf --dump-outline toc.xml http://doc.trolltech.com/4.6/qstring.html qstring.pdf
xslt文档可以用–xsl-style-sheet来指定。
wkhtmltopdf toc --xsl-style-sheet my.xsl http://doc.trolltech.com/4.6/qstring.html qstring.pdf
–dump-default-toc-xsl可以用来获取默认的xslt样式文件到标准输出,这是你写自己的样式的一个好的开始。
wkhtmltopdf --dump-default-dox-xsl
这个xml文档是在http://code.google.com/p/wkhtmltopdf/outline的名字空间内,它有一个根节点叫“outline”,这个节点包含了很多“item”节点。一个“item”可以包含别的“item”,这些是缩略图的子部分。一个“item”有如下的属性
* title 这个小结的名字
* page 这个小结的页码
* link 这个小结的链接
* backLink 连回的一个名字
提醒:toc选项只使用默认的样式表,所以自定义的样式表不起作用的。
分页
webket 现有的分页算法还有很多待改进的地方。webkit把所有的东西都渲染到一个长的页面里。然后把他们裁分到几个页面。这意味着如果你有两列文本,其中一个正好被半行切分。webkit将把这行切成两部分,一部分在上页,一部分在下页。它也会把图片切分到两页里面。如果你使用补丁版的QT,你可以使用css属性page-break-inside来做几分补救。这不是一个简单的解决方案,除非能组织你的html文档在每一个页面能干净利落的切分。
可以看看http://code.google.com/p/wkhtmltopdf/issues/detail?id=9, http://code.google.com/p/wkhtmltopdf/issues/detail?id=33 and http://code.google.com/p/wkhtmltopdf/issues/detail?id=57.
页面尺寸
默认的页面大小是A4, 但是使用–page-size选项,页面大小可以被修改成几乎任意大小。例如:A3, Letter 或者Legal. 支持的全尺寸可以看
http://doc.trolltech.com/4.6/qprinter.html#PageSize-enum.
想更精细的控制页面大小,可以使用–page-height和–page-width选项。
从标准输入读取参数
如果你需要批量转化很多页面,而且你觉得wkhtmltopdf启动太慢,你应该试试 –read-args-from-stdin.
当–read-args-from-stdin 的stdin输入的每一行送到wkhtmltopdf,都会被当成一次wkhtmltopdf的调用, 把这一行指定的参数合并到wkhtmltopdf的参数中。
例如可以这样来做:
echo "http://doc.trolltech.com/4.5/qapplication.html qapplication.pdf" >> cmds
echo "cover google.com http://en.wikipedia.org/wiki/Qt_(toolkit) qt.pdf" >> cmds
wkhtmltopdf --read-args-from-stdin --book < cmds
稳定版本
在wkhtmltopdf网站 你可以下载一个稳定的版本http://code.google.com/p/wkhtmltopdf/downloads/list。 稳定的二进制版本可以工作在大部分的系统上,而且是带了打过补丁的QT.
不幸的是稳定版本不是特别的稳定,在linux系统上,他依赖glibc和openssl, 还有你将需要有一个xserver 但是不需要运行。你可能需要不同的字体包含xfonts-scalable(type1)和msttcorefonts. 看看这里http://code.google.com/p/wkhtmltopdf/wiki/static 有针对的问题。
编译
如果正好因为某种原因稳定的二进制版本在你的系统上不能工作,你可能需要自己编译一下wkhtmltopdf。
GNU/LINUX:
编译之前你需要安装依赖:x11, gcc, git 还有openssl. 在Debian/Ubuntu 可以通过如下的命令
sudo apt-get build-dep libqt4-gui libqt4-network libqt4-webkit
sudo apt-get install openssl build-essential xorg git-core git-doc libssl-dev
另一方面,你必须使用自己的包管理器, 包的名字可能不一样。
首先你必须签出QT的修订版。
git clone git://gitorious.org/+wkhtml2pdf/qt/wkhtmltopdf-qt.git wkhtmltopdf-qt
接着你必须配置 编译,安装QT, 注意,这将花费一些时间,取决于你使用什么参数来配置qt.
cd wkhtmltopdf-qt
./configure -nomake tools,examples,demos,docs,translations -opensource -prefix ../wkqt
make -j3
make install
cd ..
现在要做的就是编译wkhtmltopdf。
git clone git://github.com/antialize/wkhtmltopdf.git wkhtmltopdf
cd wkhtmltopdf
../wkqt/bin/qmake
make -j3
现在你可以看到再当前的目录下面已经有可以用的wkhtmltopdf。 你可以可选择的安装它,通过:
make install
其他操作系统和高级特性
如果你想在不同的操作系统编译,可以看看http://code.google.com/p/wkhtmltopdf/wiki/compilation.
##安装
安装wkhtmltopdf有几种方式,你可以下载已经编译好的二进制文件,你也可以自己编译。 在windows系统下,最简单的安装方式是下载最新的安装器。在linux你可以下载最新的稳定版本,然而,你仍然需要安装其他一些软件。如果想知道更多的细节,请阅读手册的稳定版本部分。
例子
这个部分展示了几个例子来演示怎样调用wkhtmltopdf。
转换远端的html到pdf:
wkhtmltopdf http://www.google.com google.pdf
转换本地的html到pdf:
wkhtmltopdf my.html my.pdf
你也可以转换ps文件,如果你愿意的话
wkhtmltopdf my.html my.ps
生产eler2.pdf样本文件
wkhtmltopdf -H http://geekz.co.uk/lovesraymond/archive/eler-highlights-2008 eler2.pdf
使用目录打印一本书。
wkhtmltopdf -H cover cover.html toc chapter1.html chapter2.html chapter3.html book.pdf