我正在使用AntennaHouse格式引擎从DITA bookmap创建自定义PDF输出。我正在尝试创建一个仅出现在本书第一页的自定义标题。这些书可以有多个章节,所以我使用的策略是为第一章创建一个页面序列,然后为其余章节创建不同的页面序列。
我区分第一章处理和其他章节要处理(在文件commons.xsl中)。第一个块确定章节号并将其放在变量“chapterNumber”中。第二个块描述了如何处理章节,具体取决于chapterNumber变量的内容:
<xsl:variable name="id" select="@id"/>
<xsl:variable name="topicChapters">
<xsl:copy-of select="$map//*[contains(@class, ' bookmap/chapter ')]"/>
</xsl:variable>
<xsl:variable name="chapterNumber">
<xsl:number format="1" value="count($topicChapters/*[@id = $id]/preceding-sibling::*) + 1"/>
</xsl:variable>
<xsl:when test="$topicType = 'topicChapter'">
<xsl:choose>
<xsl:when test="$chapterNumber = '1'">
<xsl:call-template name="processFirstChapter"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="processTopicChapter"/>
</xsl:otherwise>
</xsl:choose>
第一章的页面序列如下所示:
<fo:page-sequence-master master-name="body-first-sequence">
<fo:repeatable-page-master-alternatives>
<fo:conditional-page-master-reference page-position="first" master-reference="body-first"/>
<fo:conditional-page-master-reference page-position="rest" master-reference="body-rest"/>
<fo:conditional-page-master-reference master-reference="body-rest"/>
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
其余章节的页面顺序如下:
<fo:page-sequence-master master-name="body-sequence">
<fo:repeatable-page-master-alternatives>
<fo:conditional-page-master-reference page-position="any" master-reference="body-rest"/>
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
在处理过程中,我会调用两个模板,一个用于第一章,另一个用于其他章节:
<xsl:template name="insertBodyStaticContents">
<xsl:call-template name="insertBodyFootnoteSeparator"/>
<xsl:call-template name="insertBodyRestHeader"/>
<xsl:call-template name="insertBodyFooter"/>
</xsl:template>
<xsl:template name="insertBodyFirstStaticContents">
<xsl:call-template name="insertBodyFootnoteSeparator"/>
<xsl:call-template name="insertBodyFirstHeader"/>
<xsl:call-template name="insertBodyFooter"/>
</xsl:template>
这些模板依次调用标题模板,一个用于第一章的第一页,另一个用于所有剩余的页面:
<xsl:template name="insertBodyFirstHeader">
<fo:static-content flow-name="first-body-header">
<fo:block-container z-index="-1" position="absolute" top="0pt" left="0pt" height="1.5in" width="100%">
<fo:block>
<fo:external-graphic src="Configuration/OpenTopic/cfg/common/artwork/qrgraphic.png"/>
</fo:block>
</fo:block-container>
<!-- set the title -->
<fo:block xsl:use-attribute-sets="__qrc__title__header">
<xsl:value-of select="//*[contains(@class,' bookmap/mainbooktitle ')]"/>
</fo:block>
<!-- set the subtitle -->
<fo:block xsl:use-attribute-sets="__first__heading__qrctext">
Quick Reference Card
</fo:block>
</fo:static-content>
</xsl:template>
<xsl:template name="insertBodyRestHeader">
<fo:static-content flow-name="rest-body-header">
<!-- set the title -->
<fo:block xsl:use-attribute-sets="__qrc__title__header2">
<xsl:value-of select="//*[contains(@class,' bookmap/mainbooktitle ')]"/>
</fo:block>
<!-- set the subtitle -->
<fo:block xsl:use-attribute-sets="__firstheading__subtitle">
Quick Reference Card
</fo:block>
</fo:static-content>
</xsl:template>
除了一个奇怪的故障外,一切都有效 - 如果本书的第一章长于一页,那么第一章的第一页就有正确的标题(流名称为first-body-header的标题) )但在该章的后续页面中,标题为空白。第二章和第二章也有正确的标题(一个名为rest-body-header的流名称)。我知道该标头的代码是正确的,因为它出现在第二章及以后。但是,完全相同的标题应该出现在第一章的第2页上,并且它不会出现。我不能为我的生活弄清楚我的代码出了什么问题。任何帮助表示赞赏。
答案 0 :(得分:0)
你可能会使事情变得比你需要的更复杂。如果所有章节的页面区域的几何形状相同,那么第一章不需要不同的页面序列主页,只需要标题区域的静态内容中的不同内容。
要做的另一件事是保存.fo文件并检查它以确保它以您的方式生成。将Ant参数“retain.topic.fo”设置为“yes”,将clean.temp设置为“no”。
干杯,
埃利奥特
答案 1 :(得分:0)
我不确定你在哪里打电话,但基本上你需要两个简单的页面母版(4,计算空白页面)。 1是你的第一章开场白,一个是你的每一页其他页面。
为每个人定义一个fo:region-before。然后,在您的流程中,调用适用的静态内容。现在,当你生成第一章时,看起来你的BodyRestHeader根本就没有被调用。
一个非常基本的例子:
<fo:root>
<fo:layout-master-set>
<fo:simple-page-master master-name="chapfirstopen">
<fo:region-body/>
<fo:region-before region-name="firstopenhead"/>
</fo:simple-page-master>
<fo:simple-page-master master-name="everythingelse">
<fo:region-body/>
<fo:region-before region-name="elsehead"/>
</fo:simple-page-master>
<fo:page-sequence-master master-name="firstchap">
<fo:repeatable-page-master-alternatives>
<fo:conditional-page-master-reference master-reference="chapfirstopen" page-position="first">
<fo:conditional-page-master-reference master-reference="everythingelse">
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
<fo:page-sequence-master master-name="everyotherchap">
<fo:repeatable-page-master-alternatives>
<fo:conditional-page-master-reference master-reference="everythingelse">
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="firstchap">
<fo:static-content flow-name="firstopenhead">
<!--your first page static content.-->
</fo:static-content>
<fo:static-content flow-name="elsehead">
<!--your every-other-page static content.-->
</fo:static-content>
<fo:flow><!--first chapter--></fo:flow>
</fo:page-sequence>
<fo:page-sequence master-reference="everyotherchap">
<fo:static-content flow-name="elsehead">
<!--your every-other-page static content.-->
</fo:static-content>
<fo:flow><!--other chapter--></fo:flow>
</fo:page-sequence>
</fo:root>
这些方面的东西。