use*_*430 1 apache xslt xsl-fo apache-fop
对于以下xml文件,我需要生成一个xsl-fo文件以转换为pdf.
我是样式表的新手,并努力创建动态表.请帮忙.
此外,每列的宽度因列而异.如何将其包含在代码中?
列标题和列值在xml文件中动态填充.以下是一个示例.
任何人都可以帮助生成xsl-fo或xslt代码吗?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ReportData>
<ColumnHeaders>
<ColumnHeader>
<Name>Col-Header1</Name>
<Width>5</Length>
</ColumnHeader>
<ColumnHeader>
<Name>Col-Header2</Name>
<Width>10</Length>
</ColumnHeader>
<ColumnHeader>
<Name>Col-Header3</Name>
<Width>8</Length>
</ColumnHeader>
</ColumnHeaders>
<Rows>
<Row>
<Column>Row1-Col1</Column>
<Column>Row1-Col2</Column>
<Column>Row1-Col3</Column>
</Row>
<Row>
<Column>Row2-Col1</Column>
<Column>Row2-Col2</Column>
<Column>Row2-Col3</Column>
</Row>
</Rows>
</ReportData>
Run Code Online (Sandbox Code Playgroud)
这应该让你开始.我用于cm列宽,页面是11"x 8.5"(横向),因此表格适合页面.这应该很容易让你改变.
XML输入(固定为格式良好)
<ReportData>
<ColumnHeaders>
<ColumnHeader>
<Name>Col-Header1</Name>
<Width>5</Width>
</ColumnHeader>
<ColumnHeader>
<Name>Col-Header2</Name>
<Width>10</Width>
</ColumnHeader>
<ColumnHeader>
<Name>Col-Header3</Name>
<Width>8</Width>
</ColumnHeader>
</ColumnHeaders>
<Rows>
<Row>
<Column>Row1-Col1</Column>
<Column>Row1-Col2</Column>
<Column>Row1-Col3</Column>
</Row>
<Row>
<Column>Row2-Col1</Column>
<Column>Row2-Col2</Column>
<Column>Row2-Col3</Column>
</Row>
</Rows>
</ReportData>
Run Code Online (Sandbox Code Playgroud)
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<fo:root>
<fo:layout-master-set>
<fo:simple-page-master master-name="my-page" page-height="8.5in" page-width="11in">
<fo:region-body margin="1in" margin-top="1.5in" margin-bottom="1.5in"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="my-page">
<fo:flow flow-name="xsl-region-body">
<xsl:apply-templates/>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match="ReportData">
<fo:table>
<fo:table-header>
<fo:table-row>
<xsl:apply-templates select="ColumnHeaders/ColumnHeader"/>
</fo:table-row>
</fo:table-header>
<fo:table-body>
<xsl:apply-templates select="Rows/Row"/>
</fo:table-body>
</fo:table>
</xsl:template>
<xsl:template match="ColumnHeader">
<fo:table-cell width="{Width}cm" border="solid black 1px" padding="2px" font-weight="bold" text-align="center">
<fo:block><xsl:value-of select="Name"/></fo:block>
</fo:table-cell>
</xsl:template>
<xsl:template match="Row">
<fo:table-row>
<xsl:apply-templates/>
</fo:table-row>
</xsl:template>
<xsl:template match="Column">
<fo:table-cell border="solid black 1px" padding="2px">
<fo:block><xsl:value-of select="."/></fo:block>
</fo:table-cell>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
XSL-FO输出
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="my-page" page-height="8.5in" page-width="11in">
<fo:region-body margin="1in" margin-top="1.5in" margin-bottom="1.5in"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="my-page">
<fo:flow flow-name="xsl-region-body">
<fo:table>
<fo:table-header>
<fo:table-row>
<fo:table-cell width="5cm"
border="solid black 1px"
padding="2px"
font-weight="bold"
text-align="center">
<fo:block>Col-Header1</fo:block>
</fo:table-cell>
<fo:table-cell width="10cm"
border="solid black 1px"
padding="2px"
font-weight="bold"
text-align="center">
<fo:block>Col-Header2</fo:block>
</fo:table-cell>
<fo:table-cell width="8cm"
border="solid black 1px"
padding="2px"
font-weight="bold"
text-align="center">
<fo:block>Col-Header3</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-header>
<fo:table-body>
<fo:table-row>
<fo:table-cell border="solid black 1px" padding="2px">
<fo:block>Row1-Col1</fo:block>
</fo:table-cell>
<fo:table-cell border="solid black 1px" padding="2px">
<fo:block>Row1-Col2</fo:block>
</fo:table-cell>
<fo:table-cell border="solid black 1px" padding="2px">
<fo:block>Row1-Col3</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell border="solid black 1px" padding="2px">
<fo:block>Row2-Col1</fo:block>
</fo:table-cell>
<fo:table-cell border="solid black 1px" padding="2px">
<fo:block>Row2-Col2</fo:block>
</fo:table-cell>
<fo:table-cell border="solid black 1px" padding="2px">
<fo:block>Row2-Col3</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:flow>
</fo:page-sequence>
</fo:root>
Run Code Online (Sandbox Code Playgroud)
PDF输出
