生成 PDF 期间块容器出现 XSL-FO 错误
Posted
技术标签:
【中文标题】生成 PDF 期间块容器出现 XSL-FO 错误【英文标题】:XSL-FO error with block-container during generation PDF 【发布时间】:2017-11-22 18:11:53 【问题描述】:当我尝试使用文件 XSL-FO 生成 PDF 时遇到问题。 我的 XSL:
`
fo:block-container position="absolute" absolute-position="absolute" top="49mm" left="24mm" >
<fo:block>
<fo:table>
<fo:table-column column-/>
<fo:table-column column-/>`
<fo:table-body>
<fo:table-row >
<fo:table-cell xsl:use-attribute-sets="box" number-rows-spanned="2">
<fo:block>
<xsl:attribute name="font-weight">bold</xsl:attribute>
<xsl:attribute name="text-align">center</xsl:attribute>
<xsl:value-of select="NewDataSet/Interface/dossier_num"/> <xsl:value-of select="NewDataSet/Dossier/no_dossier"/>
</fo:block>
<fo:block>
<fo:table>
<fo:table-column />
<fo:table-body>
<fo:table-row>
<fo:table-cell>
<fo:block font-size="8pt">
<xsl:attribute name="text-align">left</xsl:attribute>
<xsl:value-of select="NewDataSet/Interface/code_produit"/><xsl:text>: </xsl:text>
<xsl:value-of select="NewDataSet/Table/code_produit"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell>
<fo:block font-size="8pt">
<xsl:attribute name="text-align">left</xsl:attribute>
<xsl:value-of select="NewDataSet/Interface/modele"/><xsl:text>: </xsl:text>
<xsl:value-of select="NewDataSet/Table/modele"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell>
<fo:block font-size="8pt">
<xsl:attribute name="text-align">left</xsl:attribute>
<xsl:value-of select="NewDataSet/Interface/provenance"/><xsl:text>: </xsl:text>
<xsl:value-of select="NewDataSet/Table/mag_depot"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell>
<fo:block font-size="8pt">
<xsl:attribute name="text-align">left</xsl:attribute>
<xsl:value-of select="NewDataSet/Interface/numero_serie"/><xsl:text>: </xsl:text>
<xsl:value-of select="NewDataSet/Table/serie"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell>
<fo:block font-size="8pt">
<xsl:attribute name="text-align">left</xsl:attribute>
<xsl:value-of select="NewDataSet/Interface/garantie"/><xsl:text>: </xsl:text>
<xsl:choose>
<xsl:when test="/NewDataSet/Table/sous_garantie='true'"><xsl:value-of select="NewDataSet/Interface/oui"/></xsl:when>
<xsl:otherwise><xsl:value-of select="NewDataSet/Interface/non"/></xsl:otherwise>
</xsl:choose>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell>
<fo:block font-size="8pt">
<xsl:attribute name="text-align">left</xsl:attribute>
<xsl:value-of select="NewDataSet/Interface/marque"/><xsl:text>: </xsl:text>
<xsl:value-of select="NewDataSet/Table/marque"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell>
<fo:block font-weight="bold" text-align="right">
<xsl:value-of select="NewDataSet/Table/nom"/><xsl:text> </xsl:text>
<xsl:value-of select="NewDataSet/Table/prenom"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:table>
<fo:table-column column-/>
<fo:table-column column-/>
<fo:table-body>
<fo:table-row >
<fo:table-cell display-align="center">
<fo:block font-weight="bold" text-align="center">
<xsl:value-of select="NewDataSet/Dossier/no_dossier"/>
</fo:block>
<fo:block font-weight="bold" text-align="center">
<xsl:value-of select="NewDataSet/Table/code_produit"></xsl:value-of>
</fo:block>
</fo:table-cell>
<fo:table-cell display-align="center">
<fo:block font-weight="bold" text-align="center">
<xsl:value-of select="NewDataSet/Dossier/no_dossier"/>
</fo:block>
<fo:block font-weight="bold" text-align="center">
<xsl:value-of select="NewDataSet/Table/code_produit"></xsl:value-of>
</fo:block>
</fo:table-cell>
</fo:table-row >
<fo:table-row >
<fo:table-cell display-align="center">
<fo:block font-weight="bold" text-align="center">
<xsl:value-of select="NewDataSet/Dossier/no_dossier"/>
</fo:block>
<fo:block font-weight="bold" text-align="center">
<xsl:value-of select="NewDataSet/Table/code_produit"></xsl:value-of>
</fo:block>
</fo:table-cell>
<fo:table-cell display-align="center">
<fo:block font-weight="bold" text-align="center">
<xsl:value-of select="NewDataSet/Dossier/no_dossier"/>
</fo:block>
<fo:block font-weight="bold" text-align="center">
<xsl:value-of select="NewDataSet/Table/code_produit"></xsl:value-of>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
`</fo:block>
</fo:block-container>
`
我有这个错误: 在“org.apache.fop.layout.AreaContainer”类型上的“org.apache.fop.layout.BlockArea”类型的不可能投射对象
当我尝试在使用相同 dll (apachefop.net) 的其他项目中生成时,我没有错误。 我怎样才能替换这个节点?我该如何解决这个问题?
谢谢
【问题讨论】:
【参考方案1】:您将 fo:table 作为 fo:table-cell 的子级。将该表包装在一个块中。
【讨论】:
您好,我可以删除 fo:block-container 中的所有内容,我也有同样的问题。但是,当我删除块容器时,问题就消失了。以上是关于生成 PDF 期间块容器出现 XSL-FO 错误的主要内容,如果未能解决你的问题,请参考以下文章