求指导:使用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
相关产品推荐
相关产品推荐

