以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  中文处理  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=7765)


--  作者: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


--  作者:nancy
--  发布时间:11/30/2004 2:46:00 PM

--  
第二步和第三步都弄好了,可是第一步不行啊,是在winnt下面吗?
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
6,292.969ms