2009-05-15

使用 docbook完成第一个helloworld(中文Pdf)

作为一种基于XML的文档定义标准,docbook规定了相关的解释规范,而已有的不同的parser和compiler会将docbook的源文件解释为不同类型的目标文件,如html,word,pdf,rtf,txt等。本文主要介绍下面几部分的内容:在linux(ubuntu)下配置相应的docbook环境、基于docbook写出第一个可以编译为pdf的整个过程。
  1. 配置Linux下的docbook环境
    • 在ubuntu下可使用apt-get来获得相应的deb包,主要安装下面的几个包:
      • docbook
      • xmlto
      • docbook-utils
      • docbook-xls
      • FOP
  2. docbook的中文HelloWorld
    • 在开始进行中文之前,可先尝试英文的第一个HelloWorld
      • docbook源文件如下(命名为test.xml)
      • <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
        "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
        <book>
        <bookinfo>
        <title>My book </title>
        <author>
        <firstname>My First Name</firstname>
        <surname>My Last Name</surname>
        </author>
        <publisher>
        <publishername>CSDN</publishername>
        </publisher>
        <isbn>ISBN#</isbn>
        <copyright>
        <year>2005</year>
        </copyright>
        </bookinfo>
        <part>
        <title>My Part</title>
        <chapter>
        <title>My Chapter</title>
        <sect1>
        <title>My Section1</title>
        <para>This  is a demo of a book.</para>
        </sect1>
        </chapter>
        </part>
        </book> 
      •  使用命令 xmlto fo test.xml
      •  这时会生成一个test.fo文件
      • 使用命令 fop test.fo test.pdf
      • 即可生成相应的pdf文件

    • 中文的hello world
      • 而在含有中文的docbook中则复杂了许多,如需要相应字体的支持等(如果照搬上面的步骤则中文会出现#这样的字符)
      • 生成相应的字体信息文件(假定使用文泉字体)
      • fop-ttfreader -ttcname "WenQuanYi Zen Hei Mono" /usr/share/fonts/truetype/wqy/wqy-zenhei.ttc font.xml
      • 如果是ttc文件则需指定相应的ttcname
      • 生成fop的配置文件,首先在参考中的3下载配置文件,然后修改其中的fonts部分,并命名为config.xml,如下
      • <font metrics-url="font.xml" kerning="yes" embed-url="/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc">
            <font-triplet name="WenQuanYiZenHei" style="normal" weight="normal"/>
            <font-triplet name="WenQuanYiZenHei" style="normal" weight="bold"/>
            </font> 
      • 其中metrics-url必须指定为刚生成的font.xml, embed-url为对应的字体路径
      • 这里系统xmlto默认(通常为 /usr/share/xml/docbook/stylesheet/nwalsh/fo/docbook.xsl),我们修改为(命名为my.xsl):
      • <?xml version='1.0'?>
        <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:exsl="http://exslt.org/common"
        xmlns:fo="http://www.w3.org/1999/XSL/Format"
        xmlns:ng="http://docbook.org/docbook-ng"
        xmlns:db="http://docbook.org/ns/docbook"
        exclude-result-prefixes="db ng exsl" version='1.0'>
        <xsl:import href="/usr/share/xml/docbook/stylesheet/nwalsh/fo/docbook.xsl" />
        <xsl:param name="l10n.gentext.language" select="'zh_cn'"/>
        <xsl:param name="body.font.family">WenQuanYiZenHei</xsl:param>
        <xsl:param name="body.font.size">10</xsl:param>
        <xsl:param name="monospace.font.family">Monaco</xsl:param>
        <xsl:param name="title.font.family">WenQuanYiZenHei</xsl:param>
        <xsl:param name="page.margin.inner">2cm</xsl:param>
        <xsl:param name="page.margin.outer">2cm</xsl:param>
        <xsl:param name="hyphenate">false</xsl:param>
        <xsl:param name="paper.type" select="'A4'" />
        <xsl:param name="draft.mode" select="'no'" />
        </xsl:stylesheet>
      • 注意上面加粗的行
      • 下面则是修改后的docbook源文件(含有中文),命名为 chinese.xml
      • <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
        "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
        <book>
        <bookinfo>
        <title>Python学习指南</title>
        <author>
        <firstname>朱</firstname>
        <surname>涛</surname>
        </author>
        <publisher>
        <publishername>清华大学出版社</publishername>
        </publisher>
        <isbn>ISBN#</isbn>
        <copyright>
        <year>2009</year>
        <holder>朱涛</holder>
        </copyright>
        </bookinfo>
        <chapter>
        <title>第一章</title>
        <sect1>
        <title>第一节</title>
        <para>正文内容.</para>
        </sect1>
        </chapter>
        </book>
      •  接着进行相应的编译即可
      • xmlto -x my.xls fo chinese.xml
      • -x 指定相应的xls
      • fop -c config.xml chinese.fo chinese.pdf
      • -c 载入特定的fop配置文件
      • 此时就应该可以看到含有中文的Pdf了
  3. 参考
    1. http://pdfhome.hope.com.cn/Article.aspx?CID=bf51a5b6-78a5-4fa3-9310-16e04aee8c78&AID=b01f4743-eee3-4a24-867b-9e71e8f5384d
    2. http://forum.ubuntu.org.cn/viewtopic.php?f=8&t=194109
    3. http://svn.apache.org/viewvc/xmlgraphics/fop/tags/fop-0_95/conf/fop.xconf?view=co

没有评论: