我正在使用XSL-FO标记来生成运行头,而我在检索书名方面遇到了麻烦。我有一个解决方法,但我认为必须有一个更优雅的解决方案。由于书名仅在书的开头显示为文本,因此我的标记与我的静态内容不在同一页序列中。是否有检索页外序列标记的机制?
我正在使用XSLT Formatter V 4.3来生成PDF版本,但我没有和它结婚。
一个非常简化的XML示例:
<book>
<bktitle>Alice in Wonderland</bktitle>
<chapter>
<chaptitle>Chapter 1</chaptitle>
<para>This is the story of Alice in Wonderland.</para>
</chapter>
</book>
XSL-FO的片段:
<fo:page-sequence master-reference="fm">
<fo:title>Alice in Wonderland</fo:title>
<fo:flow flow-name="xsl-region-body">
<fo:block font-variant="small-caps">
<fo:marker marker-class-name="book">Alice in Wonderland</fo:marker>Alice in Wonderland</fo:block>
</fo:flow>
</fo:page-sequence>
<fo:page-sequence master-reference="body">
<fo:title>Chapter 1</fo:title>
<fo:static-content flow-name="header">
<fo:block><fo:retrieve-marker retrieve-class-name="book"/></fo:block>
</fo:static-content>
<fo:flow flow-name="xsl-region-body">
<fo:block font-variant="small-caps">
<fo:marker marker-class-name="chapter">Chapter 1</fo:marker>Chapter 1</fo:block>
<fo:block>This is the story of Alice in Wonderland.</fo:block>
</fo:flow>
</fo:page-sequence>
答案 0 :(得分:1)
如果您使用retrieve-boundary="document"
:
<fo:retrieve-marker retrieve-boundary="document" retrieve-class-name="book"/>
答案 1 :(得分:0)
由于你的静态内容确实是静态的 - 毕竟书的标题并没有在书的中途改变 - 使用相同的逻辑将bktitle
的内容放入第一个fo:page-sequence
也把它放在fo:static-content/fo:block
。
FO格式化程序还可以使用较少的标记来存储,并且可以执行相当多的标记查找,但您可能不会看到这会对处理速度产生可测量的差异。