计算机@linux_python_R 技术帖

Windows必用软件|教你如何将HTML转换成PDF

2019-01-09  本文已影响121人  Ricsy


安装wkhtmltopdf


wkhtmltopdf两工具

提示:

wkhtmltopdf 包含两个工具:wkhtmltopdf 和 wkhtmltoimage


作用:
输入一个 URL 地址,自动将网页保存成一个 PDF 文档或者是一个图片

wkhtmltopdf命令介绍

命令格式:wkhtmltopdf [GLOBAL OPTION]... [OBJECT]... <output file>
转换成(列出发) PDF文件 图片
HTML文件 wkhtmltopdf <.html> <.pdf> wkhtmltopdf <.html> <.jpg>
URL指向的网页 wkhtmltopdf <URL> <.pdf> wkhtmltopdf <URL> <.jpg>

wkhtmltopdf术语

文档对象

文档对象 指PDF文档中的文档对象 角色
封面对象 以封面的形式在PDF文档中呈现的对象 封面
目录对象 以目录的形式在PDF文档中呈现的对象(又称TOC对象) 目录
页面对象 以页面的形式在PDF文档中呈现的对象 内容

说明:

  1. 文档对象分为封面、目录和页面三种类型对象
  2. 角色是指在PDF文档中充当的角色
1. 文档对象
2. 封面对象
3. 目录对象
4. 页面对象

其他术语

其他 定义
大纲 指阅读PDF文档时的书签导航
外链 指所有在这个页面中且不指向它自身页面中锚点的超链接
内链 指在这个页面中且指向的目标页面是这个页面本身中的一个锚点的超链接

命令行参数

命令参数
全局参数 大纲参数选项 页面对象参数 页眉和页脚参数 目录对象参数

提示:命令参数分为以上五个部分

1. 全局参数

    --collate             当输出多个副本时进行校验(这是默认设置)
    --no-collate          当输出多个副本时不进行校验
    --cookie-jar <path>   从提供的JAR文件中读写cookie数据
    --copies <number>     设置输出副本的数量(默认主1),其实为1就够了
-d, --dpi <dpi>           指定一个要分辨率(这在 X11 系统中并没有什么卵用)
-H, --extended-help       相对 -h 参数,显示更详细的说明文档
-g, --grayscale           指定以灰度图生成PDF文档。占用的空间更小
-h, --help                显示帮助信息  
    --htmldoc             输出程序的html帮助文档
    --image-dpi <integer> 当页面中有内嵌的图片时,
                          会下载此命令行参数指定尺寸的图片(默认值是 600)
    --image-quality <interger> 当使用 jpeg 算法压缩图片时使用这个参数指定的质量(默认为 94)
    --license             输出授权信息并退出
-l, --lowquality          生成低质量的 PDF/PS ,能够很好的节约最终生成文档所占存储空间
    --manpage             输出程序的手册页
-B, --margin-bottom <unitreal> 设置页面的 底边距
-L, --margin-left <unitreal>   设置页面的 左边距 (默认是 10mm)
-R, --margin-right <unitreal>  设置页面的 右边距 (默认是 10mm)
-T, --margin-top <unitreal>    设置页面的 上边距
-O, --orientation <orientation> 设置为“风景(Landscape)”或“肖像(Portrait)”模式,
                                默认是肖像模块(Portrait)
    --page-height <unitreal>   页面高度
-s, --page-size <Size>         设置页面的尺寸,如:A4,Letter等,默认是:A4
    --page-width <unitreal>    页面宽度
    --no-pdf-compression       不对PDF对象使用丢失少量信息的压缩算法,不建议使用些参数,
                               因为生成的PDF文件会非常大。
-q, --quiet                    静态模式,不在标准输出中打印任何信息
    --read-args-from-stdin     从标准输入中读取命令行参数,后续会有针对此指令的详细介绍,
                               请参见 **从标准输入获取参数**
    --readme                   输出程序的 readme 文档
    --title <text>             生成的PDF文档的标题,如果不指定则使用第一个文档的标题
-V, --version                  输出版本信息后退出

1. --copies <number>建议不使用
2. -g, --grayscale推荐使用
3. -l, --lowquality推荐使用
4. --no-pdf-compression建议不使用
5. -q, --quiet建议不使用
2. 大纲参数

--dump-default-toc-xsl     输出默认的 TOC xsl 样式表到标准输出
--dump-outline <file>      输出“大纲”到指定的文件(文件内容为xml)
--outline                  在生成的PDF文档中输出“大纲”(这是默认设置)
--no-outline               不在pdf文档中输出大纲
--outline-depth <level>    设置生成大纲的深度(默认为 4)

