Joomla之门广告招商,PR=5,alexa 排名2万1
English French German Italian Portuguese Russian Spanish

捐款 -> 升级 -> 下载

淘宝捐款升级到高级会员

点击这里给我发消息

Donate to joomlagate.com to translate more Joomla! extensions and free Joomla! templates

下载最新版本 Joomla!

Joomla! CMS - free Joomla! templates
download Joomla! 1.5.15 Chinese version

文章分类阅读

会员登录

 
 
Joomla之门 Joomla教程 Joomla! 1.5 教程 Joomla! 1.5 生成中文PDF的解决方案
Joomla! 1.5 生成中文PDF的解决方案 E-mail
作者:白建鹏   
2007-08-17

首先向所有会员及访客致歉:本文的撰写计划早已拟就,由于最近工作较忙,没顾上写出来,今天终于唱了一出“空城计”。不过,至少可以向大家宣布:Joomla! 1.5 中文支持PDF的问题我已经解决。今天下载该版本的会员可能会发现,我制作的 Joomla! 1.5 RC1 中文版安装包达到了8MB之巨!这就是因为里面包含了实现中文PDF的字体文件。

原版的 Joomla! 1.5 RC1 无法支持中文PDF,在中文文章中一旦点击“pdf”按钮,则生成的PDF页面里面中文都是乱码(在《7步完成Joomla! 1.5 安装》这篇文章中我曾经提到过)。现在请下载本站制作的Joomla! 1.5 RC1 中文版,安装之后随便撰写一篇中文文章,然后测试其PDF功能,我相信你能看到正常的宋体中文,而且简体中文、繁体中文均可正常显示。

那么,这是如何实现的呢?这里面还有个故事。

Joomla! 1.5 中文PDF

 

当初我从Joomla! 1.5 RC1 制作中文版时,只是简单地将Joomla!台湾网站翻译的简繁中文语言包添加进去,然后打包即成。然而在测试时,我发现英文页面可以生成正常的PDF文件,中文页面生成pdf后都是乱码(当然页面中的数字和英文字符还正常)。我就觉得非常纳闷,难道Joomla! 1.5 就不能支持中文PDF功能吗?

于是我在Joomla!官方论坛发了一个帖子,在CoolAcid 的帮助下,我注意到在 Joomla! 1.5 的  /language 文件夹里面还有一个目录叫作 pdf_fonts。CoolAcid 告诉我,我必须制作出对应中文的、包含所有中文字符的PDF字体,才能实现对中文的PDF支持。这个字体文件必须存放在 /language/pdf_fonts 目录内,并且需要在对应语言的 xml 文件中声明这个字体用于生成 PDF 文件。

现在方案就很清楚了:制作一个字体文件;将这个文件放到指定目录;编辑 xml 文件声明这个字体。

字体文件还不简单吗?在 windows 操作系统的 c:\windows\fonts 目录里面已经自带了400多个字体文件,难道还挑不出一个能用的吗?然而,当我打开 Joomla! 1.5 的 /language/pdf_fonts 目录,我发现我把这个问题想简单了。这个目录里面根本没有 .ttf 字体文件,而是 .z 格式的文件:

Joomla! 1.5 的英文PDF字体

 

同时,在 /language/en-GB/en-GB.xml 文件中的 21 行左右,发现了如下代码:

 

  <pdfFontName>vera</pdfFontName>

可以看出,英文页面生成PDF所用的字体文件名称是“vera”,同时需要提供 vera.php 、vera.z 和 vera.ctg.z 三个文件。

老实说,这还是我第一次看 .z 作扩展名的文件。这就产生了一个新问题:我们必须寻找一种中文字体,并将它转换成 .z 和 .ctg.z 格式,同时制作对应的 .php 文件。当然了,如果有现成的文件,直接复制过来多好啊!很可惜,经过一番搜索,我没有找到现成的字体文件。

再次感谢CoolAcid ,他提供的一个在SourceForge网站论坛上讨论“Using font files?”的帖子给了我很大启发:我们可以先将 .ttf 字体文件转换成 .ufm 文件,然后由 .ufm 文件生成 .z 文件。

又经过一番搜索和思索,我找到了这个名叫 ttf2ufm 的开源工具,该工具只有两个文件:ttf2ufm.exe 和 makefontuni.php。在该工具的说明文档中,作者给出了使用方法:

 

  $ ttf2ufm -a -F myfont.ttf

  $ php -q makefontuni.php myfont.ttf myfont.ufm

 

玩过Linux的人一看就知道,$ 符号是Unix操作系统的shell命令行提示符。这工具原来不能在 windows 平台上用阿!

