使用预先创建的PDF页面作为书籍封面

时间:2013-11-09 15:48:49

标签: xml xslt pdf docbook

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

其具有的DocBook工具链掺入预建封面页保持页面编号和风格一致是重要的(即,盖前是“I”,盖回是“II”,目录是“III”等)。所以PDFedit和朋友是不可能的。

相关(但问题不是必需的):对于那些感兴趣的人,我尝试了解像this这样的文件。但他们在没有简明扼要地告诉我应该做什么的情况下絮絮叨叨。将以下内容添加到自定义图层不会更改标题前的空格,也不会更改标题的字体大小并且缺少徽标。

<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,则第二页上的字体大小将会更改(但不会更改文本前面的前导空格)。这让我感到困惑,我厌倦了试图弄清楚这些不合逻辑的细节。

2 个答案:

答案 0 :(得分:2)

您可以将预先创建的PDF文件用作书籍封面。但是为了合并该封面和从DocBook源构建的PDF,您需要一个程序,如PDFedit或Adobe Acrobat。您无法添加到DocBook-XSL自定义层来完成此任务。

在从DocBook源构建PDF时,可以合并一个封面(预编译的PDF可能会被引用作为图像),但是DocBook-XSL样式表对它提供的支持很少。

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

问题的后半部分是title pages,它们是不同的野兽。如果您需要有关标题页的帮助,请另外提出问题(顺便说一句,您也可以在docbook-apps邮件列表中查询;请参阅http://docbook.org/help)。

答案 1 :(得分:2)

除了mzjn的回答之外,我发现这是从脚本中运行 great (假设本书是从脚本构建的)。它工作得很好,并且不需要你在添加图形或其他布局元素时与Docbook作斗争。感谢Sid Steward提供的页面编号建议。

您需要以下内容:

以下脚本将自动执行书籍封面和编号的“修正”。在标准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,目录为iiiiv,{{1也就是说,他们在内容之前使用罗马数字,然后在iv12等的十进制编号中使用罗马数字。但是,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页开始的小写罗马数字(从0开始)。

0 << /S /r >>表示使用从第5页开始的十进制数字(从0开始)。应将其更改为反映相关图书的页面4 << /S /D >>