【揭秘XSL-FO】輕鬆實現高效PDF導出的秘密技巧

提問者:用戶DCCP 發布時間: 2025-06-08 02:37:05 閱讀時間: 3分鐘

最佳答案

在電子商務跟財務體系中,生陳標準化的發票 PDF 文件是一個罕見須要。XSL-FO(Extensible Stylesheet Language Formatting Objects)供給了一種富強的方法來計劃跟生成格局標準的發票 PDF。本文將深刻探究怎樣利用 XSL-FO 構建電子發票的 PDF 文件,並供給一些優化規劃的倡議。

為什麼抉擇 XSL-FO?

XSL-FO 是 W3C 的標準,用於將 XML 文檔格局化為 PDF、PostScript 等格局的高品質輸出文檔。它特別合適構造化數據的排版須要。結合 Apache FOP(Formatting Objects Processor)等東西,我們可能從 XML 模板生成發票 PDF。

1. 初始設置

起首,在根節點 <fo:root> 中設置頁面規劃:

<fo:root>
  <fo:layout-master-set>
    <fo:simple-page-master master-name="invoice">
      <fo:region-body margin="5mm"/>
    </fo:simple-page-master>
  </fo:layout-master-set>
</fo:root>

這裡指定了頁面的邊距跟規劃,便於後續的內容排版。

2. 標題區塊

發票的頂部平日包含公司標記跟發票標題。以下是一個示例:

<fo:block font-size="16pt" font-weight="bold" margin-bottom="10mm">
  <fo:external-graphic src="company-logo.png" width="100mm"/>
  <fo:table>
    <fo:table-body>
      <fo:table-row>
        <fo:table-cell>
          <fo:block font-size="14pt">發票</fo:block>
        </fo:table-cell>
      </fo:table-row>
    </fo:table-body>
  </fo:table>
</fo:block>

3. 買賣方信息

接上去,增加買賣方的信息:

<fo:block margin-bottom="10mm">
  <fo:block font-weight="bold">買方信息:</fo:block>
  <fo:block>公司稱號:XXX無限公司</fo:block>
  <fo:block>地點:XXX街道XXX號</fo:block>
  <!-- 更多買方信息 -->
</fo:block>

<fo:block margin-bottom="10mm">
  <fo:block font-weight="bold">賣方信息:</fo:block>
  <fo:block>公司稱號:YYY無限公司</fo:block>
  <fo:block>地點:YYY街道YYY號</fo:block>
  <!-- 更多賣方信息 -->
</fo:block>

4. 商品明細表格

商品明細是發票的核心部分。以下是一個簡單的表格示例:

<fo:table width="100%">
  <fo:table-body>
    <fo:table-row>
      <fo:table-cell>商品稱號</fo:table-cell>
      <fo:table-cell>數量</fo:table-cell>
      <fo:table-cell>單價</fo:table-cell>
      <fo:table-cell>總價</fo:table-cell>
    </fo:table-row>
    <!-- 更多商操行 -->
  </fo:table-body>
</fo:table>

5. 合計信息

在商品明細之後,增加合計信息:

<fo:block margin-top="10mm" margin-bottom="10mm">
  <fo:block font-weight="bold">合計:</fo:block>
  <fo:block>總金額:XXX元</fo:block>
</fo:block>

6. 優化代碼構造與規劃

確保你的 XSL-FO 代碼存在精良的構造跟可讀性。利用縮進跟注釋來進步代碼的可保護性。

7. 生成 PDF 文件

利用 Apache FOP 等東西將 XSL-FO 轉換為 PDF。以下是一個簡單的命令行示例:

java -jar fop-2.x.x.jar -fo input.fo -pdf output.pdf

8. 示例

以下是一個完全的 XSL-FO 示例:

<fo:root>
  <fo:layout-master-set>
    <fo:simple-page-master master-name="invoice">
      <fo:region-body margin="5mm"/>
    </fo:simple-page-master>
  </fo:layout-master-set>
  <fo:page-sequence master-reference="invoice">
    <fo:flow flow-name="xsl-region-body">
      <fo:block font-size="16pt" font-weight="bold" margin-bottom="10mm">
        <fo:external-graphic src="company-logo.png" width="100mm"/>
        <fo:table>
          <fo:table-body>
            <fo:table-row>
              <fo:table-cell>
                <fo:block font-size="14pt">發票</fo:block>
              </fo:table-cell>
            </fo:table-row>
          </fo:table-body>
        </fo:table>
      </fo:block>
      <fo:block margin-bottom="10mm">
        <fo:block font-weight="bold">買方信息:</fo:block>
        <fo:block>公司稱號:XXX無限公司</fo:block>
        <fo:block>地點:XXX街道XXX號</fo:block>
        <!-- 更多買方信息 -->
      </fo:block>
      <fo:block margin-bottom="10mm">
        <fo:block font-weight="bold">賣方信息:</fo:block>
        <fo:block>公司稱號:YYY無限公司</fo:block>
        <fo:block>地點:YYY街道YYY號</fo:block>
        <!-- 更多賣方信息 -->
      </fo:block>
      <fo:table width="100%">
        <fo:table-body>
          <fo:table-row>
            <fo:table-cell>商品稱號</fo:table-cell>
            <fo:table-cell>數量</fo:table-cell>
            <fo:table-cell>單價</fo:table-cell>
            <fo:table-cell>總價</fo:table-cell>
          </fo:table-row>
          <!-- 更多商操行 -->
        </fo:table-body>
      </fo:table>
      <fo:block margin-top="10mm" margin-bottom="10mm">
        <fo:block font-weight="bold">合計:</fo:block>
        <fo:block>總金額:XXX元</fo:block>
      </fo:block>
    </fo:flow>
  </fo:page-sequence>
</fo:root>

經由過程以上步調,你可能輕鬆利用 XSL-FO 生成專業級的 PDF 發票。

相關推薦