PHP生成PDF完美支援中文,解決TCPDF亂碼

2021-06-08 03:11:00 字數 3495 閱讀 6427

php生成pdf格式檔案以tcpdf為基礎,tcpdf是乙個用於快速生成pdf檔案的php5函式包。tcpdf基於fpdf進行擴充套件和改進。支援utf-8,unicode,html和 xhtml。在基於php開發的web應用中,使用它來輸出pdf檔案是絕佳的選擇。但畢竟這款開源軟體是外國人開發的,對中文的支援也不是那麼盡如人 意,因此我們需要對它作進一步的強化。

將此目錄移動到web**的根目錄下(假設您使用的是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->write(0,』敏捷的棕毛狐狸躍過那只懶狗『, 」, 0, 』l', true, 0, false, false, 0);

$pdf->write(0,』the quick brown fox jumps over the lazy dog.』, 」, 0, 』l', true, 0, false, false, 0);

$pdf->write(0,』1234567890′, 」, 0, 』l', true, 0, false, false, 0);

儲存,然後訪問 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。下面是轉換的步驟:

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文件

附註:setheaderdata裡中文的解決方法為:tcpdf\config\tcpdf_config.php

define (『pdf_font_name_main』, 』helvetica』);

改為: define (『pdf_font_name_main』, 』stsongstdlight』);

define (『pdf_font_name_data』, 』helvetica』);

改為: define (『pdf_font_name_data』, 』stsongstdlight』);

就可以把example_038.php檔案中的

$pdf->setheaderdata(pdf_header_logo, pdf_header_logo_width, pdf_header_title.』 038′, pdf_header_string);

改為:

$pdf->setheaderdata(pdf_header_logo,pdf_header_logo_width,』中文頭部』, 』作者和版權』);

假如你的**原始碼為gbk格式 輸出的pdf內容為亂碼的話 就需要做個簡單的轉換了,把需要打出的中文文字做

iconv(「gb2312//translit」,』utf-8′,$str);

$pdf->write(0,iconv(「gb2312//translit」,』utf-8′,』解決gbk**輸出中文亂碼問題『), 」, 0, 』l', true, 0, false, false, 0);

生成支援中文的的pdf

color olive 生成 支援 中文的的 pdf size large 最近有家 家具公司 叫我開發乙個 b s模式的管理軟體,我使用的 ruby on rails 大家都知道 管理軟體 使用頻率最大 的 是 報表的列印 生成 excel表等操作,我對於delphi比較精通,delphi做起這些...

php生成pdf生成

fpdf是乙個純粹的通過php類來生成pdf文件的方法,需要生成的內容直接在php 中來指定,生成文字,線條等等,都有自己的方法。下面介 紹乙個用fpdf來生成 hello world 的pdf文件 php require fpdf.php pdf new fpdf pdf addpage pdf ...

php生成pdf文件

實際工作中,我們要使用php動態的建立pdf文件,目前有許多開源的php建立pdf的類庫,今天我給大家來介紹一款優秀的pdf庫,它就是tcpdf,tcpdf是乙個用於快速生成pdf檔案的php5函式包。tcpdf基於fpdf進行擴充套件和改進,增強了實用功能。特性 tcpdf具有以下特性 1 支援頁...