5

我正在做一个项目,该项目从另一个软件输出的 xml 数据生成 PDF 格式的发票,这些发票的一个要求是为一些节点数据创建条形码并将它们放置在表单中。理想情况下,条形码将从模板内部生成,而不是调用另一个程序来生成它们,然后让模板尝试以 PNG 或其他图像格式查找它们。

我尝试使用barcode4j 扩展,但没有结果。

<?xml version="1.0" encoding="UTF-8"?>

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"  xmlns:barcode="http://barcode4j.krysalis.org/ns" font-size="10pt">
  <fo:layout-master-set>
    <fo:simple-page-master master-name="master0" page-width="21.0cm" page-height="29.7cm" margin-top="0.0cm" margin-bottom="0.5cm" margin-left="0.5cm" margin-right="0.25cm">
      <fo:region-body region-name="body0" margin-top="0.5cm" margin-bottom="0.5cm"/>
      <fo:region-before region-name="header0" extent="1.5cm"/>
      <fo:region-after region-name="footer0" extent="1.89cm"/>
    </fo:simple-page-master>
  </fo:layout-master-set>
  <fo:page-sequence master-reference="master0">
    <fo:flow flow-name="body0">
    <xsl:variable name="CheckMaster" select="count(master_bill_of_lading/details/orders/order)"/>
    <xsl:variable name="country" select="master_bill_of_lading/header/Country"/>

  <xsl:variable name="barcode-cfg">
        <barcode>
            <code39>
                <height>16mm</height>
                <module-width>0.3mm</module-width>
                <human-readable>
                    <placement>none</placement>
                </human-readable>
            </code39>
        </barcode>
        </xsl:variable>

   <fo:block>

 <fo:instream-foreign-object>
<xsl:variable name="bc" select="barcode:generate($barcode-cfg, 123456)" />
   <xsl:copy-of select="$bc" />
 </fo:instream-foreign-object>

...

除了尝试过这个之外,任何允许我在模板中生成条形码的解决方案都将不胜感激,因为很难找到对所谓解决方案的一致在线参考。

编辑:我能够使用 FOP 扩展条码 4j 解决这个问题,它只需要您将包含的 jar 添加到 FOP 内的路径和 lib 文件夹,然后使用 fo:instream-foreign-object 块创建条形码

4

2 回答 2

5

RenderX 的免费 XSL 样式表支持大多数一维条码,这些样式表在 XSL 到 SVG 中动态处理条码。请参阅RenderX 条码 XSL。这包括您的示例显示的 3of9 条码。

于 2013-08-15T01:07:18.420 回答
0

条形码只是具有特殊字体的文本。为您需要的条形码类型获取 TrueType 条形码字体。并将条形码字体添加到 fop.xconf 字体部分中的 FOP:

    <font kerning="yes" embed-url="free3of9.ttf">
      <font-triplet name="barcode" style="normal" weight="normal"/>
    </font>

在您的 fo 中使用它,例如:

<fo:block
  font-family="barcode"
  font-size="36pt"
>*12345678*</fo:block><!-- YMMW with the * -->

这是一个使用 FOP 1.1 的旧项目,我猜它在新版本的 FOP 中应该是相似的。

于 2016-10-18T09:01:13.970 回答