“文档对象”是指PDF文档中的文档对象,共有三种类型的“文档对象”,他们分别是“页面对象”,“封面对象”和“目录对象”。
“页面对象”是指以页面的形式在PDF文档中呈现的对象,这个是相对于“封面对象”和“目录对象”来讲的。此类对象会成为PDF文档中内容。
“封面对象”是指以封面的形式在PDF文档中呈现的对象。这类对象会成为PDF文档中的封面。
“目录对象”是以目录的形式在PDF文档中呈现的对象,又叫“TOC对象”。这类对象会成为PDF文档中的目录。
“大纲”是指阅读PDF文档时的书签导航。
“外链”是指所有在这个页面中且不指向它自身页面中锚点的超链接。
“内链”是指在这个页面中且指向的目标页面是这个页面本身中的一个锚点的超链接。
上述代码就是 wkhtmltopdf 的命令行格式,看似简单,其实在 和 中还别有洞天。预知详情,且听我慢慢道来。
wkhtmltopdf 能够把多个“对象”合并生成一个pdf文档,这些“对象”可以是“页面对象”、“封面对象”、或是“目录对象”。这些对象在pdf文档中的顺序可以通过命令行参数来指定。命令行参数包括两部分,一种是针对某一特定“对象”的命令行参数,另一种是全局的命令行参数。并且全局的命令行参数只能放在全局参数区([GLOBAL OPTION])中指定。
“页面对象”作用是用来把一个网页作为内容输出到PDF文档中。
“页面对象”的参数可以放在“全局参数域([GLOBAL OPTIONS])”和“页面参数域([PAGE OPTIONS])”。程序会根据实际情况在所有参数中找到合适的参数应用到页面、页眉和页脚。
“封面对象”用来把一个网页作为封面输出到PDF文档中,输出的页面不会在TOC中出现,并且不会包含页眉和页脚。
所有能够在“页面对象”中使用的参数都可以用到“封面对象”
“目录对象”的作用是输出一个目录到PDF文件中。
所有能够在“页面对象”中使用的参数都可以用到“TOC对象”,并且还有许多的针对“TOC对象”的参数可以应用到“TOC对象”中。目录是通过 XSLT 生成的,这就意味着它可以被定义成任何你想看到的样子。你可以通过命令行参数 输出默认的 XSLT 文档,通过 命令行参数 可指定以XML格式输出当前处理文档的目录到指定文件。更多详细内容请查看后面介绍的 目录对象参数
命令参数包含五部分,分别是“全局参数”,“大纲参数选项”,“页面对象参数”,“页眉和页脚参数选项”和“目录对象参数”。
上述代码区是所有全局参数及注释,下面简单说一下个别参数的意义及用法。
–copies N
N 是一个正整数。
这个选项可以先不用关心了,因为你这辈子可能都用不到。他的作用是在生成的PDF文档中,把内容重复输出 N 份。也就是说,你将得到一个PDF文档,这个文档中的大小、内容量都将是不使用此参数时的 N 倍。然而重复的内容对你来说并没有什么卵用。
如果不使用 参数,那么 和 参数就不用了解了,因为他们只在 参数中的 N 大于 1 时才有意义。
-g, –grayscale
这个参数非常有用,使用这个参数可以有效压缩生成的PDF所占用的存储空间。当然这个压缩是要付出一定代价的,那就是最终生成的PDF文档将是灰度的,没有任何色彩。如果你能接受灰度PDF文档,并不影响实际使用,那就请使用这个参数吧。生成的PDF文档越大,使用此参数获得的惊喜就越大。
-l, –lowquality
这个参数与 参数有异曲同工之妙, 参数也会大大压缩PDF文档所占用的存储空间。只是它是通过降低PDF文档的质量来完成这一任务的。这个参数也值得推荐,你最好先尝试一下,看看使用此参数后生成的PDF文档与不使用此参数的区别再做决定。我可以告诉你的是,在纯文字的情况下他们的差别不大,此参数只是降低了PDF文档的质量,看上去是糙了一些,但不会影响阅读。如果你是一个追求感官享受,或是你生成的PDF文档中有大量图片,那就不要使用此参数了。
–no-pdf-compression
这个参数强烈建议不要使用,最好这辈子都不要去了解他的好,因为对于你来说肯定用不到。它的作用就是在输出PDF文档时,不使用任何的压缩。这将会导致输出的PDF文档特别的大,质量是无损的,但是对于人类来说从感观上根本察觉不到压缩前后的质量变化的。如果你的感观超乎于常人,压缩之后的体验对你来说无法接受,那我收回前面的话,你就尽情使用此参数吧。
-q, –quiet
使用这个参数后,你将得到一个干净的命令行输出,就连程序处理的进度和状态都没有。这个参数会抑制所有命令行输出,在程序的工作过程中,你看不到任何输出。建议不会使用此参数,因为程序输出一些进度和状态信息还是非常有用的。万一程序工作到某处死了呢(嘿嘿),在 模式下你是无法分辨是否程序死掉了的。
大纲参数中唯一需要特别说一下的是 ,其他参数默认就好了。
何为大纲
大纲
如上图所示,其实我更喜欢称之为目录或导航。大纲是根据你HTML中的标题(Hn标签)自动生成的。
–outline-depth
用来指定生成的大纲的深度。默认值为 4。你可以指定一个大一些的数字,以保证所有在HTML中指定的H标签都能在大纲中生成对应的项,方便阅读时快速跳转。
当指定了 参数时, 将不会输出大纲到PDF文档,所以再指定 也就没有意义了。
上面代码段中只是对所有 页面对象参数 做了个大概的说明,下面针对个别主要参数做更详细的讲解。
–allow
这个参数只在“页面对象”是一个文件时有效,在“页面对象”是一个url时此参数无效。
这个参数的作用是为HTML页面中使用相对路径引用的文件指定一个加载文件的基目录。也就是说HTML文件中所有以相对路径指定的文件都会从 参数指定的目录进行加载。其实在HTML中指定 标签可以达到同样的目的。如果两者(参数和标签)都没有指定,则使用当前处理的HTML文件所在的目录作为基目录加载当前处理的HTML中相对路径指定的文件。
–background AND –no-background
这两个参数是一对,用来指定是否在生成的PDF中应用网页的背景,默认 参数是开启的,也就是说默认生成的PDF文档中是带有HTML页面的背景图片或背景色的。如果开启 参数,则生成的PDF文档中不会有HTML页面中的背景图片和背景色。
–debug-javascript ADN –no-debug-javascript
这两个参数用来指定是否在标准输出中输出javascript的调试信息,默认 参数是开启的,也就是说默认不会输出javascript的调试信息。下图是打开 参数的演示。
–debug-javascript
–disable-external-links AND –enable-external-links
这两个参数是用来设置在页面中的外链是否以超链接的形式出现在PDF文档中。关于“外链”的定义请移架 术语定义 。默认 参数被打开,所以默认情况是页面中的外链是以超链接的形式出现的PDF文档中的,点击可以打开指定的网页。
–exclude-from-outline AND –include-in-outline
这两个参数用来设置当前页面对象是否包含到目录和大纲中。
默认情况下 参数是打开的。也就是说默认情况下生成的PDF文档目录和大纲中是包含当前页面的,如果你不想让当前页面加到目录和大纲中可以打开 参数。
–post AND –post-file
当目标页面需要接受POST表单才能正确得到响应时,可以用这两个参数。这两个参数都是可以重复使用的。
还有一个应用场景是,用于自动化的WEB应用测试中。可以得到PDF文档作为测试报告。
也可以用于自动批量上传文件的场景。
–run-sript
当需要对页面进行一定的预处理后再生成PDF文档的场景,使用该参数再合适不过了。这个参数可以重复使用指定多个需要在页面加载完成后执行的JS代码。你可以在这些JS中对页面的结构和内容进处理,JS执行完成后才会把对应的页面生成PDF文档。
–disable-internal-links AND –enable-internal-links
这两个参数是用来设置在页面中的内链是否以超链接的形式出现在PDF文档中。关于“内链”的定义请移架 术语定义 。默认 参数被打开,所以默认情况是页面中的内链是以超链接的形式出现的PDF文档中的,点击在当前PDF中跳转到指定锚点。
–enable-toc-back-links AND –disable-toc-back-links
这组参数用来设置,是否在PDF内容中的H标签处生成超链接。生成的超链接点击后会跳转到目录和大纲中该H标签对应的锚点位置。默认情况下 参数被打开,不会在PDF文档的H标签处生成超链接。
如果你需要在阅读PDF文档的内容时快速回到目录,你可以打开 参数。
–user-style-sheet
这个参数用来加载一个用户自定义的样式表,用来改变HTML页面原有的样式。需要高度自定义页面新式的同学可以尝试使用这个参数达到目的。
页眉页脚的设置比较简单,看上述代码段中的解释已经非常明了,所以不再赘述。后面还有针对页眉与页脚的其他相关介绍。
“目录对象”我们一般用不到,上述代码段中的讲解也不难懂,所以不针对每一个具体参数再做详细的讲解。
默认的页面尺寸是 A4,你可以使用 参数指定你想要的页面尺寸,如:A3,Letter 和 Legal等。想要查看本程序支持的所有页面尺寸,请访问 http://qt-project.org/doc/qt-4.8/qprinter.html#PaperSize-enum
你还可以使用 和 对页面尺寸进行更精细的控制。
如果你需要对许多页面进行批量的处理,并且感觉 wkhtmltopdf 开启比较慢,你可以尝试使用 参数。
wkhtmltopdf 命令会为 参数发送过来的每一行进行一次单独命令调用。也就是说此参数每读取一行都会执行一次 wkhtmltopdf 命令。而最终执行的命令中的参数是命令行中参数与此参数读取的标准输入流中参数的结合。
下面的代码段是一个例子:
默认情况下代理信息将读取环境变量:proxy、all_proxy 和 http_proxy,代理选项还可以通过指定 参数开启。
使用 BNF 对代理的定义如下:
如果你不熟悉 BNF 的话,下面的代码段中是三个例子:
页眉和页脚可以使用参数 和 添加到文件中。有些参数(如 )需要提供一个字符串作为参数值。你可以在 中插入下述变量,他们将会被替换成对应的值。
举一个例子来说明吧,, 会在页面的右上角生成一个类似 的字符串,其中 是当前页面的页码, 是当前文档最后一页的页码。
页眉和页脚也可以通过 HTML文档来提供。 同样举一个例子,使用命令行参数 来生成页眉,而 header.html 的内容如下:
wkhtmltopdf 可以使用 命令行参数来指定在PDF就要中输出像书本中目录一样的“大纲”,“大纲”是基本HTML文档中H标签生成的,具体的大纲的层级和尝试请移步 目录
如果HTML文档中的H标签等级比较多,就可以生成深层级树形结构的“大纲”,而生成“大纲”的真实深度是通过 参数来控制。
通过在命令行中添加 TOC对象 可以把一个目录添加到生成的PDF文档中,例如下面的代码段:
生成的目录也是基于HTML文档的H标签。过程是首先生成一个XML文档,然后使用XSLT转换为HTML。
生成的 XML 文档可以通过 参数查看。
你如果想要使用自定义的XSLT文档可以通过 参数指定
你可以使用 参数把默认的 XSLT 文档打印到标准输出,然后基于它创建你的自定义 XSLT 文档。
参数列表:
wkhtmltopdf [OPTIONS]… [More input files] <output file>
常规选项
–allow <path> 允许加载从指定的文件夹中的文件或文件(可重复)
–book* 设置一会打印一本书的时候,通常设置的选项
–collate 打印多份副本时整理
–cookie <name> <value> 设置一个额外的cookie(可重复)
–cookie-jar <path> 读取和写入的Cookie,并在提供的cookie jar文件
–copies <number> 复印打印成pdf文件数(默认为1)
–cover* <url> 使用HTML文件作为封面。它会带页眉和页脚的TOC之前插入
–custom-header <name> <value> 设置一个附加的HTTP头(可重复)
–debug-javascript 显示的javascript调试输出
–default-header* 添加一个缺省的头部,与页面的左边的名称,页面数到右边,例如: –header-left '[webpage]’ –header-right ‘[page]/[toPage]' –header-line
–disable-external-links* 禁止生成链接到远程网页
–disable-internal-links* 禁止使用本地链接
–disable-javascript 禁止让网页执行JavaScript
–disable-pdf-compression* 禁止在PDF对象使用无损压缩
–disable-smart-shrinking* 禁止使用WebKit的智能战略收缩,使像素/ DPI比没有不变
–disallow-local-file-access 禁止允许转换的本地文件读取其他本地文件,除非explecitily允许用 –allow
–dpi <dpi> 显式更改DPI(这对基于X11的系统没有任何影响)
–enable-plugins 启用已安装的插件(如Flash
–encoding <encoding> 设置默认的文字编码
–extended-help 显示更广泛的帮助,详细介绍了不常见的命令开关
–forms* 打开HTML表单字段转换为PDF表单域
–grayscale PDF格式将在灰阶产生
–help Display help
–htmldoc 输出程序HTML帮助
–ignore-load-errors 忽略claimes加载过程中已经遇到了一个错误页面
–lowquality 产生低品质的PDF/ PS。有用缩小结果文档的空间
–manpage 输出程序手册页
–margin-bottom <unitreal> 设置页面下边距 (default 10mm)
–margin-left <unitreal> 将左边页边距 (default 10mm)
–margin-right <unitreal> 设置页面右边距 (default 10mm)
–margin-top <unitreal> 设置页面上边距 (default 10mm)
–minimum-font-size <int> 最小字体大小 (default 5)
–no-background 不打印背景
–orientation <orientation> 设置方向为横向或纵向
–page-height <unitreal> 页面高度 (default unit millimeter)
–page-offset* <offset> 设置起始页码 (default 1)
–page-size <size> 设置纸张大小: A4, Letter, etc.
–page-width <unitreal> 页面宽度 (default unit millimeter)
–password <password> HTTP验证密码
–post <name> <value> Add an additional post field (repeatable)
–post-file <name> <path> Post an aditional file (repeatable)
–print-media-type* 使用的打印介质类型,而不是屏幕
–proxy <proxy> 使用代理
–quiet Be less verbose
–read-args-from-stdin 读取标准输入的命令行参数
–readme 输出程序自述
–redirect-delay <msec> 等待几毫秒为JS-重定向(default 200)
–replace* <name> <value> 替换名称,值的页眉和页脚(可重复)
–stop-slow-scripts 停止运行缓慢的JavaScripts
–title <text> 生成的PDF文件的标题(第一个文档的标题使用,如果没有指定)
–toc* 插入的内容的表中的文件的开头
–use-xserver* 使用X服务器(一些插件和其他的东西没有X11可能无法正常工作)
–user-style-sheet <url> 指定用户的样式表,加载在每一页中
–username <username> HTTP认证的用户名
–version 输出版本信息退出
–zoom <float> 使用这个缩放因子 (default 1)
页眉和页脚选项
–header-center* <text> (设置在中心位置的页眉内容)
–header-font-name* <name> (default Arial) (设置页眉的字体名称)
–header-font-size* <size> (设置页眉的字体大小)
–header-html* <url> (添加一个HTML页眉,后面是网址)
–header-left* <text> (左对齐的页眉文本)
–header-line* (显示一条线在页眉下)
–header-right* <text> (右对齐页眉文本)
–header-spacing* <real> (设置页眉和内容的距离,默认0)
–footer-center* <text> (设置在中心位置的页脚内容)
–footer-font-name* <name> (设置页脚的字体名称)
–footer-font-size* <size> (设置页脚的字体大小default 11)
–footer-html* <url> (添加一个HTML页脚,后面是网址)
–footer-left* <text> (左对齐的页脚文本)
–footer-line* 显示一条线在页脚内容上)
–footer-right* <text> (右对齐页脚文本)
–footer-spacing* <real> (设置页脚和内容的距离)
https://www.cnblogs.com/-ccj/p/wkhtmltopdf –footer-right '[page]/[topage]' http://www.baidu.com baidu.pdf
https://www.cnblogs.com/-ccj/p/wkhtmltopdf –header-center '报表' –header-line –margin-top 2cm –header-line http://192.168.212.139/oma/ oma.pdf
表内容选项中
–toc-depth* <level> Set the depth of the toc (default 3)
–toc-disable-back-links* Do not link from section header to toc
–toc-disable-links* Do not link from toc to sections
–toc-font-name* <name> Set the font used for the toc (default Arial)
–toc-header-font-name* <name> The font of the toc header (if unset use –toc-font-name)
–toc-header-font-size* <size> The font size of the toc header (default 15)
–toc-header-text* <text> The header text of the toc (default Table Of Contents)
–toc-l1-font-size* <size> Set the font size on level 1 of the toc (default 12)
–toc-l1-indentation* <num> Set indentation on level 1 of the toc (default 0)
–toc-l2-font-size* <size> Set the font size on level 2 of the toc (default 10)
–toc-l2-indentation* <num> Set indentation on level 2 of the toc (default 20)
–toc-l3-font-size* <size> Set the font size on level 3 of the toc (default 8)
–toc-l3-indentation* <num> Set indentation on level 3 of the toc (default 40)
–toc-l4-font-size* <size> Set the font size on level 4 of the toc (default 6)
–toc-l4-indentation* <num> Set indentation on level 4 of the toc (default 60)
–toc-l5-font-size* <size> Set the font size on level 5 of the toc (default 4)
–toc-l5-indentation* <num> Set indentation on level 5 of the toc (default 80)
–toc-l6-font-size* <size> Set the font size on level 6 of the toc (default 2)
–toc-l6-indentation* <num> Set indentation on level 6 of the toc (default 100)
–toc-l7-font-size* <size> Set the font size on level 7 of the toc (default 0)
–toc-l7-indentation* <num> Set indentation on level 7 of the toc (default 120)
–toc-no-dots* Do not use dots, in the toc
轮廓选项
–dump-outline <file> 转储目录到一个文件
–outline 显示目录(文章中h1,h2来定)
–outline-depth <level> 设置目录的深度(默认为4)
页脚和页眉
* [page] 由当前正在打印的页的数目代替
* [frompage] 由要打印的第一页的数量取代
* [topage] 由最后一页要打印的数量取代
* [webpage] 通过正在打印的页面的URL替换
* [section] 由当前节的名称替换
* [subsection] 由当前小节的名称替换
* [date] 由当前日期系统的本地格式取代
* [time] 由当前时间,系统的本地格式取代
https://www.cnblogs.com/-ccj/p/wkhtmltopdf –footer-right '[page]/[topage]' http://www.baidu.com baidu.pdf
https://www.cnblogs.com/-ccj/p/wkhtmltopdf –header-center '报表' –outline –header-line –margin-top 2cm –header-line http://www.hao123.com/ hao123.pdf