`

Apache Velocity DocBook Framework中文PDF生成攻略(三)

阅读更多
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对中文断行处理不好。

下回分解。
分享到:
评论

相关推荐

    Velocity.DocBook-Framework-1.0

    **标题**:“Velocity.DocBook-Framework-1.0”表明这是一个关于Apache Velocity项目的文档框架,版本为1.0。 **描述**:“Velocity 使用指南。”意味着这份文档是指导用户如何使用Velocity的一个手册或指南。 **...

    apache velocity介绍及资料

    Velocity中文手册.doc提供了对Velocity的详细指导,包括基本语法、指令、宏库的使用、上下文管理、工具引用等内容。手册中可能涵盖以下关键知识点: 1. **基础语法**:讲解VTL的基本元素,如变量引用($variable)、...

    Mastering.Apache.Velocity

    #### 三、Apache Velocity的应用场景 - **Web 开发**:在 MVC 架构中作为视图组件,负责数据到页面的渲染。 - **文档生成**:自动生成各种类型的文档,如报表、用户手册等。 - **代码生成**:根据配置或模板自动...

    velocity+itext导出pdf

    总结起来,"Velocity+Itext导出PDF"是一种高效且灵活的方式,可以将动态数据和预定义的模板结合,生成高质量的PDF文档。通过熟练掌握这两个工具的使用,开发者可以创建出满足各种需求的PDF文档生成系统。

    Mastering Apache Velocity

    《Mastering Apache Velocity》这本书是深入理解Apache Velocity这一强大模板引擎的权威指南。Apache Velocity是一个开源的Java模板引擎,它允许开发者将应用的展示层与业务逻辑层分离,从而提高开发效率和代码可...

    itext加载velocity生成PDF

    将两者结合,我们可以利用`Velocity`的模板能力来动态生成PDF内容,这在SpringMVC框架中尤其方便。 `iText`库提供了一系列API,用于创建PDF文档、添加文字、图像、表格等元素。它支持流式和模型两种模式,前者适用...

    掌握Apache Velocity

    ### 知识点一:Apache Velocity 概述与发展历程 - **Apache Velocity**是一种用于Java应用程序的模板引擎,它能够使Web开发人员高效地创建动态HTML网页和其他类型的文档。 - **版本**: Apache Velocity 1.3.x是该书...

    Apache Velocity - VTL Reference

    Apache Velocity - VTL Reference just for convenience, it's from official site documentation

    Apache Velocity - Velocity User Guide

    ### Apache Velocity - Velocity User Guide 知识点解析 #### 一、关于本指南(About this Guide) 本指南旨在帮助页面设计师和内容提供商熟悉 Velocity 及其简单却强大的脚本语言——Velocity 模板语言 (VTL)。...

    velocity-site:Apache Velocity网站

    Apache Velocity项目Apache Velocity网站介绍当您访问 (我们的主页)时,将获得Apache Velocity网站。 它是所有Apache Velocity子项目的信封站点。 简而言之:仅当您感兴趣时,此Git存储库才对您很有趣a)想要在...

    SpringBoot Velocity 代码生成模板

    SpringBoot集成Velocity代码生成模板是现代Java开发中的一个重要工具,它极大地提高了开发效率,尤其是在处理大量数据表映射到业务层代码时。Spring Boot作为一款轻量级的框架,简化了初始化和配置过程,而Velocity...

    Apache Velocity - Developer's Guide

    ### Apache Velocity - 开发者指南 #### 一、简介与入门 Apache Velocity 是一个基于 Java 的模板引擎,它提供了一种简单而强大的方法来创建和渲染格式化数据的文档。Velocity 的设计目的是使得开发者能够轻松地将...

    Velocity Template的另类用法:生成XML

    Velocity Template,作为Apache开源组织提供的一个Java模板引擎,最初被设计用于Web开发中的视图层,帮助开发者将静态页面与动态数据分离。然而,它的应用并不仅限于此,正如标题所示,“Velocity Template的另类...

    itext+velocity 填充字段 html转pdf

    在与 Velocity 结合使用时,iText 可以接受由 Velocity 渲染的模板,将动态数据填充到预先设计好的PDF模板中,生成具有个性化内容的PDF文件。 **Velocity** 是Apache软件基金会的一个项目,是一个Java模板引擎。它...

    速度引擎:Apache Velocity Engine的镜像

    标题:Apache Velocity Engine阿帕奇速度欢迎使用Apache Velocity Engine! Apache Velocity是用Java编写的通用模板引擎。 有关Velocity的更多信息,请参阅HTML文档。 这是顶级目录的描述: velocity-engine-core/ ...

    velocity经典4pdf中文教程

    Velocity,作为一个开源的Java模板引擎,是Apache软件基金会下的一个项目,主要被用于Web应用程序,以分离业务逻辑和表示层。这个压缩包包含了四本关于Velocity的经典中文教程,分别是《Velocity模板使用指南中文版...

Global site tag (gtag.js) - Google Analytics