2013-08-14 25 views
5

Tôi đang làm việc trên dự án tạo hóa đơn ở định dạng PDF từ đầu ra dữ liệu xml bằng một phần mềm khác và một trong các yêu cầu của các hóa đơn này là tạo mã vạch cho một số dữ liệu nút và đặt chúng trong biểu mẫu. Lý tưởng nhất, các mã vạch sẽ được tạo ra từ bên trong khuôn mẫu, thay vì gọi một chương trình khác để tạo chúng và sau đó có mẫu thử tìm chúng dưới dạng PNG hoặc một số định dạng hình ảnh khác.Tạo mã vạch trong mẫu để sử dụng với Apache FOP

Tôi đã thử sử dụng phần mở rộng barcode4j nhưng không có kết quả.

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

...

Bên cạnh đã cố gắng này, bất kỳ giải pháp cho phép tôi để tạo ra mã vạch bên trong mẫu sẽ được vô cùng đánh giá cao , vì rất khó tìm thấy các tham chiếu trực tuyến nhất quán cho các giải pháp bị cáo buộc.

Chỉnh sửa: Tôi có thể giải quyết vấn đề này bằng mã vạch mở rộng FOP4, chỉ yêu cầu bạn thêm các lọ vào thư mục đường dẫn và lib bên trong FOP rồi tạo mã vạch bằng cách sử dụng bên trong fo: instream- khối đối tượng nước ngoài

Trả lời

5

Hầu hết mã vạch 1d được hỗ trợ bởi các biểu định kiểu XSL sẵn có tự do của RenderX xử lý mã vạch khi đang bay trong XSL đến SVG. Xem RenderX Barcode XSLs. Điều này bao gồm 3of9 mã vạch mà ví dụ của bạn hiển thị.

0

Mã vạch chỉ là văn bản có phông chữ đặc biệt. Nhận phông chữ mã vạch TrueType cho loại mã vạch bạn cần. Và thêm font mã vạch đến FOP trong phần phông chữ fop.xconf:

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

Sử dụng nó trong fo của bạn như:

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

Đây là một dự án cũ sử dụng FOP 1.1, tôi đoán nó nên tương tự trong các phiên bản FOP mới hơn.

Các vấn đề liên quan