2013-08-14 18 views
5

ile kullanım için bir şablon içinde barkodlar oluşturma Başka bir yazılım parçası tarafından xml veri çıktısından PDF formatında faturalar üreten bir proje üzerinde çalışıyorum ve bu faturaların gereksinimlerinden biri, bazıları için barkod oluşturmaktır düğüm verileri ve bunları formda yerleştirin. İdeal olarak, barkodlar, bunları oluşturmak için başka bir program çağırmak yerine şablonun içinden oluşturulacak ve daha sonra şablonun bunları PNG'ler veya başka bir görüntü formatı olarak bulmaya çalışacak şekilde oluşturulmalıdır.Apache FOP

Barcode4j uzantısını kullanmayı denedim, ancak sonuç yok. bu denenmiş olan Kenara

, beni şablonu içinde barkodları oluşturmasına olanak sağlar herhangi bir çözüm derece mutluluk duyacağız

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

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

... iddia edilen çözümlere tutarlı çevrimiçi referanslar bulmak son derece zordur.

Düzenleme: O zamanlar bir fo içine kullanarak bir barkod oluşturmak yalnızca FOP içindeki yolu ve lib klasörüne dahil kavanozları eklemek gerektirir FOP uzatma barcode4j kullanarak bu sorunu çözmek için başardı: instream- yabancı nesne bloğu

cevap

5

1d barkodlarının çoğu, XSL'den SVG'ye anında bir barkod işleyen RenderX'in ücretsiz olarak kullanılabilen XSL stil sayfaları tarafından desteklenir. Bakınız RenderX Barcode XSLs. Bu, örneğinizin gösterdiği 3of9 barkodu içerir.

0

Barkodlar yalnızca özel bir yazı tipine sahip metinlerdir. İhtiyacınız olan barkod türü için TrueType barkod yazı tipi alın. Ve fop.xconf yazı bölümünde züppe için barkod yazı ekleyin:

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

gibi fo kullanın:

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

Bu ödeme şekli 1.1 kullanan eski bir projedir, bunu gerektiğini tahmin ediyorum FOP'un daha yeni sürümlerinde benzer.