1. 程式人生 > >php 生成 pdf ,dompdf 庫使用

php 生成 pdf ,dompdf 庫使用

中文支援弄好了。但是發現了中文不自動換行的情況。

在網上找了解決辦法:

================

最近剛好需要生成PDF文件,供下載列印用……


找了不少PDF工具,發現DOMPDF是最好用的,支援HTML最好。


順便把其中遇到的問題也記錄一下:


1.HTML要用table排版
用DOMPDF生成HTML文件,首先要先解決這個問題,沒用DOMPDF生成過PDF的朋友,會在這個看似簡單的問題上吃虧。作為過來人,我可以告訴你,最好用DIV,不要用table排版。原因是如果你用table排版時,如果是多個table巢狀,DOMPDF在渲染的時候會卡死,嚴重地會拖垮伺服器的執行。用DIV就不會有這種情況發生。
另一個不能用table的原因是,下面提到的自動換行的解決方案,在table裡面是沒有作用的。


2.安裝中文字型,讓中文不會出現亂碼
2.1. 準備好字型檔案,如宋體,要準備好四個字型檔案,分別為:常規、加粗、斜體和粗斜體,檔案格式為ttf。
2.2. 進入DOMPDF字型安裝頁面,一般為http://localhost/dompdf/www/fonts.php
2.3. 定義字型名稱,字型名稱最好和css的字型名一致,如宋體為SimSun,這樣的好處是在html不用再宣告中文字型名稱。
2.4. 根據要求,上傳對應的四個字型檔案,點選安裝按鈕,等待安裝完成。
2.5. 特別提醒:如果是特別字型,或者字型名稱跟css的命名不一致,需要在html中用到該字型的地方,用css程式碼設定字型名稱,如:font-family:xxx


3.讓中文實現自動換行
預設狀態下,使用DOMPDF生成中文PDF時是不會自動換行的,需要對DOMPDF的程式碼做修改才能自動換行,具體的修改方法如下:
待修改的檔案及位置:\dompdf\include\text_frame_reflower.cls.php
找到以下程式碼塊:
// split the text into words
$words = preg_split(‘/([\s-]+)/u’, $text, -1, PREG_SPLIT_DELIM_CAPTURE);
$wc = count($words);
註釋掉這兩行程式碼,換成以下的程式碼塊:
//解決DOMPDF中文自動換行的問題;@phpdb.net
preg_match_all(‘/./u’, $text, $array);
$words = $array[0];
$wc = count($words);
儲存檔案即可。


5、讓DOMPDF也支援CSS float
如果要讓DOMPDF支援CSS 樣式的FLOAT效果,需要在配置檔案中進行設定,方法如下:
5.1. 開啟dompdf_config.inc.php
5.2. 找到DOMPDF_ENABLE_CSS_FLOAT的定義位置,值設定為true,如:
def(“DOMPDF_ENABLE_CSS_FLOAT”, true);


我剛剛測試的是使用的simsun字型,但太大了,非常不好!!等下再更換一個字型試試

=======================

要用表格,或自己PATCH程式吧。上面的內容的修改自動轉行會報錯。我沒有細看。