我几乎又陷入了困境。过了几天,我突发奇想:既然 ttf2ufm 工具的主文件是 .exe 格式,它似乎应该可以在 windows 平台上使用。于是我打开了 winXP 的命令行模式,进入 ttf2ufm 的目录(已经提前复制了一个 stsong.ttf 字体文件进去),尝试执行了一下上面第一行命令(两个命令是两次分别执行):

 

  J:\ttf2ufm>ttf2ufm -a -F stsong.ttf

 

没想到竟然执行了!并且真的生成了一个 stsong.ufm 文件!

哈哈!真是柳暗花明又一村啊。

但是,在尝试执行第二个命令时,总是无法成功,一直提示“'php' 不是内部或外部命令,也不是可运行的程序或批处理文件”。这也难怪,DOS命令中根本不存在php.exe 或者 php.com 这个文件啊。

在苦闷之际,我忽然想到我正在使用 XAMPP 集成型 AMP(Apache+MySQL+php)服务器环境。是否这个集成包之中有什么可以借用的工具呢?

结果在 J:\xampp\php 这个目录中,我看到了 php.exe 文件。OK!有办法了:我把 ttf2ufm 工具目录移动到 J:\xampp\php 目录下,然后借用这里的php.exe来运行脚本。

{mospagebreak_scroll title=制作Joomla! 1.5 PDF 字体&heading=Joomla! 1.5 中文 PDF 实现思路}

下面简单介绍一下过程:

1、字体源的选择

考虑到.ufm文件必须由unicode字体文件产生,我挑选了 c:\windows\fonts 目录里面的 stsong.ttf 文件([[华文宋体]]),如果你没有这个字体,可以在网上下载到。之所以没有选用“宋体”,是因为“宋体”所对应的字体文件为 simsun.ttc,不是 .ttf 格式。当然,我也尝试了其他几种字体,发现有些不是 unicode 字体,无法使用。最终决定选用华文宋体。

2、生成 .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 文件,这个过程比较漫长,要耐心等待。屏幕显示如下图所示:

生成.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,如下图所示:

ttf文件转换为ufm文件

3、生成 .z 字体文件

现在该用到 php.exe 这个命令了。由于该文件位于 J:\xampp\php\ttf2ufm 上一层目录,所以我们在命令行模式下执行下面的命令:

 

  J:\xampp\php\ttf2ufm>..\php -q makefontuni.php stsong.ttf stsong.ufm

 

这个命令开头的两个点(..)表示当前目录的上级目录。输入这个命令并回车之后,电脑似乎没有任何反应,但是能听到硬盘在吱吱乱叫(呵呵,我的旧电脑用上吃奶的劲了),大约15秒钟之后,提示“字体文件压缩成功”:

生成.z格式字体压缩文件

这时可以看到在 J:\xampp\php\ttf2ufm 文件夹中又多出了3个文件:stsong.php 、stsong.z 和 stsong.ctg.z ,正是我们所需要的!如下图所示:

.z格式字体压缩文件制作成功

 

4、测试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”按钮,会看到终于输出了正常的中文页面!限于篇幅,此处不提供截图。有兴趣的会员可以下载 Joomla! 1.5 RC1 中文版 自行测试。

5、应用体会

上面已经实现了简体中文(zh-CN)的PDF功能,那么繁体中文呢?经过测试发现,华文宋体这个字体里面竟然已经包含了繁体中文字符。也就是说,它同时能够支持繁体中文。于是,我们只要编辑 /language/zh-TW/zh-TW.xml 文件,并将其 pdfFontName 也声明为 stsong 即可。经测试这个方法完全可行。

另外,我还发现,如果我们用“华文隶书”(因为标准的“隶书”不是 ttf 字体)这种字体制作成 .z 格式用来生成PDF文件,那么不论原始网页中使用何种中文字体,其PDF页面上所有中文均为“华文隶书”的样子。这就意味着,PDF页面只能拥有一种字体,即使你的原始网页中可能有多种字体,例如:标题用行草,小标题用隶书,正文用宋体,重点提示用楷体。我想,这应该是一种遗憾。PDF功能应该反映真实的页面外观。希望Joomla!官方将来能改进这个功能。

 

 下载 Joomla! 1.5.20 [senu takaa] 简繁中文深入汉化版
文件标题:Joomla! 1.5.20 [senu takaa] 简繁中文深入汉化版 (Details)
文件类型:zip
版本:1.5.20 stable
文件大小:8.42 MB
下载次数:20928

 

 下载 ttf2ufm 字体制作工具
文件标题:ttf2ufm 字体制作工具 (Details)
文件类型:gz
版本:1.0
文件大小:109.69 Kb
下载次数:476