2013-08-14 17 views
5

Pracuję nad projektem, który generuje faktury w formacie PDF z danych wyjściowych xml za pomocą innego oprogramowania, a jednym z wymogów tych faktur jest tworzenie kodów kreskowych dla niektórych dane węzła i umieść je w formularzu. Najlepiej byłoby, gdyby kody kreskowe były generowane z wnętrza szablonu, zamiast wywoływania innego programu w celu ich wygenerowania, a następnie aby szablon spróbował znaleźć je jako PNG lub inny format obrazu.Generowanie kodów kreskowych w szablonie do użytku z Apache FOP

Próbowałem już użyć rozszerzenia barcode4j, ale bez wyników.

<?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> 

...

Oprócz próbowałem to każde rozwiązanie, które pozwala mi do generowania kodów kreskowych w szablonie będzie niezwykle ceniona , ponieważ niezwykle trudno jest znaleźć spójne odniesienia do rzekomych rozwiązań w Internecie.

Edit: udało mi się rozwiązać ten problem za pomocą przedłużacza barcode4j FOP, która wymaga jedynie, aby dodać słoików dołączonych do ścieżki i folderu lib wewnątrz FOP następnie utworzyć kod kreskowy przy użyciu wewnątrz fo: instream- blok obcy-obiektowy

Odpowiedz

5

Większość kodów kreskowych 1d jest obsługiwana przez swobodnie dostępne arkusze stylów XSL, które przetwarzają kod kreskowy w locie w XSL na SVG. Zobacz RenderX Barcode XSLs. Obejmuje to 3 z 9 kodów kreskowych, które pokazuje twój przykład.

0

Kody kreskowe to tylko tekst ze specjalną czcionką. Uzyskaj czcionkę kodu kreskowego TrueType dla potrzebnego typu kodu kreskowego. I dodać czcionki kodu kreskowego do FOP w fop.xconf sekcji czcionek:

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

Użyj go w fo jak:

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

Jest to stary projekt przy użyciu FOP 1.1, zgaduję, że powinno być podobne w nowszych wersjach FOP.