Joomla/Joomla! 1.5生成中文PDF的解决方案
原版的 Joomla! 1.5 RC1 无法支持中文PDF,在中文文章中一旦点击“pdf”按钮,则生成的PDF页面里面中文都是乱码。本条目就来阐述一下Joomla! 1.5生成中文PDF的解决方案。
解决方案[ ]
在 Joomla! 1.5 的 /language 文件夹里面还有一个目录叫作 pdf_fonts。必须制作出对应中文的、包含所有中文字符的PDF字体,才能实现对中文的PDF支持。这个字体文件必须存放在 /language/pdf_fonts 目录内,并且需要在对应语言的 xml 文件中声明这个字体用于生成 PDF 文件。现在方案就很清楚了:制作一个字体文件;将这个文件放到指定目录;编辑 xml 文件声明这个字体。
字体文件还不简单吗?在 windows 操作系统的 c:\windows\fonts 目录里面已经自带了400多个字体文件,难道还挑不出一个能用的吗?然而,当打开 Joomla! 1.5 的 /language/pdf_fonts 目录,我发现我把这个问题想简单了。这个目录里面根本没有 .ttf 字体文件,而是 .z 格式的文件:
同时,在 /language/en-GB/en-GB.xml 文件中的 21 行左右,发现了如下代码:
<pdfFontName>vera</pdfFontName>
可以看出,英文页面生成PDF所用的字体文件名称是“vera”,同时需要提供 vera.php 、vera.z 和 vera.ctg.z 三个文件。
具体过程[ ]
字体源的选择[ ]
考虑到.ufm文件必须由unicode字体文件产生,挑选了 c:\windows\fonts 目录里面的 stsong.ttf 文件(华文宋体),如果你没有这个字体,可以在网上下载到。之所以没有选用“宋体”,是因为“宋体”所对应的字体文件为 simsun.ttc,不是 .ttf 格式。
生成.ufm文件[ ]
在 J:\xampp\php 中创建新目录 ttf2ufm,将 ttf2ufm 工具的两个文件复制进去。然后将 c:\windows\fonts\stsong.ttf 文件复制进去。运行 winXP 的命令行模式,进入到J:\xampp\php\ttf2ufm 目录,输入以下命令:
J:\xampp\php\ttf2ufm>ttf2ufm -a -F stsong.ttf
算机开始生成 .ufm 文件,这个过程比较漫长,要耐心等待。屏幕显示如下图所示:
大约经过3分钟时间,会提示:
FontName STSong No Kerning data No Kerning data Finished - font files created
这表示转换完成。这时会发现 J:\xampp\php\ttf2ufm 文件夹中多出了3个文件,分别是 stsong.afm 、stsong.t1a 和 stsong.ufm,如下图所示:
生成.z字体文件[ ]
现在该用到php.exe这个命令了。由于该文件位于 J:\xampp\php\ttf2ufm 上一层目录,所以我们在命令行模式下执行下面的命令:
J:\xampp\php\ttf2ufm>..\php -q makefontuni.php stsong.ttf stsong.ufm
这个命令开头的两个点(..)表示当前目录的上级目录。输入这个命令并回车之后,电脑似乎没有任何反应,大约15秒钟之后,提示“字体文件压缩成功”:
这时可以看到在 J:\xampp\php\ttf2ufm 文件夹中又多出了3个文件:stsong.php 、stsong.z 和 stsong.ctg.z ,正是我们所需要的!如下图所示:
测试PDF效果[ ]
将刚才得到的 stsong.php 、stsong.z 和 stsong.ctg.z 三个文件复制到 Joomla! 1.5 的 /language/pdf_fonts 目录里,然后编辑 /language/zh-CN/zh-CN.xml 文件,将20行左右的PDF字体声明代码修改为:
<pdfFontName>stsong</pdfFontName>
请注意:当打开 /language/zh-CN/zh-CN.xml 文件后会发现原来所设置的PDF字体文件竟然跟英文一样,也是 vera!很明显vera字体不支持中文字符,因此这才是中文PDF出现乱码的根源。
按照上述方法修改 /language/zh-CN/zh-CN.xml 文件后保存,然后测试 Joomla! 1.5,在前台中文页面上点击“PDF”按钮,会看到终于输出了正常的中文页面!