[英]xsl-fo header not appearing second page of first chapter
我正在使用AntennaHouse格式化引擎从DITA图书地图创建自定义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页以上显示完全相同的标题,并且不会出现。 我一生都无法弄清楚我的代码出了什么问题。 任何帮助表示赞赏。
您可能使事情变得比所需的复杂。 如果所有章节的页面区域的几何形状都相同,则第一章不需要使用不同的页面序列母版,而标题区域的静态内容只需不同的内容。
另一件事是保存.fo文件并检查该文件,以确保按照您的实际方式生成该文件。 将Ant参数“ retain.topic.fo”设置为“ yes”,并将clean.temp设置为“ no”。
干杯,
艾略特
我不确定您要在哪里打电话,但是基本上您需要两个简单的页面母版(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>
遵循这些原则。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.