我使用FOP 1.1从xml文档生成pdf文件。 FOP文档在http://xmlgraphics.apache.org/fop/
pdf文档生成正常。但是,我继续收到此SEVERE警告消息。我不知道如何解决这个问题。
SEVERE: Invalid property value encountered in break-after="": org.apache.fop.fo.expr.PropertyException: No conversion defined ; property:'break-after' (No context info available)
org.apache.fop.fo.expr.PropertyException: No conversion defined ; property:'break-after'
at org.apache.fop.fo.properties.PropertyMaker.make(PropertyMaker.java:446)
at org.apache.fop.fo.PropertyList.convertAttributeToProperty(PropertyList.java:413)
at org.apache.fop.fo.PropertyList.addAttributesToList(PropertyList.java:321)
at org.apache.fop.fo.FObj.processNode(FObj.java:122)
at org.apache.fop.fo.FOTreeBuilder$MainFOHandler.startElement(FOTreeBuilder.java:280)
at org.apache.fop.fo.FOTreeBuilder.startElement(FOTreeBuilder.java:175)
at org.apache.xml.serializer.ToXMLSAXHandler.closeStartTag(ToXMLSAXHandler.java:204)
at org.apache.xml.serializer.ToSAXHandler.flushPending(ToSAXHandler.java:277)
at org.apache.xml.serializer.ToXMLSAXHandler.endElement(ToXMLSAXHandler.java:243)
at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1399)
at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:393)
at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:176)
at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:393)
at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:176)
at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:393)
at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:176)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2411)
at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1374)
at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:393)
at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:176)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2411)
at org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:139)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2411)
at org.apache.xalan.templates.ElemElement.constructNode(ElemElement.java:339)
at org.apache.xalan.templates.ElemElement.execute(ElemElement.java:288)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2411)
at org.apache.xalan.templates.ElemElement.constructNode(ElemElement.java:339)
at org.apache.xalan.templates.ElemElement.execute(ElemElement.java:288)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2411)
at org.apache.xalan.templates.ElemElement.constructNode(ElemElement.java:339)
at org.apache.xalan.templates.ElemElement.execute(ElemElement.java:288)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2411)
at org.apache.xalan.templates.ElemElement.constructNode(ElemElement.java:339)
at org.apache.xalan.templates.ElemElement.execute(ElemElement.java:288)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2411)
at org.apache.xalan.templates.ElemElement.constructNode(ElemElement.java:339)
at org.apache.xalan.templates.ElemElement.execute(ElemElement.java:288)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2411)
at org.apache.xalan.templates.ElemElement.constructNode(ElemElement.java:339)
at org.apache.xalan.templates.ElemElement.execute(ElemElement.java:288)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2411)
at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1374)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2411)
at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1374)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2411)
at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1374)
at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:393)
at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:176)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2411)
at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2281)
at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1367)
at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:709)
at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1284)
at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1262)
at org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:300)
at org.apache.fop.cli.InputHandler.renderTo(InputHandler.java:130)
at org.apache.fop.cli.Main.startFOP(Main.java:177)
at org.apache.fop.cli.Main.main(Main.java:208)
我有以下代码
<xsl:template match="br">
<fo:block break-after="{@break}"></fo:block>
</xsl:template>
<xsl:attribute-set name="page.break">
<xsl:attribute name="break-after">page</xsl:attribute>
</xsl:attribute-set>
答案 0 :(得分:2)
在您展示的xsl:template
中,break-after
属性具有此属性值模板:{@break}
。
这意味着@break
的值将用于break-after
的值。如果没有@break
,则没有价值(这似乎是您的问题)。
查看您的XML输入;是否br
个元素没有break
属性(//br[not(@break)]
)?
是否真的br
元素包含break
属性(//br[@break]
)?
您可以做的是修改模板以处理两者。输出默认值,例如page
,如果有break
属性,则使用该值覆盖默认值。
您没有指定XSLT的版本,因此我将为1.0和2.0提供(未经测试的)示例。
XSLT 2.0
<xsl:template match="br">
<fo:block break-after="{if (string(@break)) then @break else 'page'}"/>
</xsl:template>
XSLT 1.0
<xsl:template match="br">
<fo:block break-after="page">
<xsl:apply-templates select="@break[string()]"/>
</fo:block>
</xsl:template>
<xsl:template match="br/@break">
<xsl:attribute name="break-after">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
另一个XSLT 1.0选项
<xsl:template match="br">
<fo:block break-after="page">
<xsl:if test="string(@break)">
<xsl:attribute name="break-after">
<xsl:value-of select="@break"/>
</xsl:attribute>
</xsl:if>
</fo:block>
</xsl:template>