-- 作者:brook
-- 发布时间:5/21/2004 3:24:00 PM
-- 中文处理
随便从论文里粘几段过来,希望能对大家有所帮助,就当时灌水吧。 中文处理 排版首先遇到的一个问题就是中文的处理,由于默认的FOP不支持中文字体,有中文的地方(或其他使用不被支持的字体,不被字符集支持的字符的地方)都被显示成“#”,这种情况无论是对标准的排版,还是普通中文的排版都是不可接受的。于是首先要解决的问题就是为FOP添加中文字体。 东方字符的显示在FOP的早期版本中并不被支持,最早尝试对FOP打补丁以解决显示东方字符的是日本人。从FOP 0.16版本开始,他们在sourceforge上建立了一个jpfop项目来解决日文字符的显示问题,使用相同的方法也可以被用来显示中文字符。幸运的是,当前的FOP版本已经能很好的解决中文显示的问题,不再需要我们打补丁了。 具体的操作分为三步: 第一步 生成字体构图文件[Generating a font metrics file] 生成的字体构图文件为xml格式。Windows系统下,运行org.apache.fop.fonts.apps.PFMReader 使用下面的命令: java-cp build\fop.jar;lib\avalon-framework.jar;lib\xml-apis.jar;lib\xercesImpl.jar;lib\xalan.jarorg.apache.fop.fonts.apps.PFMReader pfm-file xml-file 其中,pfm-file是字体文件的名称和路径,可以在C:\windows\fonts中找到;而xml-file是生成的XML文件的名称和路径,可以根据需要自己定义。 在这里需要特别注意的是,生成宋体的xml文件的时候如果直接应用上述程序就会产生异常,这是由于windows下的宋体文件是后缀为ttc的TrueType Collection文件,即包含多个TrueType的文件,这样就引起了java命令的参数错误(应该引用ttf文件而非ttc)。处理的方法也很简单,只需将宋体文件中的字体剥离出来,分别处理即可。命令是: org.apache.fop.fonts.apps.PFMReader -ttcname "SimSun" C:\WINNT\Fonts\simsun.ttc simsun.xml 其中-ttcname后面指定需要从ttc文件中提取的字体名称 由于命令行较多,可以采取生成.bat文件的方法来处理。避免出现由于输入而产生的错误。 在这一步中也可以用org.apache.fop.fonts.apps.TTFReader命令,它的作用和用法和上述命令相同,不再赘述。 根据课题需要,我们只生成了宋体和黑体两种字体文件。课题中其他的字体都是windows中没有的艺术字或专用字,一个是字体文件找不到,另外,由于这种字体非是大量出现,一旦遇到也可按照图片处理。 第二步,注册字体到FOP(修改userconfig.xml文件) 在FOP主目录下的config子目录(以前的版本为conf目录)下有一个userconfig.xml文件,在userconfig.xml的最后几行有一个<fonts></fonts>标记区,在其中加入以下节点: <font metrics-file="simsun.xml" kerning="yes" embed-file="c:\WINNT\fonts\simsun.ttc"> <font-triplet name="sim_sun" style="normal" weight="normal"/> </font> <font metrics-file="simhei.xml" kerning="yes" embed-file="c:\WINNT\fonts\simhei.ttf"> <font-triplet name="sim_hei" style="normal" weight="normal"/> </font> 其中name属性的值就是在fo文档中供选取 font-family 的值。按上面的配置文件,可以通过设定 font-family=“sim_hei”设定字符为黑体,以后就可以通过“sim_hei”来引用黑体了。 要注意的是<fonts></fonts>标记区中的内容都是被注释掉了的,要把上述内容加在注释之外。 第三步 让XMLSpy自动读取userconfig.xml文件 现在已经配置好了 FOP 的宋体和黑体 字体支持。如果通过命令行运行 FOP ,已经可以正确生成这两种字体。但通过 XMLSPY 菜单生成 pdf文件的时候仍然报错:“没有找到字体”!!,出现这种情况的原因是默认情况下 XMLSpy 不会自动读取 userconfig.xml 。现在就解决这个问题:让 XMLSpy自动读取 userconfig.xml 。 打开 FOP 根目录下 FOP 文件C: / Program Files/Altova\FOP/fop.bat,注意最后一行: java -cp %LOCALCLASSPATH% org.apache.fop.apps.Fop %1 %2 %3 %4 %5 %6 %7 %8 Fop命令有个可选参数-c cfg.xml,所以只需要把最后这一行改成: java -cp %LOCALCLASSPATH% org.apache.fop.apps.Fop –c config/userconfig.xml %1 %2 %3 %4 %5 %6 %7 %8 这样为FOP添加中文字体的工作就全部完成了,可以找一些含有中文字符的fo文件来测试效果了。 参考文献 FOP的安装文档 C:\Program Files\Altova\FOP\ReleaseNotes.html 。 C:\Program Files\Altova\FOP\build\site\fonts.html; C:\Program Files\Altova\FOP\build\site\configuration.html; C:\Program Files\Altova\FOP\build\site\embedding.html。 如何在程序中嵌入FOP http://www-900.ibm.com/developerWorks/cn/xml/x-fop/index.shtml 在XMLSPY中添加FOP 字体支持 http://www.csdn.net/Develop/article/18%5C18610.shtm
|