5.关键问题,DBF中文PDF现实问题
fop0.20.5虽然没有集成一些中文字体,不过提供了读取字体文件*.ttc/*.ttf保存为xml,并且建立新字体的配置文件,fop在pdf中就可正常显示中文了。
具体操作分以下几步。
a. 拷贝系统盘windows/fonts目录下需要用的字体文件(一般中文用宋体(SimSun)和黑体(SimHei))到DBF目录下的lib/fonts(新建的)目录下。
b. 控制台使用cd命令使工作目录到DBF/lib下。
c. 运行命令
java -classpath fop-0.20.5.jar;avalon-framework-api-4.3.jar;avalon-framework-impl-4.3.jar org.apache.fop.fonts.apps.TTFReader -ttcname SimSun fonts/simsun.ttc fonts/simsun.xml,就会在fonts目录下生成simsun.xml宋体的字体文件。同样再运行
java -classpath fop-0.20.5.jar;avalon-framework-api-4.3.jar;avalon-framework-impl-4.3.jar org.apache.fop.fonts.apps.TTFReader fonts/simhei.ttf fonts/simhei.xml可生成simhei.xml黑体的字体文件。
这两个命令由一个不同之处是黑体没有使用-ttcname参数。字体文件ttc结尾的话,是多种字体的集合。simsun.ttc不仅包含SimSun字体,还有NSimSun和SimSun-PUA,fop读取时需要指定读取那种字体,所以要加-ttcname参数。而.ttf结尾的只包含一种字体,所以不需要。
d. 有了字体文件,需要让fop能读取这些字体文件。用RAR可以查看到DBF/lib/fop-0.20.5.jar文件config下有userconfig.xml文件,解压缩到lib下并改名为myconfig.xml。
然后做一些修改
<!--
<entry>
<key>fontBaseDir</key>
<value></value>
</entry>
-->
改为
<entry>
<key>fontBaseDir</key>
<value>D:/DocBook-Framework-1.0/lib</value>
</entry>
其中value的值就是DBF/lib的路径,可根据实际情况填写。
并在
<fonts>
</fonts>
中添加宋体和黑体
<fonts>
<font metrics-file="fonts/simsun.xml" embed-file="fonts/simsun.ttc" kerning="yes">
<font-triplet name="SimSun" style="normal" weight="normal"/>
<font-triplet name="SimSun" style="normal" weight="bold"/>
<font-triplet name="SimSun" style="italic" weight="normal"/>
<font-triplet name="SimSun" style="italic" weight="bold"/>
</font>
<font metrics-file="fonts/simhei.xml" embed-file="fonts/simhei.ttf" kerning="yes">
<font-triplet name="SimHei" style="normal" weight="normal"/>
<font-triplet name="SimHei" style="normal" weight="bold"/>
<font-triplet name="SimHei" style="italic" weight="normal"/>
<font-triplet name="SimHei" style="italic" weight="bold"/>
</font>
</fonts>
保存即可。
e. 修改好myconfig.xml之后需要在DBF/build-docbook.xml指定FOP生成PDF是使用这个config文件。将
<java classname="org.apache.fop.apps.Fop" fork="true" maxmemory="256m"
dir="${basedir}" classpathref="dbf.classpath">
<arg value="${pdf.target.file}.xml"/>
<arg value="${target.dir}/${docbook.dir}/pdf/${docbook.file}.pdf"/>
</java>
改为
<java classname="org.apache.fop.apps.Fop" fork="true" maxmemory="256m"
dir="${basedir}" classpathref="dbf.classpath">
<arg value="-c"/>
<arg value="${dbf.basedir}/lib/myconfig.xml"/>
<arg value="${pdf.target.file}.xml"/>
<arg value="${target.dir}/${docbook.dir}/pdf/${docbook.file}.pdf"/>
</java>
f. 准备工作都做好了,DBF现在已经支持宋体和黑体了。这时需要修改PDF生成时用到的格式文件。在我们DocBook lite目录下的src/styles/pdf/custom.xsl.该文件作用就和HTML文件使用到的css差不多。修改该xsl。
在
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
version='1.0'>
添加
<xsl:param name="body.font.family">SimSun</xsl:param>
<xsl:param name="monospace.font.family">SimSun</xsl:param>
<xsl:param name="title.font.family">SimHei</xsl:param>
一切工作准备就绪,再次运行ant,然后去查看生成的PDF文件,中文已成功显示。
但是问题总是有的。仔细查看PDF,每个段落都只有一行。只是因为DBF中的xsl对中文断行处理不好。
下回分解。
分享到:
相关推荐
a book of Apache Velocity
maven SpringMVC velocity。itext 按照 velocity 生成pdf 并下载。
Apache Velocity - Velocity User Guide PDF格式文档,便于离线阅读。
Apache Velocity - VTL Reference just for convenience, it's from official site documentation
NULL 博文链接:https://trinea.iteye.com/blog/1157849
Apache Velocity项目Apache Velocity网站介绍当您访问 (我们的主页)时,将获得Apache Velocity网站。 它是所有Apache Velocity子项目的信封站点。 简而言之:仅当您感兴趣时,此Git存储库才对您很有趣a)想要在...
Velocity 使用指南。 CAI:以后设低分数。。。。
Apache Velocity - Developer's Guide PDF格式文档,便于离线阅读。
掌握Velocity,唯一一本Velocity书,翻译的整理本
很全的讲解velocity的书
标题:Apache Velocity Engine阿帕奇速度欢迎使用Apache Velocity Engine! Apache Velocity是用Java编写的通用模板引擎。 有关Velocity的更多信息,请参阅HTML文档。 这是顶级目录的描述: velocity-engine-core/ ...
velocity+itext的整合导出pdf
apache-velocity提供了强大了模板引擎功能,为我们动态生成代码及代码片段提供了很好地支持,本资源包含了velocity使用文档及相应的jar包
velocity手册.pdf velocity手册.pdf velocity使用指南
简单的验证工具,用于检测Apache Velocity模板中的错误。 它遍历目录并验证每个.vm文件。 错误会显示文件名,错误和可能的解决方案。 用法 java -jar velocityvalidator.jar path_to_templates [-rules=path_to_...
微软标准测试工具:APPVerifier,Driver verifier,Windows Performance Tools,Velocity Test Suite.