Technical support2008/02/04 12:02
views: 4857 times
超大字體(180%)放大字體(130%)原始字體(100%)
這個東西是基於 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),所以檔案會異常的增肥。

所以我,動了點手腳。
  • 將 fpdf 加入 unicode 中文支援(繁體/簡體)。
  • 將 tcpdf 的 writeHTML hack 加入 fpdf 原有的類當中。
這樣,我的 fpdf 就支援 html to pdf, chinese(zh-TW/zh-CN) 了。只是缺點是,他只支援中文字庫,指定其他語言字庫需要修改檔案,也許這個地方可以再去 hack tcpdf 的 CMAP 出來用,但是,我只需要中文,所以就沒差了。

至於這個 Class 要怎麼使用,就請各位參考官方文件了。
http://www.fpdf.org/
http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf

檔案在此,解壓縮到主機,直接查看 test-unicode.php 這支檔案即可。
附上產生的畫面(檔案下載回去可能會沒有圖片,要修改 test-unicode.php 裡面的路徑才行喔)


創用 CC 授權
Creative Commons License
本創作適用 姓名標示-非商業性-禁止改作 3.0 創用 CC 授權,台灣並依循所適用的授權條款。

Bookmarks  HEMiDEMi  Technorati  Del.icio.us  Digg  funP  Yahoo!  Furl
Writer profile
author image
偏執與強迫症的患者,算不上是無可救藥,只是我已經遇上我的良醫了。
Posted by hina
Tags , , , ,

Trackback URL : http://hina.ushiisland.net/blog/hinablue/trackback/472

Leave your greetings.

  1. k28

    Warning: cannot yet handle MBCS in html_entity_decode()! in c:\appserv\www\proof\fpdf\fpdf.php on line 2319

    我try了一遍
    艾,殘念!

    2008/02/13 11:18 [ Permalink : Modify/Delete : Reply ]
  2. k28


    我又Try了好幾遍
    妳欺騙我啦

    2008/02/13 12:02 [ Permalink : Modify/Delete : Reply ]
    • 我在 Windows 上測試得到錯誤訊息:
      FPDF error: Some data has already been output, can't send PDF file

      so... 你看看要不要弄到 *NIX 上面測試吧,我不知道這是甚麼問題說(懶得=debug了啦,反正在 *NIX 上可以用就好了咩 XD)

      2008/02/13 13:38 [ Permalink : Modify/Delete ]
  3. Star

    在Fedora的環境下測試,一樣出現
    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 13:45 [ Permalink : Modify/Delete : Reply ]
    • 感謝你!
      我太久沒用這個東西了(目前公司還沒有需要)
      只是自己先弄出來當作是個小工具以備不時之需而已 :P

      當然我會希望他可以好好被利用啦 :P
      如果你有更好的方式也歡迎自行修改喔!

      掉字問題我沒有仔細研究,拍寫啦 :P

      2008/05/28 14:33 [ Permalink : Modify/Delete ]
  4. Rob

    Some characters do not display:
    Example:
    只能选择一个成本对象
    Will display
    只能 一个成本 象

    2008/08/05 17:03 [ Permalink : Modify/Delete : Reply ]
    • 漏字的問題老實說我沒有特別注意 @_@
      但是不知道 Star 說的方式是否能改善...

      基本上這個 Hack 真的只是一時興起研究的
      還有很多不足的地方,大家都可以自己去研究囉 ^^...

      2008/08/05 17:10 [ Permalink : Modify/Delete ]
  5. The.R

    TCPDF部分抄寫的只有
    /*******************************************************************************
    *
    * Creak From TCPDF
    *
    *******************************************************************************/
    底下的部分嗎?

    2008/08/23 18:02 [ Permalink : Modify/Delete : Reply ]
  6. miles

    最近在寫專題,對於輸出PDF檔需要套用到載入PDF檔的樣版當底,所以用了FPDI但發現中文UNI相容問題
    FPDF或TCPDF有辨法載入PDF當樣版嗎!!??因為中文的問題無法解決
    PS: FPDF是FREE 那TCPDF呢?

    2008/08/31 23:14 [ Permalink : Modify/Delete : Reply ]
    • 載入 PDF 檔案歐,應該不行喔。
      至於 TCPDF 他是 open source 的軟體,所以除了商業用途外,應該都可以使用。

      2008/09/03 10:39 [ Permalink : Modify/Delete ]
  7. miles

    唉呦~感謝啦~找到方法了~FPDF+FPDI+chinese-unicode.php
    這樣就可以套表格~而不用FPDF語法慢慢畫了

    2008/09/03 22:48 [ Permalink : Modify/Delete : Reply ]
  8. tester

    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?

    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();

    2008/09/27 11:03 [ Permalink : Modify/Delete : Reply ]
[登入][OpenID是?]