我正在查看遗留的XSL-FO文件。
目前,它会在左下角打印名称。有谁知道如何修改下面的代码,以便名称出现在正文部分?
我对一些事情感到困惑:
1)在simple-page-master中,
为什么有这两个代码片段,包括region-body和region-after?
<fo:region-body/>
<fo:region-after extent="1in"/>
哪个正在使用?显然,正在使用region-after。
2) flow-name的值只是任何旧字符串,还是非常具体且有意义?我将名称更改为xsl-region-blah并且出现错误,因此告诉我它非常具体
<fo:static-content flow-name="xsl-region-after"
但是,我不明白上面的代码是如何发挥作用的,因为根据RenderX的教程,如果页面序列主引用指向页面主文件,那么流程将来自页面主文件,例如,
<fo:page-sequence master-reference="Mail">
指向Mail,所以它会引用这个:
<fo:simple-page-master margin-left="1in" margin-right=".5in" margin-top=".5in"
page-width="8.5in" page-height="11in" master-name="Mail">
<fo:region-body/>
<fo:region-after extent="1.6in"/>
</fo:simple-page-master>
并且该页面主页使用region-body或region-after。我没有得到的是,它使用的是哪一个,身体还是之后?
以下代码属于更大的xsl-fo文件。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo">
<xsl:output version="1.0" method="xml" omit-xml-declaration="no" indent="yes"/>
<xsl:template match="/">
<fo:root>
<fo:layout-master-set>
<fo:simple-page-master margin-left=".5in" margin-right=".5in" margin-top=".5in" margin-bottom=".5in"
page-width="8.5in" page-height="11in" master-name="PickUp">
<fo:region-body/>
<fo:region-after extent="1in"/>
</fo:simple-page-master>
<fo:simple-page-master margin-left="1in" margin-right=".5in" margin-top=".5in"
page-width="8.5in" page-height="11in" master-name="Mail">
<fo:region-body/>
<fo:region-after extent="1.6in"/>
</fo:simple-page-master>
<fo:simple-page-master margin-left=".5in" margin-right=".5in" margin-top=".5in" margin-bottom=".5in"
page-width="8.5in" page-height="11in" master-name="Fax">
<fo:region-body/>
<fo:region-after/>
</fo:simple-page-master>
</fo:layout-master-set>
<xsl:for-each select="transactionItemList/transactionItems">
<xsl:if test="deliveryInfo/deliveryMethod/type='Mail'">
<fo:page-sequence master-reference="Mail">
<fo:static-content flow-name="xsl-region-after" font-size="9pt" font-family="Univers Medium">
<fo:block-container>
<fo:table>
<fo:table-column column-number="1"/>
<fo:table-body>
<fo:table-row text-align="left" height="1in">
<fo:table-cell display-align="center">
<fo:block >
Person who ordered transcript:
</fo:block>
<fo:block >
Firstname: <xsl:value-of select="studentFirstName"/>
</fo:block>
<fo:block>
Lastname: <xsl:value-of select="studentLastName"/>
</fo:block>
...
...
...
提前感谢您的帮助。顺便说一句,我确实改变了区域之后的区域 - 但它不会起作用,因为它提到了重复的区域体。我删除了区域后,我收到错误。
答案 0 :(得分:1)
在FO文件中,fo:layout-master-set
部分定义了页面几何:
fo:simple-page-master
描述一种类型的页面:宽度,高度,边距,最重要的是页面区域,其中可以放置一些内容 ; 主定义中存在区域不需要实际放置在其中的内容; fo:page-sequence-master
允许定义必须如何使用不同的fo:simple-page-master
来创建页面(例如,在奇数页和偶数页之间交替,具有不同的边距和区域)。< / LI>
fo:page-sequence
元素定义内容:
fo:static-content
定义放置在边区域内的一段内容,并在包含该区域的每个页面中重复(fo:page-number
和fo:retrieve-marker
即可用于插入变量内容); fo:flow
定义了分页的主要内容。每个fo:page-sequence
引用一个页面主页,其fo:static-content
和fo:flow
被映射(显式或依赖于默认值)到特定区域。
您的页面布局定义了两个名为xsl-region-body
和xsl-region-after
的区域(这些是默认名称); fo:flow
内的主要内容映射到xsl-region-body
,而定义某种标题的静态内容则映射到xsl-region-after
。
如果你想要旧的&#34;页面标题&#34;要在主要内容之前只显示一次而不是在每个页面的顶部重复,您必须删除fo:static-content
,在现有元素之前将其内容移动到fo:flow
内。
你会有这样的事情:
<fo:page-sequence master-reference="Mail">
<fo:flow flow-name="xsl-region-body" font-size="9pt" font-family="Univers Medium">
<!-- content moved from the old static content -->
<fo:block-container>
<fo:table>
<fo:table-column column-number="1"/>
<fo:table-body>
<fo:table-row text-align="left" height="1in">
<fo:table-cell display-align="center">
<fo:block >
Person who ordered transcript:
</fo:block>
...
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:block-container>
<!-- the old flow content -->
...
</fo:flow>
</fo:page-sequence>
答案 1 :(得分:0)
似乎值得一读XSL-FO规范:http://www.w3.org/TR/xsl11/。
您可以避免完全阅读,以下是您的问题的关键部分:关于<fo:region-body>
或<fo:region-after>
,请参阅§6.4.13 fo:simple-page-master ,它解释和描述了页面布局模型。
回答你的问题: 1)基本上,region-body是文档的主要部分,region-after将是footer(类似地,你将有一个区域 - 在此之前对应于标题)。您在此处找到的元素旨在将属性(边距,边框,...)设置为可以输出文本的页面区域。 page-master用于定义文档的全局分页属性。
2)是的,xsl-region-after是一个预定义的命名(据我所知,这些名称可以重新定义,但xsl-region-after等是可以直接使用的默认名称)。有关详细信息,请参阅上面提到的规范的§6.4.1.4流程和流程映射。
最后:为了解决您的问题并在正文部分中插入“名称”,您需要将其插入到<fo:flow flow-name="xsl-region-body">
之后,您会在<fo:static flow-name="....">
序列中找到它}。