tcpdf 顯示漢字

最近在做將網頁內容輸出成pdf文檔方面的一個項目,找了好多類,php_pdflib,fpdf,HTML_topdf等等,不過最終還是發現這個好用,究其漢字處理方面發現了寫一篇文章,就抄過來了,以供大家參考。

 

TCPDF 是一個用於快速生成PDF文件的PHP5函數包。TCPDF基於FPDF進行擴展和改進。支持UTF-8,Unicode,HTML和XHTML。在基於 PHP開發的Web應用中,使用它來輸出PDF文件是絕佳的選擇。但畢竟這款開源軟件是外國人開發的,對中文的支持總不是那麼盡如人意,因此我們需要對它 作進一步的增強。
首先要下載TCPDF。訪問http://www.tcpdf.org ,單擊導航條上的”Download”鏈接,即可下載到最新版本的TCPDF壓縮包。因爲裏面包含了範例和字體,因此文件大概有10M左右。下載完後解壓 它,會得到一個名爲tcpdf的目錄,此目錄的結構大概是這樣的:

 
TCPDF目錄結構圖  

將此目錄移動到Apache的網頁根目錄下(假設您使用的是 Apache,並且使用80端口,如有不同請根據實際情況修改),打開瀏覽器,訪問 http://localhost/tcpdf/ 應該就可以看到此目錄下的文件和文件夾列表。由於TCPDF已經自帶了一些範例,因此爲了節省時間,我們可以直接對範例進行修改再使用。打開tcpdf目 錄下的examples目錄,下面有50多個範例文件,其中example_038.php就是用來測試東亞字體的(比如簡體/繁體中文、日文等等),打 開此文件,找到$pdf->SetFont 這一行,修改爲:

$pdf->SetFont('stsongstdlight', '', 20);  

這一行代碼的作用是設置PDF正文所用的字體及字號。其 中”stsongstdlight”表示”STSongStdLight”字體,這是Adobe Reader的默認簡體中文字體,TCPDF中已經內置這個字體的配置文件,我們只需直接調用即可。接下來,將$pdf->Cell那一段修改爲:

$pdf->Cell(0, 10, '敏捷的棕毛狐狸躍過那隻懶狗。', '',1, 1, 'C');
$pdf->Cell(0, 10, 'The quick brown fox jumps over the lazy dog.', '',1, 1, 'C');
$pdf->Cell(0, 10, '1234567890', '',1, 1, 'C');  

保存,然後訪問 http://localhost/tcpdf/examples/example_038.php 就可以生成一份PDF文檔了:  

 
使用默認中文字體生成的PDF文件  

這種方式生成的PDF文件的優點 是:文件體積小,生成快速。但也有缺點是,沒有嵌入中文字體,只限於安裝了Adobe Reader之後才能正常顯示。那萬一用戶使用的是FoxIt Reader或者是Linux操作系統呢?顯示效果就不一樣了。因此,爲了保證生成的PDF文件在任何環境下都有同樣的顯示效果,嵌入字體是必需的。
Windows下有很多中文字體,但是我們要用在TCPDF中的中文字體有下面幾個要求: 

  • 支持Unicode,因爲TCPDF支持的是Unicode;
  • 體積越小越好;
  • 最好是也支持繁體中文;

這樣看來,微軟雅黑以及方正的一些字體都符合要求。但是他們都是商業字體,而且個頭都不小,以微軟雅黑爲例,msyh.ttf 文件就超過10M,如果使用它,生成的PDF文件體積也會很大。
綜合考慮,我覺得”Droid Sans Fallback”字體符合要求:

  • 首先它是免費字體;
  • 其次它也是Unicode編碼,支持簡體繁體中文以及日文韓文等等;
  • 然後它的體積很小,不超過5M。

然而TCPDF不支持TTF字體文件,因此我們先將它轉換成TCPDF支持的格式,然後再使用。在TCPDF目錄下有個fonts子目錄,這個子目錄下又有個utils,這裏面帶有一個字體轉換工具ttf2ufm.exe。下面是轉換的步驟:
在 網上很容易找到Droid Sans Fallback字體的下載鏈接,因此在這裏就沒有必要多做描述了。我們把下載到的 DroidSansFallback.ttf 複製到 TCPDF\fonts\utils 下面,然後打開Windows的命令行,切換到此路徑下,輸入如下命令: 

D:\www\tcpdf\fonts\utils>ttf2ufm -a -F DroidSansFallback.ttf 

等待一段時間,等到命令行窗口顯示

"Finished - font files created" 

之後,可以發現此目錄下生成了DroidSansFallback.afm,DroidSansFallback.t1a 和 DroidSansFallback.ufm 這三個文件。
在命令行中輸入

"C:\Program Files\WAMP\PHP5\php.exe" -q makefont.php DroidSansFallback.ttf DroidSansFallback.ufm 

說明:這裏的”C:\Program Files\WAMP\PHP5\php.exe”爲php.exe文件所在的路徑,請根據實際情況輸入。回車運行之後,稍等片刻,命令行窗口中會提示 

Font definition file generated  

至此大功告成。將生成的droidsansfallback.php、droidsansfallback.z以及droidsansfallback.ctg.z這三個文件複製到 TCPDF\fonts 下面即可。
打開example_038.php文件,將
$pdf->SetFont('stsongstdlight', '', 20);
修改爲
$pdf->SetFont('droidsansfallback', '', 20);  

這樣就能夠調用我們剛纔生成的字體,再訪問 http://localhost/tcpdf/examples/example_038.php 就可以看到重新生成的PDF文檔。

 
嵌入DroidSansFallback字體後的PDF文檔 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章