我需要在PDF文件上生成OMR标记(可以是10个小行,如'-------'),使用XSLT准备此PDF文件模板。对我而言,具有挑战性的是,根据页码,需要隐藏一些OMR线。 例如:如果pdf文件页码为1则我必须隐藏第3个OMR行,如果是第二页则必须隐藏其他OMR行等...
我认为如果我们可以将'fo:pagenumber'的值存储在一个变量中,那么我们可以编写if条件以避免不需要的行。但是我无法在变量中存储'fo:pagenumber'。
任何人都可以建议我们如何使用XSLT FO实现它?
答案 0 :(得分:2)
OMR标记通常由两个或三个不同类别的标记组成。首先考虑大多数OMR标记需要应用于大型文档包,例如1000个页面的单个长PDF,其中包含100个可能在页面大小上变化的语句。
在包中的单个文档中有基于页面位置的标记(如第一页,最后一页),数据中的某些内容可能存在特殊标记(例如帐户余额低于0美元,因此它打印在红色页面)最后有序列标记,基本上是整个包的计数0到7,0到7,0到7,与它正在处理的语句无关。高速打印机/分拣机使用这些最后标记来验证发生的事情(确保所有页面都在处理中)。
在XSL中处理此问题的最简单方法是根据相应的规则在文档中绘制前两种类型的标记。这些在页面模板母版中很容易做到,因为它们是位置(第一个/最后一个)或基于某些XPATH数据表达式,如" accountval< 0"
我们在解决方案中所做的是在所有其他位置放置标记 - 即每隔0到7标记放下一个标记。大多数所有FO处理器都支持将fo文件处理为中间表示,该中间表示可以从序列化为XML树结构的引擎获得。该结构包括<page>
个元素。在这里,您可以完成提醒标记的工作。
然后,这只需要通过整个包裹&#34;删除&#34;每个页面的逻辑结构使序列标记起作用。
这是您正确处理文档包的唯一方法,因为序列标记自然会跨包中的单个语句 - 您可能有2页语句,后跟10页语句,后跟3页声明,你不能猜测每个开始/结束的处理。
如果您想检查一个实现,可以下载RenderX的VDPMill应用程序。安装完成后,您将在安装中找到一个名为&#34; samples&#34;其中一个样品命名为&#34; OMR&#34;。它包含一些示例XML和XSL,显示了Pitney Bowes 8系列和ABC Office 630系列机器的OMR实现。
答案 1 :(得分:0)
对于诸如信封填充之类的用途,如果页面数量有限,您可以在fo:region-start
(http://www.w3.org/TR/xsl11/#fo_region-start)和/或fo:region-end
区域生成它们。页。
这需要为第1页,第2页等中的每一个生成两个单独的fo:simple-page-master
,每个fo:region-start
都有region-name
,其值为fo:page-sequence-master
。您需要两个,因为任何页面都可能是序列中的最后一个页面,并且需要一个不同的OMR代码来指示这一点。
您还希望fo:repeatable-page-master-alternatives
(http://www.w3.org/TR/xsl11/#fo_page-sequence-master)与最大页数一样多fo:repeatable-page-master-alternatives
。每个maximum-repeats="1"
都有fo:conditional-page-master-reference
并且包含两个<fo:repeatable-page-master-alternatives maximum-repeats="1">
<fo:conditional-page-master-reference master-reference="page1-last"
page-position="last" />
<fo:conditional-page-master-reference master-reference="page1" />
</fo:repeatable-page-master-alternatives>
...
- 一个用于页面是最后一页,另一个用于何时它不是,例如:
fo:page-sequence/@master-reference
您的master-name
会引用fo:page-sequence-master
的{{1}}。
最后,您必须为fo:static-content
中每个唯一命名的fo:region-start
生成带有正确OMR标记的fo:simple-page-master
。
不幸的是,如果您使用OMR标记来指示页面序列,并且您需要以与页码相反的顺序指示OMR序列,或者您必须在fo:page-sequence
之间继续OMR序列,那么这方法不会帮助你。