提醒:唯一需要特别说一下的是 --outline-depth ,其他参数默认就好了

--outline-depth
3. 页面对象参数

    --allow <path>                指定加载HTML中相对路径文件的目录(可重复使用此参数指定多个
                                  目录),这个参数会在后面进行更详细的讲解
    --background                  输出页面背景到PDF文档(这是默认设置)
    --no-background               不输出页面背景到PDF文档
    --cache-dir <path>            网页的缓存目录
    --checkbox-checked-svg <path> 使用指定的SVG文件渲染选中的复选框
    --checkbox-svg <path>         使用指定的SVG文件渲染未选中的筛选框
    --cookie <name> <value>       设置访问网页时的cookie,value 需要进行url编码
                                  (可重复使用此参数指定多个cookie)
    --custom-header <name> <value> 设置访问网页时的HTTP头(可重复使用此参数指定多个HTTP头)
    --custom-header-propagation   为每个要加载的资源添加由 --custom-header 指定的HTTP头
    --no-custom-header-propagation 不为每个要加载的资源添加由 --custom-header 指定的HTTP头
    --debug-javascript            显示javascript调试输出的信息
    --no-debug-javascript         不显示javascript调试输出的信息(这是默认设置)
    --default-header              添加一个默认的“头”,在页面的左头显示页面的名字,
                                  在页面的右头显示页码,这相对于进行了如下设置:
                                  --header-left='[webpage]'
                                  --header-right='[page]/[toPage]'
                                  --top 2cm
                                  --header-line
    --encoding <encoding>         为输入的文本设置默认的编码方式
    --disable-external-links      禁止页面中的外链生成超链接
    --enable-external-links       允许页面中的外链生成超链接(这是默认设置)
    --disable-forms               不转换HTML表单为PDF表单(这是默认设置)
    --enable-forms                转换HTML表单为PDF表单
    --images                      加载图片并输出到PDF文档(这是默认设置)
    --no-images                   在生成的PDF文档中过滤掉图片
    --disable-internal-links      禁止页面中的内链生成超链接
    --enable-internal-links       允许页面中的内链生成超连接(这是默认设置)
-n, --disable-javascript          禁止WEB页面执行 javascript
    --enable-javascript           允许WEB页面执行 javascript(这是默认设置)
    --javascript-delay <msec>     延迟一定的毫秒等待javascript 执行完成(默认值是200)
    --load-error-handling <handler> 指定当页面加载失败后的动作,可以指定为:abort(中止)、
                                    ignore(忽略)、skip(跳过);(默认值是:abort)
    --load-media-error-handling <handler> 指定当媒体文件加载失败后的动作,可以指定为:
                                          abort(中止)、ignore(忽略)、skip(跳过);
                                          (默认值是:ignore)
    --disable-local-file-access   不允许一个本地文件加载其他的本地文件,使用命令行参数
                                   `--allow` 指定的目录除外。
    --enable-local-file-access    允许本地文件加载其他的本地文件(这是默认设置)
    --minimum-font-size <int>     设置最小的字号,除非必要不推荐使用该参数
    --exclude-from-outline        拒绝加载当前页面到PDF文档的目录和大纲中
    --include-in-outline          加载当前页面到PDF文档的目录和大纲中(这是默认设置)
    --page-offset <offset>        设置页码的起始值(默认值为0)
    --password <password>         HTTP身份认证的密码
    --disable-plugins             禁止使用插件(这是默认设置)
    --enable-plugins              允许使用插件,但插件可能并不工作
    --post <name> <value>         添加一个POST字段,可以重复使用该参数添加多个POST字段。
    --post-file <name> <value>    添加一个POST文件,可以重复使用该参数添加多个文件。
    --print-media-type            用显示媒体类型代替屏幕
    --no-print-media-type         不用显示媒体类型代替屏幕
-p, --proxy <proxy>               使用代理
--radiobutton-checked-svg <path>  使用指定的SVG文件渲染选中的单选框
--radiobutton-svg <path>          使用指定的SVG文件渲染未选中的单选框
--run-sript <js>                  页面加载完成后执行一个附加的JS文件,可以重复使用此参数指定
                                  多个要在页面加载完成后要执行的JS文件。
--disable-smart-shrinking         不使用智能收缩策略
--enable-smart-shrinking          使用智能收缩策略(这是默认设置)
--stop-slow-scripts               停止运行缓慢的javascript代码(这是默认设置)
--no-stop-slow-scripts            不停止运行缓慢的javascript代码
--disable-toc-back-links          禁止从标题链接到目录(这是默认设置)
--enable-toc-back-links           允许从标题链接到目录
--user-style-sheet <url>          设置一个在每个页面都加载的用户自定义样式表
--username <username>             HTTP身谁的用户名
--viewport-size <>                设置窗口大小,需要你自定义滚动条或css属性来自适应窗口大小。
--window-status <windowStatus>    Wait until window.status is equal to
                                  this string before rendering page
