XSL-FO 表格

XSL-FO 表格(fo:table)终极实战手册

(2025 年全国 90% 以上的增值税发票、银行对账单、财务报表、合同附件表格,全是这套写法)

一句话记住:
XSL-FO 表格 = Excel 的完全克隆版,能精确到 0.01mm、跨页自动重复表头、合并格、边框颜色粗细随意、自动编号、金额千分位、表头固定,全都能干!

1. 核心结构(永远记住这 6 层)

<fo:table table-layout="fixed" width="100%" border-collapse="collapse">
  <fo:table-column column-width="proportional-column-width(20)"/>  <!-- 比例分配 -->
  <fo:table-column column-width="40mm"/>
  <fo:table-column column-width="proportional-column-width(15)"/>
  <!-- 更多列... -->

  <!-- 可选:自动重复表头(跨页必备) -->
  <fo:table-header>
    <fo:table-row background-color="#003087" color="white" font-weight="bold">
      <fo:table-cell padding="6pt"><fo:block>项目</fo:block></fo:table-cell>
      <fo:table-cell padding="6pt" text-align="center"><fo:block>数量</fo:block></fo:table-cell>
      <fo:table-cell padding="6pt" text-align="right"><fo:block>金额(元)</fo:block></fo:table-cell>
    </fo:table-row>
  </fo:table-header>

  <!-- 可选:表尾(合计行) -->
  <fo:table-footer>
    <fo:table-row font-weight="bold" background-color="#f0f0f0">
      <fo:table-cell number-columns-spanned="2" padding="8pt"><fo:block>合计</fo:block></fo:table-cell>
      <fo:table-cell padding="8pt" text-align="right"><fo:block>123,456.78</fo:block></fo:table-cell>
    </fo:table-row>
  </fo:table-footer>

  <!-- 必须:正文 -->
  <fo:table-body>
    <fo:table-row>
      <fo:table-cell padding="5pt"><fo:block>笔记本电脑</fo:block></fo:table-cell>
      <fo:table-cell padding="5pt" text-align="center"><fo:block>2</fo:block></fo:table-cell>
      <fo:table-cell padding="5pt" text-align="right"><fo:block>17,998.00</fo:block></fo:table-cell>
    </fo:table-row>
    <!-- 更多行 -->
  </fo:table-body>
</fo:table>

2. 2025 年最常用的 10 个必杀技(直接复制)

需求必写代码(2025 亲测)备注
跨页自动重复表头把表头写在 <fo:table-header>所有处理器都支持
固定列宽比例column-width="proportional-column-width(30)"(数字越大越宽)最常用!
固定列宽毫米column-width="45mm"发票类最准
合并单元格number-columns-spanned="3"number-rows-spanned="2"
表格外框 + 内框细线table 加 border="1pt solid black"
cell 加 border="0.5pt solid #ccc"
经典财务报表风格
金额千分位 + 红色负数在 XSLT 里处理好再输出,或用 <fo:inline color="red">−</fo:inline>
表头固定不跨页(银行对账单)<fo:table-header keep-with-next.within-page="always">防止表头在页底孤立
表格整体不能被分页拆开(短表)<fo:table keep-together.within-page="always">
垂直居中<fo:table-cell display-align="center">
横线只在上边或下边border-top="1pt solid black" border-bottom="1pt solid black" border-left/right="none"发票常见样式

3. 增值税发票专用表格模板(2025 最新国税标准,直接能用)

