如何从docbook 5.0生成pdf

Szy*_*ski 15 linux pdf ubuntu docbook docbook-5

我写了一个带有标题的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">
Run Code Online (Sandbox Code Playgroud)

和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
Run Code Online (Sandbox Code Playgroud)

docbook2pdf for docbook 4.5格式的文档,标题为:

<?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">
Run Code Online (Sandbox Code Playgroud)

工作得很好.

有没有办法从docbook 5.0生成pdf?

Tob*_*obu 32

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

  • jade,它提供了asker使用的docbook2pdf命令.jade很古老,可以使用SGML,它早于XML,不支持Unicode; 它也缺乏对docbook 5的支持.

  • 经过XSL-FO 的docbook-xsl 样式表.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
Run Code Online (Sandbox Code Playgroud)

验证

xmlstarlet val --err --xsd /usr/share/xml/docbook/schema/xsd/5.0/docbook.xsd book.xml
Run Code Online (Sandbox Code Playgroud)

PDF输出

xsltproc /usr/share/xml/docbook/stylesheet/docbook-xsl-ns/fo/docbook.xsl book.xml > book.fo
fop -fo book.fo -pdf book.pdf
Run Code Online (Sandbox Code Playgroud)