--zoom <float>                    设置转换成PDF时页面的缩放比例(默认为1)

1. --allow
2. --background &&--no-background
3. --debug-javascript && --no-debug-javascript
image
4. --disable-external-links && --enable-external-links
5. --exclude-from-outline && --include-in-outline
6. --post && --post-file
7. --run-sript
8. --disable-internal-links && --enable-internal-links
9. --enable-toc-back-links &&--disable-toc-back-links
10. --user-style-sheet
4. 页眉和页脚参数选项

    --footer-center <text>        在页脚的居中部分显示页脚文本 <text>
    --footer-font-name <name>     设置页脚的字体 (默认为 Arial)
    --footer-font-size <size>     设置页脚的字体大小 (默认为 12)
    --footer-html <url>           添加一个html作为页脚
    --footer-left <text>          在页脚的居左部分显示页脚文本 <text>
    --footer-line                 在页脚上方显示一条直线分隔正文
    --no-footer-line              不使用直线分隔页脚与正文(这是默认设置)
    --footer-right <text>         在页脚的居右部分显示页脚文本 <text>
    --footer-spacing <real>       页脚与正文之间的距离(默认为零)
    
    
    --header-center <text>        在页眉的居中部分显示页眉文本 <text>
    --header-font-name <name>     设置页眉的字体 (默认为 Arial)
    --header-font-size <size>     设置页眉的字体大小 (默认为 12)
    --header-html <url>           添加一个html作为页眉
    --header-left <text>          在页眉的居左部分显示页眉文本 <text>
    --header-line                 在页眉下方显示一条直线分隔正文
    --no-header-line              不使用直线分隔页眉与正文(这是默认设置)
    --header-right <text>         在页眉的居右部分显示页眉文本 <text>
    --header-spacing <real>       页眉与正文之间的距离(默认为零)

5. 目录对象参数

    --disable-dotted-lines        在目录中不使用虚线
    --toc-header-text <text>      设置目录的页眉文本
    --toc-level-indentation <width> 第级标题在目录中的缩进宽度(默认为1em)
    --disable-toc-links           在目录中不生成指向内容锚点的超链接
    --toc-text-size-shrink <real> 在目录中每级标题的缩放比例(默认为0.8)
    --xsl-style-sheet <file>      使用自定义的 XSL 样式表显示目录内容

提示:一般用不到

6. 页面尺寸
7. 从标准输入获取参数

echo "http://qt-project.org/doc/qt-4.8/qapplication.html qapplication.pdf" >> cmds
echo "cover google.com http://en.wikipedia.org/wiki/Qt_(software) qt.pdf" >> cmds
wkhtmltopdf --read-args-from-stdin --book < cmds

8. 指令一个代理

<type> := "http://" | "socks5://"
<serif> := <username> (":" <password>)? "@"
<proxy> := "None" | <type>? <serif>? <host> (":" <port>)?

http://user:password@myproxyserver:8080
socks5://myproxyserver
None

9. 页眉和页脚
[page]       当前正在被输出页面的页码
[frompage]   第一页在文档中的页码
[topage]     最后一面在文档中的页码
[webpage]    当前正在被输出页面的URL
[section]    当前正在被输出的章节的名字
[subsection] 当前正在被输出的小节的名字
[date]       本地系统格式的当前日期
[isodate]    ISO 8601 格式的当前日期
[time]       本地系统格式的当前时间
[title]      当前对象的标题
[doctitle]   输出文档的标题
[sitepage]   当前正在处理的对象中当前页面的页码
[sitepages]  当前正在处理的对象中的总页数

举一个例子来说明吧

  • --header-right "Page [page] of [toPage]", 会在页面的右上角生成一个类似 Page x of y 的字符串,其中 x 是当前页面的页码, y 是当前文档最后一页的页码
  • 页眉和页脚也可以通过 HTML文档来提供
    同样举一个例子
    使用命令行参数 --header-html header.html 来生成页眉,而 header.html 的内容如下:
<html><head><script>
function subst() {
  var vars={};
  var x=window.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>

10. 大纲(Outlines)
11.目录

引用声明

这篇文章大部分内容都是根据下面的原作者的内容进行整理的

作者:JSON_NULL
简书链接:HTML 转 PDF 之 wkhtmltopdf 工具精讲


上一篇 下一篇

猜你喜欢

热点阅读