2012-03-11

在php使用tcpdf輸出pdf檔案,並能正確顯示繁體中文內容

TCPDF的官方網站:http://www.tcpdf.org/

tcpdf(5.9.149)提供了65個範例檔案,示範如何從php建立各種不同樣式、內容風格的PDF檔案。

其中example_038.php是一個說明如何建立CJK文字內容的範例(CJK:中日韓),如果把這個範例的頁首內容更為繁體中文內容,會無法正確顯示:

// set default header data
//原作法以define的方式,定義在tcpdf_config.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, '測試繁體中文頁首標題', '測試繁體中文頁首字串內容');

將tcpdf_config.php的PDF_FONT_NAME_MAIN的值,由helvetica更改為msungstdlight,即可正確顯示繁體中文的頁首標題內容。

/**
 * default main font name
 */
//define ('PDF_FONT_NAME_MAIN', 'helvetica');      //預設值
define ('PDF_FONT_NAME_MAIN', 'msungstdlight');    //可讓頁首標題正確顯示

以下是修改example_038.php,使顯示繁體中文內容的部分程式碼:

// set font
//$pdf->SetFont('cid0jp', '', 20);        //這個應該也可以
//$pdf->SetFont('cid0ct', '', 20);        //這個應該也可以
$pdf->SetFont('msungstdlight', '', 20);
// add a page
$pdf->AddPage();

//$txt = 'Example of CID-0 CJK unembedded font.
//To display extended text you must have CJK fonts for your PDF reader: こんにちは世界';
$txt = '林書豪再現「林來瘋」身手!';
$txt = $txt . '昨拿廿分、十三助攻與四抄截,';
$txt = $txt . '本季第六次獻出兩個「雙位數」成績單;';
$txt = $txt . '可惜紐約尼克隊防守再出紕漏,';
$txt = $txt . '終場一一四比一一九不敵密爾瓦基公鹿,客場四戰全輸。';
$txt = $txt . '明天凌晨十二點重返紐約主場迎戰費城七六人,尼克全力止敗。';
$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0);


以下是調整後所顯示的內容:

7 則留言:

  1. 感謝提供這麼好的方法,謝謝!!

    回覆刪除
  2. $pdf->SetFont('cid0jp', '', 18); // 可以顯示中文(繁、簡)、日文、韓文。
    //$pdf->SetFont('msungstdlight', '', 18, '', true); // 繁中, 但是效果不好,字會偏移
    //$pdf->SetFont('stsongstdlight', '', 20); // 可以顯示中文, 但是效果不好,字會偏移
    //$pdf->SetFont('dejavusans', '', 14, '', true); // 預設 utf8

    回覆刪除
  3. 为什么我这样做后问题仍旧???

    回覆刪除
  4. 請問我依著範例做為啥輸出都是亂碼 一點PDF樣子都看不到?

    回覆刪除
  5. 請確認一下程式碼是不是UTF-8編碼?

    回覆刪除
  6. 感謝,我是遇到問題是pdf下載下來後,用gmail寄出去,gmail預覽會亂碼,但下載下來看是正常的。

    回覆刪除