新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论XSL,XSLT,XSL-FO,CSS等技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 XSL/XSLT/XSL-FO/CSS 』 → 中文处理 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 4011 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 中文处理 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     brook 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(高数修炼中)
      文章:12
      积分:102
      门派:W3CHINA.ORG
      注册:2004/2/19

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给brook发送一个短消息 把brook加入好友 查看brook的个人资料 搜索brook在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看brook的博客楼主
    发贴心情 中文处理

    随便从论文里粘几段过来,希望能对大家有所帮助,就当时灌水吧。
                                       中文处理
    排版首先遇到的一个问题就是中文的处理,由于默认的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


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/5/21 15:24:00
     
     nancy 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:6
      积分:89
      门派:XML.ORG.CN
      注册:2004/11/23

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给nancy发送一个短消息 把nancy加入好友 查看nancy的个人资料 搜索nancy在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看nancy的博客2
    发贴心情 
    第二步和第三步都弄好了,可是第一步不行啊,是在winnt下面吗?
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/11/30 14:46:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/7/30 0:40:05

    本主题贴数2,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    62.012ms