会员评分: 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