2

我有兴趣为 DocBook 4.5 创建自定义封面。是否可以告诉工具链使用预构建的 PDF 页面作为封面?在这种情况下,我只需在 Word 或 Writer 中创建它,然后在自定义层中添加一些内容以将其用作本书的第一页。

让 DocBook 工具链包含预构建的封面页以保持页码和样式一致(即封面正面为“i”,封面背面为“ii”,目录为“iii”等)非常重要。所以PDFedit和朋友是不可能的。

相关(但不是问题所必需的):对于那些感兴趣的人,我尝试过理解这样的文件。但他们没有简明扼要地告诉我我应该做什么就胡说八道。并且在自定义层中添加以下内容不会改变标题前的空格,不会改变标题的字体大小并且缺少徽标。

<xsl:attribute-set name="book.titlepage.recto.style">
  <xsl:attribute name="space-before">2in</xsl:attribute>
  <xsl:attribute name="font-size">32pt</xsl:attribute>
</xsl:attribute-set>

如果我将其更改为book.titlepage.verso.style,则第二页上的字体大小将更改(但不会更改文本前的前导空格)。这对我来说完全莫名其妙,我厌倦了试图弄清楚这些不合逻辑的细节。

4

2 回答 2

2

您可以使用预先创建的 PDF 文件作为书籍封面。但是为了将封面和从 DocBook 源构建的 PDF 合并,您需要一个程序,例如 PDFedit 或 Adob​​e Acrobat。没有任何东西可以添加到 DocBook-XSL 定制层来完成此操作。

在从 DocBook 源构建 PDF 时,可以包含封面(其中预构建的 PDF 可能通过引用包含在内,作为图像),但是库存的 DocBook-XSL 样式表对此提供的支持很少。

DocBook 5.0 中引入了封面元素。但是为了用它做一些有用的事情,您必须从头开始编写所需的 XSLT 模板。有关更多信息,请参阅 Bob Stayton 书中的书籍封面部分。

问题的后半部分是关于不同野兽的扉页。如果您需要关于扉页的帮助,请提出一个单独的问题(顺便说一句,您也可以在 docbook-apps 邮件列表中提问;请参阅http://docbook.org/help)。

于 2013-11-20T13:31:49.143 回答
2

除了 mzjn 的回答之外,这是我发现在脚本中效果很好的内容(假设这本书是根据脚本构建的)。它工作得很好,并且不需要您在添加图形或其他布局元素时与 Docbook 作斗争。感谢 Sid Steward 提供的页码建议。

您将需要以下内容:

  • book.pdf - 使用 Dockbook 生成的没有图形的封面的书
  • cover.pdf - 您要使用的一页封面,使用 Microsoft Word、OpenOffice Writer 等创建
  • pdftk - 用于处理 PDF 的工具包(http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/)。

以下脚本将自动“修复”书籍封面和编号。在标准xsltprocfop(或xep)命令之后添加它们。

# xsltproc and fop commands omitted
...

# First, remove the Docbook cover
pdftk book.pdf cat 2-end output temp1.pdf

# Second, concatenate the desired cover and remaining book
pdftk cover.pdf temp1.pdf output temp2.pdf

# Third, clean up the book's output
pdftk temp2.pdf output book.pdf

# Cleanup temp files
rm temp1.pdf temp2.pdf

此时,book.pdf已经有了想要的封面,上面有图片和日期、版本等其他项目。但页码可能已关闭。

页码已关闭,因为 Docbook 将封面编号为i,法律声明为ii,目录为iii, iv,iv等。也就是说,他们在内容之前使用罗马数字,然后使用十进制编号1, 2,3等。但是,pdftk确实目前不接受编号方案。

要修复编号方案,请使用sed添加编号方案,如下所示。sed将搜索/Type /Catalog. 一旦找到,它将添加一个新行 ( \n&)。在新行之后,插入以下内容以添加罗马/十进制编号:/PageLabels << /Nums [ 0 << /S /r >> 4 << /S /D >> ]

# Fix the page numbering
TMP_FILE=`mktemp /tmp/book.XXXXXXXXXX`
sed -e "s|/Type /Catalog|/Type /Catalog \n& /PageLabels << /Nums [ 0 << /S /r >> 4 << /S /D >> ] >>|" book.pdf > $TMP_FILE
mv $TMP_FILE book.pdf

0 << /S /r >>表示使用从第 0 页开始的小写罗马数字(从 0 开始)。

4 << /S /D >>表示使用从第 5 页开始的十进制数(从 0 开始)。应该更改它以反映1相关书籍的页面。

于 2013-12-08T08:37:44.107 回答