我只有XSL-FO文档没有客户端提供的源XML文件,我应该通过从我的数据库为这个XSL-fo文件赋值来生成PDF。
我的问题是, 1.在没有源XML文件的情况下仅使用XSL-FO是否考虑了正常开发,或者我应该问他们用来转换和制作此XSL-FO的源XML的XML模式?
在下面的文章中,作者说: "典型的XSLFO生成将使用XSLT样式表来自我们的XML,尽管根本不需要这样。我们的应用程序可能需要以分页形式表达信息,这些应用程序可以直接生成XSLFO词汇表的实例,以便为输出介质进行解释。" 资料来源:http://www.xml.com/lpt/a/939
2.如何有效地为以@符号开头的属性赋值,例如@agencyType等。
3您建议哪个库使用XSL-Fo生成PDF?
以下是我拥有的XSL文件的示例:
xsl:when test="@paymentType=5 or @paymentType=8"/>
<xsl:when test="parent::node()/@isCopy='true' "/>
<xsl:when test="@agencyType='3' "/>
<xsl:when test="@separateAgencyCommissionInvoiceNumber!='' "/>
<xsl:when test="@differentShipmentAddress='true' ">
<fo:page-sequence master-reference="Rechnung">
<fo:static-content flow-name="xsl-region-before" font-family="Verdana" font-size="8.5pt" line-height="10pt">
<fo:block-container width="17cm" height="2cm" top="-3mm" left="0cm" position="absolute">
<fo:block font-family="CourierNew" font-size="1pt" line-height="6pt">
<xsl:variable name="headerLine1">
<xsl:value-of select="translate(../InserterHeaderLine/@headerLine1,'A1U','A1 ')"/>
</xsl:variable>
<xsl:value-of select="translate($headerLine1,' ','~')"/>
</fo:block>
<fo:block font-family="CourierNew" font-size="1pt" line-height="6pt">
<xsl:value-of select="translate(../InserterHeaderLine/@headerLine2,' ','~')"/>
</fo:block>
<fo:block font-family="CourierNew" font-size="1pt" line-height="6pt">
<xsl:value-of select="translate(../InserterHeaderLine/@headerLine3,' ','~')"/>
</fo:block>
</fo:block-container>
</fo:static-content>
<fo:flow flow-name="xsl-region-body" font-size="9pt" font-family="Verdana">
<!-- abweichende Rechnungsanschrift -->
<fo:block-container width="9cm" height="4cm" top="2.4cm" left="0cm" position="absolute">
<fo:block>
<xsl:value-of select="@shipmentName1Line"/>
</fo:block>
<fo:block>
<xsl:value-of select="@shipmentName2Line"/>
</fo:block>
<fo:block>
<xsl:value-of select="@shipmentName3Line"/>
</fo:block>
<fo:block>
<xsl:value-of select="@shipmentAddress1Line"/>
</fo:block>
<fo:block> </fo:block>
<fo:block>
<xsl:value-of select="@shipmentAddress2Line"/>
</fo:block>
<fo:block>
<xsl:value-of select="@shipmentAddress3Line"/>
</fo:block>
</fo:block-container>
</fo:flow>
</fo:page-sequence>
感谢您的帮助!
答案 0 :(得分:0)
根据您上面显示的示例,您有一个&#34; XSL&#34;文件(不是&#34; XSL FO&#34;文件)。您可以(a)检查XSL并确定适合它的XML文件,或者(b)我很惊讶给你XSL的人没有样本XML文件,从中获取它。
然后从匹配它的数据库生成XML。这可以通过许多工具完成,RenderX有一个名为DB2XML的免费工具,或者您可以查看来自Altova或其他供应商的工具。