每一个可以努力的日子,都是一份厚礼。
转换 HTML 与 PDF 格式文档的神器
企业 Web 项目开发中经常会有生产 PDF 格式文档的需求,例如 PDF 账单下载,月末生成各种统计报表等等。我们要帮助企业实现自动化,也就是说无需人工干预,程序能够按需从 DB 中拿数据自主生成。
项目使用 PHP 开发,于是调研了一下 PHP 的 PDF 类库,有 dompdf,TCPDF 之流,总的来说,各个项目主页上自夸的成分居多,基本思想都是类似的,即先用 HTML 写一个模板,每次往模板里填上数据,就可以转成 PDF 输出。但真正用起来就会发现各种毛病各种坑爹,部分 CSS 属性不支持啦,中文乱码啦,诸如此类。最终让我们抛弃 dompdf 的貌似是分页的一个大坑,据说一个表格 <table> 标签在跨页的情况下,dompdf 就直接崩溃了……
转换一下思路,其实我们只是要把 HTML 转成 PDF 而已,并不是必须要使用 PHP 这种低效的语言来做它并不擅长的事情。 Linux 下有没有二进制程序可以做这项工作呢?大杀气登场,撒花欢迎~
一、wkhtmltopdf:利用 webkit 内核将 HTML 转为 PDF
webkit 是一个高效、开源的浏览器内核,包括 Chrome 和 Safari 在内的(当然也包括国内那些极速啥的)浏览器都使用了这个内核。Chrome 打印当前网页的功能,其中有一个选项就是直接“保存为 PDF”。
wkhtmltopdf 就是这样一个工具,使用 webkit 内核的 PDF 渲染引擎来将 HTML 页面转换为 PDF。高保真,质量很不错,server 上安装相关中文字体即可支持中文文档。更重要的是,使用非常简单。
<?php //将网页内容转换为 PDF exec("wkhtmltopdf http://www.google.com google.pdf"); //将本地 HTML 文件转为 PDF exec("wkhtmltopdf my.html my.pdf"); ?> |
当然它本身提供了一些 PHP 集成的方法,但我还是觉得直接用 exec 调用外部程序更方便一些。
HTML 源文件和生成的 PDF 文件对比效果图——
关于中文渲染的问题,只要在服务器上安装相应字体即可。如果是 CentOS 系统,一个命令就能搞定:
$ yum install fonts-chinese.noarch |
另外注意在 HTML 文档中也要指定字符集
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> |
———- 我是猥琐的分割线,割割更健康 ———-
二、pdf2htmlEX:将 PDF 转为 HTML 网页
反过来,可否将 PDF 转化为 HTML 网页呢?(这样蛋疼的需求,我等是无法预料的……)
pdf2htmlEX 的作者是一名中国人,他实现将了 PDF 转换为 HTML,主要针对学术论文进行优化。这个工具的出现在Hacker News上引发了热烈讨论。看下 demo 你就会感叹它的效果是多么惊艳:
它的用法也非常简单,适合各路 PhD 们展示论文用。
$ pdf2htmlEX /path/to/foobar.pdf |
综上
本文介绍了 wkhtmltopdf 和 pdf2htmlEX 这两个将 HTML 和 PDF 格式文档互相转换的神器。但是其实这篇 blog 写来只是因为尘埃落定太久没更新了,写点东西更新一下而已 🙂
— EOF —
这篇文章由lovelucy于2012-10-31 15:07发表在编程。你可以订阅RSS 2.0 也可以发表评论或引用到你的网站。除特殊说明外文章均为本人原创,并遵从署名-非商业性使用-相同方式共享创作协议,转载或使用请注明作者和来源,尊重知识分享。 |
批评不自由
则赞美无意义
Google Chrome 23.0.1271.64 Windows 7 大约11年前
pdf2htmlEX这个的效果真让人震撼。