You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求指导:使用FOP转含person标签的XML为PDF的XSL-FO示例模板(单页单person)

实现每个<person>单独一页的XSL-FO模板示例

没问题!我刚好处理过类似的需求,给你一个完整的XSL-FO模板示例,能直接配合FOP工具把你的XML转换成每个<person>单独占一页的PDF文档。

完整XSL-FO模板代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">

  <!-- 定义页面模板:A4纸,带页眉页脚 -->
  <xsl:template name="page-template">
    <fo:simple-page-master master-name="person-page" page-width="210mm" page-height="297mm">
      <fo:region-body margin="25mm"/>
      <fo:region-before extent="15mm" margin="25mm"/>
      <fo:region-after extent="15mm" margin="25mm"/>
    </fo:simple-page-master>
  </xsl:template>

  <!-- 匹配XML根节点 -->
  <xsl:template match="/">
    <fo:root>
      <fo:layout-master-set>
        <xsl:call-template name="page-template"/>
      </fo:layout-master-set>

      <!-- 遍历每个person,生成单独的页面序列 -->
      <xsl:for-each select="resultset/person">
        <fo:page-sequence master-reference="person-page">
          <!-- 页眉:显示"个人信息" -->
          <fo:static-content flow-name="xsl-region-before">
            <fo:block font-size="14pt" font-weight="bold" text-align="center">个人信息</fo:block>
          </fo:static-content>

          <!-- 页脚:显示页码 -->
          <fo:static-content flow-name="xsl-region-after">
            <fo:block font-size="10pt" text-align="right">第 <fo:page-number/> 页</fo:block>
          </fo:static-content>

          <!-- 页面主体内容:渲染person的具体字段 -->
          <fo:flow flow-name="xsl-region-body">
            <fo:block font-size="12pt" line-height="1.5" margin-bottom="10mm">
              <fo:block font-weight="bold">姓名:</fo:block>
              <fo:block><xsl:value-of select="name"/></fo:block>
            </fo:block>
            <fo:block font-size="12pt" line-height="1.5" margin-bottom="10mm">
              <fo:block font-weight="bold">年龄:</fo:block>
              <fo:block><xsl:value-of select="age"/></fo:block>
            </fo:block>
            <fo:block font-size="12pt" line-height="1.5" margin-bottom="10mm">
              <fo:block font-weight="bold">邮箱:</fo:block>
              <fo:block><xsl:value-of select="email"/></fo:block>
            </fo:block>
            <!-- 在这里添加更多person的子字段,比如地址、电话等 -->
          </fo:flow>
        </fo:page-sequence>
      </xsl:for-each>
    </fo:root>
  </xsl:template>

</xsl:stylesheet>

关键说明

  • 分页逻辑:通过<xsl:for-each>遍历每个<person>,为每个person创建一个独立的<fo:page-sequence>,FOP会自动为每个page-sequence生成新的一页,这是最可靠的分页方式。
  • 页面布局:模板里定义了A4纸的页面大小,包含页眉和页脚,你可以根据需求调整page-width、page-height以及边距参数。
  • 内容适配:示例里假设<person>包含name、age、email子标签,你需要替换成你实际XML里的字段名称,或者添加更多的<fo:block>来渲染其他内容。

FOP命令运行示例

把你的XML文件(比如input.xml)和上面的XSL-FO模板(比如person-to-pdf.xsl)放在同一目录,然后运行以下命令生成PDF:

fop -xml input.xml -xsl person-to-pdf.xsl -output output.pdf

如果你的<person>标签结构更复杂,或者需要调整样式(比如字体、颜色、表格布局),随时告诉我,我可以帮你优化模板!

内容的提问来源于stack exchange,提问作者OOvic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:21:59