每一個可以努力的日子,都是一份厚禮。
轉換 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這個的效果真讓人震撼。