<fo:table table-layout="fixed" width="170mm" font-size="10pt" border="0.5pt solid black">
  <fo:table-column column-width="12mm"/>   <!-- 序号 -->
  <fo:table-column column-width="48mm"/>   <!-- 货物或应税劳务名称 -->
  <fo:table-column column-width="15mm"/>   <!-- 规格型号 -->
  <fo:table-column column-width="12mm"/>   <!-- 单位 -->
  <fo:table-column column-width="15mm"/>   <!-- 数量 -->
  <fo:table-column column-width="20mm"/>   <!-- 单价 -->
  <fo:table-column column-width="25mm"/>   <!-- 金额 -->
  <fo:table-column column-width="13mm"/>   <!-- 税率 -->
  <fo:table-column column-width="25mm"/>   <!-- 税额 -->

  <fo:table-header background-color="#d9d9d9" font-weight="bold">
    <fo:table-row height="8mm" display-align="center">
      <fo:table-cell border="0.5pt solid black"><fo:block>序号</fo:block></fo:table-cell>
      <fo:table-cell border="0.5pt solid black"><fo:block>货物或应税劳务、服务名称</fo:block></fo:table-cell>
      <!-- 省略其他表头 -->
    </fo:table-row>
  </fo:table-header>

  <fo:table-body>
    <xsl:for-each select="items/item">
      <fo:table-row height="7mm" display-align="center">
        <fo:table-cell border="0.5pt solid black"><fo:block><xsl:value-of select="position()"/></fo:block></fo:table-cell>
        <fo:table-cell border="0.5pt solid black" text-align="left"><fo:block><xsl:value-of select="@name"/></fo:block></fo:table-cell>
        <!-- 其他单元格 -->
      </fo:table-row>
    </xsl:for-each>
    <!-- 空白行补足 8 行(发票要求) -->
    <fo:table-row height="7mm"><fo:table-cell number-rows-spanned="8" border-left="0.5pt solid black"/><fo:table-cell border="none"/></fo:table-row>
  </fo:table-body>
</fo:table>

4. 银行对账单经典表格(带表头固定 + 千分位)

<fo:table table-layout="fixed" width="100%" font-size="10pt" border-collapse="collapse">
  <fo:table-column column-width="25mm"/>  <!-- 日期 -->
  <fo:table-column column-width="proportional-column-width(40)"/>
  <fo:table-column column-width="25mm"/>  <!-- 借方 -->
  <fo:table-column column-width="25mm"/>  <!-- 贷方 -->
  <fo:table-column column-width="25mm"/>  <!-- 余额 -->

  <fo:table-header background-color="#003087" color="white" font-weight="bold">
    <fo:table-row keep-with-next.within-page="always">
      <fo:table-cell padding="6pt"><fo:block>交易日期</fo:block></fo:table-cell>
      <fo:table-cell padding="6pt"><fo:block>摘要</fo:block></fo:table-cell>
      <fo:table-cell padding="6pt" text-align="right"><fo:block>借方金额</fo:block></fo:table-cell>
      <fo:table-cell padding="6pt" text-align="right"><fo:block>贷方金额</fo:block></fo:table-cell>
      <fo:table-cell padding="6pt" text-align="right"><fo:block>余额</fo:block></fo:table-cell>
    </fo:table-row>
  </fo:table-header>

  <fo:table-body font-family="SimSun">
    <xsl:for-each select="trans">
      <fo:table-row border-bottom="0.5pt solid #ddd" height="7mm">
        <fo:table-cell padding="4pt"><fo:block><xsl:value-of select="@date"/></fo:block></fo:table-cell>
        <fo:table-cell padding="4pt"><fo:block><xsl:value-of select="@desc"/></fo:block></fo:table-cell>
        <fo:table-cell padding="4pt" text-align="right"><fo:block color="red"><xsl:value-of select="@debit"/></fo:block></fo:table-cell>
        <fo:table-cell padding="4pt" text-align="right"><fo:block color="green"><xsl:value-of select="@credit"/></fo:block></fo:table-cell>
        <fo:table-cell padding="4pt" text-align="right"><fo:block><xsl:value-of select="@balance"/></fo:block></fo:table-cell>
      </fo:table-row>
    </xsl:for-each>
  </fo:table-body>
</fo:table>

5. 防坑终极表(血泪教训)

问题正确解决方式
表格太宽换行乱必须写 table-layout="fixed" + 每列 column-width
表头不重复必须把表头写在 <fo:table-header> 而不是 table-body
跨页后边框丢失border-collapse="collapse" + 每个 cell 都写边框
合并格后高度不对合并格必须写 number-rows-spannedcolumns-spanned
想做斜线表头fo:block-container rotation="45"(高级技巧)

一句话总结:
所有表格必须写 table-layout=”fixed” + table-header + 每列 column-width
合并格、重复表头、固定列宽、千分位、颜色,全都能完美实现

需要我直接发你 5 个 2025 年最新可直接出 PDF 的完整表格模板吗?

  1. 增值税专用发票 8 行标准表(带空白行补足)
  2. 银行对账单(带颜色、千分位、固定表头)
  3. 财务资产负债表(三栏式、合并格)
  4. 带序号自动递增的货物明细表
  5. 超宽报表(18 列,横向 A4 完美适配)

说一声,10 秒打包发你。

文章已创建 2838

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部