2008-10-06 46 views
35

我一直在使用htmldoc,但我遇到了一些相當嚴重的限制。我需要最終解決方案在Linux機器上工作。我將從Perl應用程序調用這個庫/實用程序/應用程序,所以任何Perl接口都將是一個獎勵。如何自動執行HTML到PDF的轉換?

回答

8

PrinceXML是我見過的最好的一個(它解析常規的HTML以及XML/XHTML)。它是如何最好的? Well, it passes the acid2 test我認爲是相當不錯的令人印象深刻的

然而,相當昂貴

+2

我有這個相同的問題。我最近評估了Prince XML,可以證明它是一款非常棒的應用程序。輸出的速度和質量簡直令人難以置信。 – cletus 2009-01-13 01:41:39

+0

爲什麼還要通過Acid 2測試的免費開源軟件支付數千美元? http://weasyprint.readthedocs.io WeasyPrint強烈推薦。現象結果。 – FlorianB 2016-07-09 22:51:34

2

我不會說這是「最好」的解決方案,但它是我使用過的「一個」解決方案。

HTML輸入 - >HTML 2 PS - >PS 2 PDF - > PDF輸出

1

這將是總矯枉過正,但你可以下載和安裝mirth。它是一個消息路由引擎,但它可以將html轉換爲pdf,因此您可以將其設置爲在文件夾中選擇一個html文件,將其轉換爲pdf,然後將pdf放在相同或其他文件夾中。就像我說的那樣,矯枉過正,有點學習曲線,但它是免費的,而且如果你喜歡,你可以在linux上運行它。而你所有的perl應用程序將不得不做的是將html放到一個文件中。

7

我爲你做了一些Google搜索,並提出了兩個選擇。可能還有更多,我的谷歌策略是嘗試「webkit命令行pdf」和「gecko命令行pdf」,基本上尋找命令行程序,將兩種流行的開源渲染引擎嵌入到命令行渲染器中。這裏是我的發現:

Firefox command-line printer - 輸出爲PDF和PNG

wkpdf - 而這是Mac,它可能是相當便攜。

53

對不起發掘這個老帖子,但它在我的尋找最好的HTML/PDF轉換工具第一次出現。 在Linux wkhtmltopdf是非常好的(考慮到CSS等)和GPL。

+0

爲了支持你的觀點,1)像魅力一樣工作2)使用webkit渲染引擎和qt,這意味着它可以從更新中受益。雖然最後的RC於2011年2月發佈。 – kommradHomer 2013-04-11 13:16:52

-1

您可能想要查看Peernet的「文檔轉換服務」(位於http://www.peernet.com/conversion-software/batch-document-converter/)。這作爲Windows桌面或Windows Server計算機上的服務運行。它在Web瀏覽器中打開HTML文檔,然後通過打印驅動程序打印它們以創建PDF文檔,以便生成的PDF文檔看起來與您從瀏覽器打印HTML文檔完全一樣。

1

你應該看看http://phantomjs.org/

轉換可以通過一個小的腳本rasterize.js來完成,然後發出

phantomjs rasterize.js 'http://en.wikipedia.org/w/index.php?title=Jakarta&printable=yes' jakarta.pdf 
12

WeasyPrint產生具有可選擇的文本和超鏈接不錯的PDF文件。

weasyprint input.html output.pdf 

如果使用wkhtmltopdf代替,請嘗試以下方法:

wkhtmltopdf --margin-bottom 20mm --margin-top 20mm --minimum-font-size 16 ... 
4

有,因爲Chrome瀏覽器59.一個新的無頭模式作爲所有其他解決方案確實有新的(或不那麼新的奮鬥了)像flexbox這樣的CSS功能,這在我的情況下是唯一的解決方案來生成一個合適的PDF輸出。

要從本地html文件創建PDF,只需使用以下命令: chrome --headless --disable-gpu --print-to-pdf file:///path/to/myfile.html

對於Mac OS替代chrome/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome

我注意到的唯一缺點是(目前)你不能通過stdin傳遞html,但是創建臨時文件並不是什麼大問題。

欲瞭解更多信息,請參閱https://developers.google.com/web/updates/2017/04/headless-chrome#create_a_pdf_dom

更新:事實證明,鍍鉻的傢伙將最有可能提供某種節點模塊的完成這個任務,這將最終棄用無頭模式(https://bugs.chromium.org/p/chromium/issues/detail?id=719921)。

最好的辦法是使用基於節點的方法,使用https://developers.google.com/web/updates/2017/04/headless-chrome#node中記錄的木偶 模塊,並通過Page.printToPDF命令打印頁面,該命令還啓用了一些額外的配置。

當然,您也可以從節點(即PHP腳本)以外的任何其他環境連接到調試控制檯websocket。