美文网首页文修书院工具癖巨人的工具
HTML 转 PDF 之 wkhtmltopdf 工具简介

HTML 转 PDF 之 wkhtmltopdf 工具简介

作者: JSON_NULL | 来源:发表于2016-09-27 17:12 被阅读6343次

    相关文章

    HTML 转 PDF 之 wkhtmltopdf 工具精讲

    为什么要写

    其实不太会写,我讲解的东西,能听懂的人大都是理解能力非常强的。所以我的语言表达能力不是一般的差,而写作能力还不如语言表达。之所以要写此篇,………………就是为了告诉你们,我的写作水平到底有多烂。(狂笑……)

    开个玩笑。(严肃)其实这应该是我第一次正式写作,原因有两点;
    首先是实际需要,我需要把我的知识体系记录下来,所以今后会有大量作品……出……现?(心虚)
    其次是我已经在《五壶上酱》群里放出话了,本来是在昨天就需要完成此篇的,但迟到总比缺席强吧(此刻的心态)。

    要写什么

    前面废话有点多,可能有人已经看不下去了,那下面就言归正传。先说一下此篇主要写点什么吧,标题中写的虽然明确,但信息量太少了。

    此篇主要是为了简单介绍一个工具,名为“wkhtmltopdf",是一个能够把网页文件转换成PDF的工具。(情不自禁)不得不说这个工具简直是太好用了。

    工具 "wkhtmltopdf" 简介

    【官网】:【http://wkhtmltopdf.org/】

    【下载请点击这里】 【http://wkhtmltopdf.org/downloads.html】

    工具全名叫 "wkhtmltopdf" ; 是一个使用 Qt WebKit 引擎做渲染的,能够把html 文档转换成 pdf 文档 或 图片(image) 的命令行工具。(强调一下:是 “命令行工具”

    支持多个平台,可在win,linux,os x 等系统下运行。

    优点

    1. 生成PDF时会自动根据你在HTML页面中H标签生成树形目录结构。
    2. 小巧方便,转换速度快。
    3. 夸平台,在Liunx下用,在win下也可以用(我也只在这两个平台下用过)。

    缺点

    还没发现(狂笑……)

    使用方式

    使用前的准备

    使用前一定要记得先下载安装才行,对于不同的操作系统可能会有需要设置环境变量的情况。如果你安装后在命令行执行 wkhtmltopdf -V 提示以下信息:

    C:\Users\hehe>wkhtmltopdf -V    
    'wkhtmltopdf' 不是内部或外部命令,也不是可运行的程序    或批处理文件。    
    

    这就说明你需要配置系统的环境变量了,根据情况把你安装wkhtmltopdf目录下的bin子目录加到 PATH 环境变量下。

    我用的是win系统,我的安装到了D盘wkhtmltopdf目录下,所以我需要把 D:\wkhtmltopdf\bin 目录加入到环境变量 PATH

    正确安装后是执行 wkhtmltopdf -V 会得到如下提示:

    C:\Users\wfso>wkhtmltopdf -V
    wkhtmltopdf 0.12.3.2 (with patched qt)
    

    看上面的信息可知,写此篇时我系统里装的 wkhtmltopdf 的版本是 0.12.3.2

    开始使用

    命令格式:wkhtmltopdf [GLOBAL OPTION]... [OBJECT]... <output file>

    命令行工具自然是没有图形界面的。

    光看上面的命令格式好像不太简单理解应该怎么用啊,别急,下面会有详细介绍的,不过为了满足部分急性子,我先给几个例子在下面。伸手堂可以直接拿去用,不愿意深入了解的同学就不必再浪费时间了。

    把一个html文件转换成PDF

    命令格式 :wkhtmltopdf xxx.html xxx.pdf

    D:\MyWorkSpace\markdown>wkhtmltopdf 1.html 1.pdf
    Loading pages (1/6)
    Counting pages (2/6)
    Resolving links (4/6)
    Loading headers and footers (5/6)
    Printing pages (6/6)
    Done
    

    当你看到类似上面的内容时,说转换已经完成了,去打开转换好的pdf文档慢慢研究吧。

    把一个 url 指向的网页转换成PDF

    命令格式 : wkhtmltopdf url xxx.pdf

    D:\MyWorkSpace\markdown>wkhtmltopdf www.yioks.com yioks.pdf
    Loading pages (1/6)
    QFont::setPixelSize: Pixel size <= 0 (0)                     ] 55%
    Counting pages (2/6)
    QFont::setPixelSize: Pixel size <= 0 (0)=====================] Object 1 of 1
    Resolving links (4/6)
    Loading headers and footers (5/6)
    Printing pages (6/6)
    Done
    

    当你看到如上信息时代表转换成功,是不是很酷。

    把html文件 和 url指向的网页 转换成图片

    命令格式 :

    wkhtmltoimage xxx.html xxx.jpg
    wkhtmltoimage url xxx.jpg    
    

    其实和转pdf时的参数是一样的,只是命令和输出文件的扩展名变了。上的命令格式中,我是把图片保存成了 jpg 格式,当然,如果你愿意也可以保存成其他图片格式(如:png),但文件可能会变大很多倍。在我的测试中,jpg格式文件是最小的。

    应用场景

    你能拿他来干什么我不知道,下面我说一下我用这个工具都做了什么。

    场景一

    首先,多年前在浏览器的收藏夹里收藏的好文章,我都一一转成了PDF,不要问我为什么,我就是这么做了。并且做的过程中我发现,我所收藏的链接已经有部分无法访问了。

    场景二

    网上各种工具的 单面文档(如:spring等),每次查看都要访问网络,如果没网了……,或者我想在手机上看……。所以果断转换成pdf存一份。

    场景三

    我开发的WEB应用程序中,需要用到下载PDF功能时,都是用这个工具把程序生成的动态网页HTML存储到服务器并转换成PDF后提供给用户下载的。

    场景四

    编不下去了,其实没有场景三,哈哈哈哈…… (狂笑),等我想到了再补充吧。如果你有属于自己应用场景一定要分享给我啊。

    wkhtmltopdf 工具详解

    本来下面就是针对 wkhtmltopdf 工具的详细介绍了,详细到这个命令的每一个参数都会单独做讲解。

    但是……好吧,我有点累了。

    关于 wkhtmltopdf 工具详解的文章已经完成,请移驾:
    HTML 转 PDF 之 wkhtmltopdf 工具精讲

    相关文章

      网友评论

      • Struggle_08cd:你好 如果html中有按钮,按钮在打印后可以隐藏么
        JSON_NULL:@Struggle_08cd 可以,设置css
      • 80f86ae8829d:现在遇到的问题是如果页面过大,会导致转换失败,测试40K左右可以转换为PDF,100k就转换不了,或者设置转换的时间限制后转化之后的pdf打不开
        JSON_NULL:@逸之 可以的啊,spring的单页文档我就转换成pdf过。
        逸之:@80f86ae8829d 那我100M的HTML岂不是无望……
      • bcffa7daec39:如何在页眉左边添加一张图片呢?在线等。。。
        JSON_NULL:@不经沧桑怎成男人_f723 最直接的方式是你在html中做个页眉。
        如果你想用这个工具解决这个问题,推荐你去看看《HTML 转 PDF 之 wkhtmltopdf工具精讲》
      • PM架构师之路:在转化index.html为png图片时,目前遇到的问题是,html文件依赖的css样式,加载失败;请问这个该怎么解决?
      • b38f4bc6a744:请问 https://wenku.baidu.com/view/0cc91791ee06eff9aef807b0.html 最后转换失败,有什么好的解决方案吗?
        JSON_NULL: @starryfunj 这种里面有大量js和插件的很难转换成功
      • Naruto_b002:您好,这个是开源的嘛?我可以在VC中引入头文件,进行自己的开发吗
      • 67897ee2b8ff:请问如果我要添加多个参数怎么添加呢,我老是执行错误,比如--title和--footer-right及--footer-font-size,等等 可以发一个demo给我吗
      • 630e2453bf8c:我现在下载PDF遇到个问题,我们网页稍微有点复杂,用到<canvas>标签,这种情况下载下载的PDF里这块内容就空白了,有解吗
        JSON_NULL:@东雄 canvas里面的东西全都是js代码执行后绘制的。出现你这种情况应该是没有执行js就生成pdf了。你可以去读一下《精讲》里面有关于如何执行js的说明。如果中间遇到问题请给我留言,看到后会给你回复的。
      • 135b3e2044a5:您好,我用这个遇到一个问题。页面有table的时候;table内容较多(第一页显示不完;第二页能完整显示的时候)table会直接出现再第二页。这个要怎么解决呢?
        JSON_NULL: @135b3e2044a5 我记得默认是A4吧,我暂时没有去掉纸张格式的方法。
        135b3e2044a5:@JSON_NULL :再问您一个问题呢~这个插件转化一定会有纸张格式么?可以去掉这个么。就是从头到尾就一个长的PDF
        JSON_NULL: @135b3e2044a5 一般情况下table是会跨页显示的,如果整个显示到第二页了,说明你的table有关于换页的配置,把那个换页的配置去掉就行了
      • eady施:需要登录的系统如何处理
      • eady施:单页面应用好像也不行,引起url不变的
        JSON_NULL: @eady施 具体方案请参见http://www.jianshu.com/p/4d65857ffe5e
        JSON_NULL: @eady施 单页面应用中有大量js,如果这些js没有运行当然就生成不了你在浏览器中看到的页面了。但你可以在生成pdf前让其先运行js啊
      • eady施:我开发的WEB应用程序中,需要用到下载PDF功能时,都是用这个工具把程序生成的动态网页HTML存储到服务器并转换成PDF后提供给用户下载的。 怎么弄得
        eady施:这个工具可以对流进行导出pdf吗
        eady施:@JSON_NULL 动态的呢
        JSON_NULL: @eady施 就是把一个静态的html文件转成pdf啊
      • eady施:如果是需要登录的系统,就不能使用这个了,这个只能是生成好的静态页面。
        eady施:@JSON_NULL 求指导啊 大神
        JSON_NULL: @eady施 需要登录也能用,但并非绝对,方法稍后单独写一篇吧
      • 嘉慕:请问这个效率怎么样呢?
        JSON_NULL: @嘉慕 你有大量文档需要转换吗?我没测过效率,因为我还没遇到过需要关心其效率的应用场景。

      本文标题:HTML 转 PDF 之 wkhtmltopdf 工具简介

      本文链接:https://www.haomeiwen.com/subject/sjacyttx.html