會員評分:  4 / 5

啟用星號啟用星號啟用星號啟用星號不啟用星號
 

文章索引

複製檔案到 Joomla! 的安裝內

全部檔案準備好之後,我們現在可以把它們複製到伺服器上的適當位置裡。請使用 FTP 或 SFTP 將你的 tcpdf 檔案夾內的所有檔案以及 cache、config 與 images 三個目錄複製到你的 Joomla! 安裝內的 libraries/tcpdf 目錄裡面。(為了安全你最好把原來的 libraries/tcpdf 目錄改名,再建立一個新的 libraries/tcpdf 目錄。)

然後請把之前製作的 adobemingstd-light.php 複製到你的 Joomla! 安裝下的 language/pdf_fonts。同樣地將你電腦 tcpdf/fonts 檔案夾裡的 helvetica.php 和 uni2cid_ac15.php 複製過去。

編輯語言敘述 XML 檔

產生 PDF 時使用的字體是在個別語言目錄裡的語言敘述 XML 檔內指定。對正體中文來說,那個檔案是 language/zh-TW/zh-TW.xml。我們需在 標籤之間加入下面這行:

<pdffontname>adobemingstd-light</pdffontname>

修改 Joomla! PDF 腳本程式

在 Joomla! PDF 腳本程式裡似乎有個臭蟲。它並沒有正確地為文章內容設定字體。請用你愛用的文字編輯器開啟檔案 libraries/joomla/document/pdf/pdf.php。搜尋 function render( $cache = false, $params = array())。將下面這行插入到 $pdf->WriteHTML($this->getBuffer(), true); 之前。

$pdf->setFont($font, '', 10);

額外步驟

如果你能容忍 PDF 檔案中文章內容醜陋的編排,這其實是選擇性的步驟。這裡的問題是 TCPDF 使用空白字元來排版,但中文字通常是連在一起,並沒有空白字元夾在中間。

要修正這個問題,你必須修改 TCPDF 核心程式。在你的伺服器上用你愛用的編輯器開啟檔案 libraries/tcpdf/tcpdf.php,找到 public function Write($h, $txt, $link='', $fill=0, $align='', $ln=false, $stretch=0, $firstline=false) 函式的定義。在該函式內,搜尋以下這行:

if (preg_match("/[\s]/u", $this->unichr($c))) {

以這行文字取代

if (preg_match("/[\s\p{Lo}]/u", $this->unichr($c))) {

現在從你的 Joomla! 網站前台,試著產生一個中文 PDF 檔案,看看編排是否有改進。如果沒有改進,表示你的伺服器上之 PCRE 函式庫沒有把 Unicode 性能支援編譯進去。你可以在伺服器上用這個指令來檢查:

$ pcretest -C

你會看見類似下面的輸出

PCRE version 6.6 06-Feb-2006
Compiled with
  UTF-8 support
  Unicode properties support
  Newline character is LF
  Internal link size = 2
  POSIX malloc threshold = 10
  Default match limit = 10000000
  Default recursion depth limit = 10000000
  Match recursion uses stack

如果它顯示 Unicode 性能支援沒有啟動,這步驟裡的修改便無效。在這狀況下,你可以下載 PCRE 函式庫的程式碼,自行編譯以啟用 Unicode 性能支援。一旦新編譯的 PCRE 函式庫安裝好了,所產生之中文 PDF 的排版應該變得能被接受。

如果覺得懶惰.....

要是看到這些步驟讓你覺得氣餒,這裡告訴你一個捷徑。我把所有的檔案(除了額外步驟提及的檔案外,因為需要特別的 PCRE 函式庫)打包成一個套件,放在 Joomla! Taiwan。你可以將它下載,放進你的伺服器上。

 

FaLang translation system by Faboba