如何从Docbook 5.0生成PDF

20
我已经编写了一个带有以下标题的docbook 5.0文档:
<?xml version="1.0" encoding="UTF-8"?>
<book version="5.0" xmlns="http://docbook.org/ns/docbook"
      xmlns:xlink="http://www.w3.org/1999/xlink"
      xmlns:xi="http://www.w3.org/2001/XInclude"
      xmlns:svg="http://www.w3.org/2000/svg"
      xmlns:m="http://www.w3.org/1998/Math/MathML"
      xmlns:html="http://www.w3.org/1999/xhtml"
      xmlns:db="http://docbook.org/ns/docbook">

在Ubuntu 9.10上,使用docbook2pdf打印出许多错误消息,并且无法生成任何pdf文档。这些错误消息包括:

openjade:test.xml:2:0:E: prolog can't be omitted unless CONCUR NO and LINK EXPLICIT NO and either IMPLYDEF ELEMENT YES or IMPLYDEF DOCTYPE YES
openjade:test.xml:2:0:E: no document type declaration; will parse without validation
openjade:/usr/share/sgml/docbook/stylesheet/dsssl/modular/print/dbtitle.dsl:18:5:E: flow objects at the root must be all of class scroll or all of class page-sequence or simple-page-sequence
openjade:/usr/share/sgml/docbook/stylesheet/dsssl/modular/print/dbbibl.dsl:704:4:E: flow objects at the root must be all of class scroll or all of class page-sequence or simple-page-sequence

使用docbook2pdf工具将docbook 4.5格式的文档转换为PDF格式,该转换后的文档包含正常的标题。

<?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">

它的运行效果相当不错。

有没有一种从docbook 5.0生成pdf的方法?

7个回答

36

我看到有三种选项(在Debian / Ubuntu可用)可以从docbook生成pdf:

  • jade提供了asker使用的docbook2pdf命令,但是jade过时了,它使用SGML,这比XML早,并且不支持Unicode; 它也缺乏对docbook 5的支持。

  • docbook-xsl 样式表通过XSL-FO进行。 docbook-xsl适用于docbook 4.5,docbook-xsl-ns适用于docbook5。 使用fop从XSL-FO转换为PDF。 管道:docbook5 —(xsl)—> xml.fo —(fop)—> pdf。涉及的命令:xsltproc,fop。

  • dblatex主要面向docbook4.5,但已更新一些docbook5。

xmlto可以驱动最后两个,尽管它目前默认为docbook-xsl而不是docbook-xsl-ns。


快速Docbook5用户指南

先决条件

sudo aptitude install docbook5 docbook-xsl-ns xsltproc fop xmlto libxml2-utils xmlstarlet

验证

xmlstarlet val --err --xsd /usr/share/xml/docbook/schema/xsd/5.0/docbook.xsd book.xml

PDF输出

xsltproc /usr/share/xml/docbook/stylesheet/docbook-xsl-ns/fo/docbook.xsl book.xml > book.fo
fop -fo book.fo -pdf book.pdf

1
@Tobu,你说得有道理,但作为一个经常需要将Debian/Ubuntu的指令“翻译”成其他系统可用的指令的人来说,那个fop链接还是很有用的。 - Ben
您可以从此处下载docbook-xsl和docbook-xsl-ns:https://sourceforge.net/projects/docbook/files/ - MarekJ47
找不到名为“docbook5”的任何软件包,但有1个软件包的名称中包含“docbook5”:docbook5-xml。更改名称后,命令可以正常工作。但是,以下带有强调的标准示例会导致xmlstarlet失败:“此元素不被期望”。但是,xsltproc可以正常工作。 - Yola

4
除了您提供的标题外,您是否尝试过更小的示例,例如来自DocBook 5.0:权威指南的此示例?
<?xml version="1.0" encoding="UTF-8"?>

<book xmlns='http://docbook.org/ns/docbook'>
  <title>An Example Book</title>
  <titleabbrev>Example</titleabbrev>
  <info>
    <legalnotice><para>No notice is required.</para></legalnotice>
    <author><personname>
      <firstname>Norman</firstname><surname>Walsh</surname>
    </personname></author>
  </info>

  <dedication>
  <para>
      This book is dedicated to you.
  </para>
  </dedication>

  <preface>
    <title>Foreword</title>
    <para>
        Some content is always required.
    </para>
  </preface>

  <chapter>
    <title>A Chapter</title>
    <para>
        Content is required in chapters too.
    </para>
  </chapter>

  <appendix>
    <title>Optional Appendix</title>
    <para>
        Appendixes are optional.
    </para>
  </appendix>
</book>

我刚刚通过我的Maven环境将其转换为PDF。你能否给出一个包含一些内容的小例子(或几个分开的例子),这些内容需要使用所有附加名称空间。

如果上面的示例不起作用,并且您对我如何设置环境感兴趣,请阅读在Maven项目站点中提供DocBook内容。只需将示例替换为上述DocBook 5.0示例。与此问题相关的只有docbkx-maven-plugin。(PS:需要一些Java和Maven2的基本知识。)


2

Docbook 4.5和5.0之间存在显著差异。这些差异可能会导致您的文档无法转换。

如果您想检查5.0文档的有效性,可以使用以下命令行工具:

  1. 它是一个Java工具,因此您需要拥有最新的Java运行时环境。

  2. 该工具名为Jing。您可以从thaiopensource网站下载: http://www.thaiopensource.com/relaxng/jing.html

  3. 您还需要docbook 5.0的relax ng文件。它随docbook 5分发。

  4. 使用以下命令行运行验证测试:
    java -jar path_to_Jing/jing.jar -t -i path_to_docbook5/docbook.rng document.xml

如果出现故障,应以以下方式返回:Error at URL "file:...../document.xml", line number 211, column number 59: bad value for attribute "id" from namespace "http://www.w3.org/XML/1998/namespace" Elapsed time 968+166=1134 milliseconds


2

Publican

您可以使用Publican将您的DocBook XML文档发布为PDF、html和html-single格式。Publican是Red Hat在其内部文档工具链中使用的一部分,并且是由Fedora项目托管的开源应用程序。该工具使用“品牌”来实现对正在发布的内容应用样式的模块化。这种预设方式使得它能够与各种CMS或文档工具兼容。

JBoss文档指南

该工具的一个很好的示例是JBoss Press Gang文档,它本身是一个很好的资源,为文档社区提供了有关在JBoss文档中使用DocBook XML的指导。html和PDF版本是使用Publican生成的。


1

http://docbookpublishing.com支持DocBook 5.0文档。它是一个用于将DocBook转换为PDF格式的在线服务。您还可以通过REST API提交您的DocBook文档。


链接已经失效。 - ikreb

1

0

这个工具值得开发一个WordPress插件。 - Java Spring Coder
链接已经失效。 - ikreb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接