轉帖|行業資訊|編輯:王香|2016-12-22 10:09:16.000|閱讀 2258 次
概述:尋找一個好的打印方法是各行各業迫切的需求,經過幾番折騰,借道輸出PDF,PHP抓取目標的HTML代碼,然后輸出到指定的解析器,再生成最終的打印格式,成為人們的終極選擇。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
ERP系統進入尾聲,各種送貨單、退貨單、合同、對賬單等等一系列的東東排著隊調打印格式。HTML5+CSS3已經這樣流行,然則眼下,基于CSS3的打印控制,居然還處于原始部落階段,Chrome、Firefox、Edge等連簡單的@page都支持得不完善。經過一番折騰,終于找到好的解決方案,即借道輸出PDF,PHP抓取目標的HTML代碼,然后輸出到指定的解析器,再生成最終的打印格式。
實際上,這個模式里:
于是打印問題迎刃而解。
本文推薦兩個可用的類庫:和。這兩位都是跨平臺系統支持,并且不需要內嵌于php,不需要有任何擔心。這兩貨都需要在官網下載安裝,如果是windows,記得安裝的時候別放在C盤,不然會無法執行。
php調用:
Prince:下載他官方的這個類庫:Prince for php。順帶說,Prince的類庫里支持.net、Java、Python、Prel等等。
Snappy:這個是國外某開發者基于wkhtmltopdf的php composer擴展,直接在你項目中執行:composer require knplabs/knp-snappy,即可。。
Prince和wkhtmltopdf,實際上就是一個html5+css3的解析器,并且是完整支持css3 @page部分的打印特性的功能。并且具備生成PDF的功能。其中Prince是收費的,但他提供免費使用License,美中不足的地方就是生成PDF預覽時,第一頁右上角會有一個P字的icon,不過在打印的時候就會消失掉。
兩者比較,Prince對中文樣式的支持更好(可能wkhtmltopdf是因為我的CSS寫法有問題,沒有針對@media print),修改中文字體,wkhtmltopdf還是會用默認的宋體輸出,而Prince則是你指定的字體。
兩者的調用代碼都很簡單。
Prince部分:
<?php require '../bootstrap.php'; $prince = new \xErp\Helper\Prince('D:\\prince\\prince-10r7-win64\\bin\\prince.exe'); header('Content-Type: application/pdf'); header('Content-Disposition: inline; filename="foo.pdf"'); $prince->convert_file_to_passthru('//www.163.com');
Snappy部分:
<?php require '../bootstrap.php'; use Knp\Snappy\Pdf; $snappy = new Pdf('D:\xampp\wkhtmltopdf\bin\\wkhtmltopdf.exe'); header('Content-Type: application/pdf'); //header('Content-Disposition: attachment; filename="file.pdf"'); print $snappy->getOutput('//www.163.com');
就是這樣酸爽,再也不用怕客戶改打印格式了,隨便改吧,親。
無圖無真相,來個截圖好了。
好像這樣的頁面,實際上是基于HTML生成的,調試只需調試HTML+CSS即可,截圖如下:
用HTML+CSS調打印,基本上一個格式,最多不超過1個小時,基本上就能調完。這樣后期,管你有多少分報表,我統一用//erp/print/報名類型/報表ID.ext的url,.html就是請求普通的html輸出,.pdf就是請求將html輸出pdf,真是要多快有多快啊!
本文轉自://www.oschina.net/
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn