views: 4857 times


這個東西是基於 fpdf, tcpdf 這兩個類所 hack 來的。原本 fpdf 就已經有提供繁體中文、簡體中文的 patch 可以使用,後來也有 unicode 的出現。至於 tcpdf 則是本身基於 fpdf 而且多了 html to pdf 的功能,當然,強度不及 html2ps/pdf 這一套要來得強大,但是 tcpdf 支援 UTF-8。
問題來了,第一,fpdf 要加入 chinese, unicode 才可正確支援 utf-8 編碼的中文,第二,tcpdf〝完全不支援〞中文(繁體簡體都一樣),第三,tcpdf 需要將字庫檔案內嵌到 pdf 檔案中(utf-8 support),所以檔案會異常的增肥。
所以我,動了點手腳。
至於這個 Class 要怎麼使用,就請各位參考官方文件了。
http://www.fpdf.org/
http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf
檔案在此,解壓縮到主機,直接查看 test-unicode.php 這支檔案即可。
附上產生的畫面(檔案下載回去可能會沒有圖片,要修改 test-unicode.php 裡面的路徑才行喔)

問題來了,第一,fpdf 要加入 chinese, unicode 才可正確支援 utf-8 編碼的中文,第二,tcpdf〝完全不支援〞中文(繁體簡體都一樣),第三,tcpdf 需要將字庫檔案內嵌到 pdf 檔案中(utf-8 support),所以檔案會異常的增肥。
所以我,動了點手腳。
- 將 fpdf 加入 unicode 中文支援(繁體/簡體)。
- 將 tcpdf 的 writeHTML hack 加入 fpdf 原有的類當中。
至於這個 Class 要怎麼使用,就請各位參考官方文件了。
http://www.fpdf.org/
http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf
檔案在此,解壓縮到主機,直接查看 test-unicode.php 這支檔案即可。
附上產生的畫面(檔案下載回去可能會沒有圖片,要修改 test-unicode.php 裡面的路徑才行喔)

hack_tcpdf_to_fpdf_unicode_chinese.zip




Leave your greetings.
Warning: cannot yet handle MBCS in html_entity_decode()! in c:\appserv\www\proof\fpdf\fpdf.php on line 2319
2008/02/13 11:18 [ Permalink : Modify/Delete : Reply ]我try了一遍
艾,殘念!
我沒有在 Windows 上試過,但是 *NIX 系統上可以使用。
2008/02/13 13:37 [ Permalink : Modify/Delete ]唉
2008/02/13 12:02 [ Permalink : Modify/Delete : Reply ]我又Try了好幾遍
妳欺騙我啦
我在 Windows 上測試得到錯誤訊息:
2008/02/13 13:38 [ Permalink : Modify/Delete ]FPDF error: Some data has already been output, can't send PDF file
so... 你看看要不要弄到 *NIX 上面測試吧,我不知道這是甚麼問題說(懶得=debug了啦,反正在 *NIX 上可以用就好了咩 XD)
在Fedora的環境下測試,一樣出現
2008/05/28 13:45 [ Permalink : Modify/Delete : Reply ]FPDF error: Some data has already been output, can't send PDF file
於是把那行錯誤訊息槓掉,就可以正常輸出PDF
用搜尋Some data has already been output
會出現四個地方,槓掉第一個就正常了
另外,以上的Hack用簡體字時會漏字(「腦」就會不見)
把$pdf->AddUniCNShwFont
改$pdf->AddUniGBShwFont
比較不會掉字,繁體也還蠻正常的
感謝你!
2008/05/28 14:33 [ Permalink : Modify/Delete ]我太久沒用這個東西了(目前公司還沒有需要)
只是自己先弄出來當作是個小工具以備不時之需而已 :P
當然我會希望他可以好好被利用啦 :P
如果你有更好的方式也歡迎自行修改喔!
掉字問題我沒有仔細研究,拍寫啦 :P
Some characters do not display:
2008/08/05 17:03 [ Permalink : Modify/Delete : Reply ]Example:
只能选择一个成本对象
Will display
只能 一个成本 象
漏字的問題老實說我沒有特別注意 @_@
2008/08/05 17:10 [ Permalink : Modify/Delete ]但是不知道 Star 說的方式是否能改善...
基本上這個 Hack 真的只是一時興起研究的
還有很多不足的地方,大家都可以自己去研究囉 ^^...
TCPDF部分抄寫的只有
2008/08/23 18:02 [ Permalink : Modify/Delete : Reply ]/*******************************************************************************
*
* Creak From TCPDF
*
*******************************************************************************/
底下的部分嗎?
老實說,我忘了...
2008/08/24 16:02 [ Permalink : Modify/Delete ]最近在寫專題,對於輸出PDF檔需要套用到載入PDF檔的樣版當底,所以用了FPDI但發現中文UNI相容問題
2008/08/31 23:14 [ Permalink : Modify/Delete : Reply ]FPDF或TCPDF有辨法載入PDF當樣版嗎!!??因為中文的問題無法解決
PS: FPDF是FREE 那TCPDF呢?
載入 PDF 檔案歐,應該不行喔。
2008/09/03 10:39 [ Permalink : Modify/Delete ]至於 TCPDF 他是 open source 的軟體,所以除了商業用途外,應該都可以使用。
唉呦~感謝啦~找到方法了~FPDF+FPDI+chinese-unicode.php
2008/09/03 22:48 [ Permalink : Modify/Delete : Reply ]這樣就可以套表格~而不用FPDF語法慢慢畫了
I cannot display the total page number ({nb}), my php script was working in the original fpdf package, but seems broken under this new package, any idea?
2008/09/27 11:03 [ Permalink : Modify/Delete : Reply ]inside chinese-unicode.php script, I have:
//Page footer
function Footer()
{
//Position at 1.5 cm from bottom
$this->SetY(-15);
//Arial italic 8
$this->SetFont('Uni','I',8);
//Page number
$this->Cell(0,10,'頁 '.$this->PageNo().'/{nb}',0,0,'C');
}
and in my page generation code:
// now create the final pdf
$pdf=new PDF_Unicode();
$pdf->AddUniCNShwFont('Uni');
$pdf->AliasNbPages();