XSLT生成的Apache FOP动态的行和列 [英] XSLT Generate Dynamic Rows and Columns for Apache FOP
问题描述
有关下面的XML文件,我需要生成一个XSL-FO文件转换成PDF格式。
我是新来的样式表,并努力创建动态表。请帮助。
此外,每列的宽度变化的基础上,将column.How包括我这到code?
列标题和列值动态填充在XML文件中。下面是一个示例。
任何人可以请生成XSL-FO或XSLT code帮忙吗?
<?XML版本=1.0编码=UTF-8独立=YES&GT?;
< ReportData> < ColumnHeaders>
<&的columnHeader GT;
<名称>西-头1< /名称>
&所述;宽度大于5&下; /长度与GT;
< /&的columnHeader GT;
<&的columnHeader GT;
<名称>西-头2< /名称>
&所述;宽度大于10&下; /长度与GT;
< /&的columnHeader GT;
<&的columnHeader GT;
<名称>西-Header3< /名称>
&所述;宽度→8&下; /长度与GT;
< /&的columnHeader GT;
< / ColumnHeaders><行和GT;
<行>
<列> ROW1-COL1< /列>
<列> ROW1-col2的< /列>
<列> ROW1-COL3< /列>
< /行>
<行>
<列>的Row2-COL1< /列>
<列>的Row2-col2的< /列>
<列>的Row2-COL3< /列>
< /行>
< /行和GT;
< / ReportData>
这应该让你开始。我用厘米
的列宽和页面为11X 8.5(风景),因此该表将适合在页面上。这应该是很容易为你改变。
XML输入(固定为良构)
< ReportData> < ColumnHeaders>
<&的columnHeader GT;
<名称>西-头1< /名称>
&所述;宽度大于5&下; /宽度>
< /&的columnHeader GT;
<&的columnHeader GT;
<名称>西-头2< /名称>
&所述;宽度大于10&下; /宽度>
< /&的columnHeader GT;
<&的columnHeader GT;
<名称>西-Header3< /名称>
&所述;宽度→8&下; /宽度>
< /&的columnHeader GT;
< / ColumnHeaders> <行和GT;
<行>
<列> ROW1-COL1< /列>
<列> ROW1-col2的< /列>
<列> ROW1-COL3< /列>
< /行>
<行>
<列>的Row2-COL1< /列>
<列>的Row2-col2的< /列>
<列>的Row2-COL3< /列>
< /行>
< /行和GT;
< / ReportData>
XSLT 1.0
<的xsl:样式版本=1.0的xmlns:XSL =http://www.w3.org/1999/XSL/Transform的xmlns:FO =HTTP: //www.w3.org/1999/XSL/Format\">
< XSL:输出缩进=YES/>
< XSL:带状空间元素=*/> <的xsl:模板匹配=/>
< FO:根>
< FO:布局主集>
< FO:简单页面法师-NAME =我的页面页面高度=8.5in页宽=11英寸>
< FO:区域体余量=1英寸的margin-top =1.5英寸保证金底=1.5英寸/>
< / FO:简单页主>
< / FO:布局主集>
< FO:页序主基准=我的页面>
< FO:流流NAME =XSL-区体>
< XSL:申请模板/>
< / FO:流程>
< / FO:页序>
< / FO:根>
< / XSL:模板> <的xsl:模板匹配=ReportData>
< FO:表>
< FO:表头>
< FO:表行>
< XSL:申请模板选择=ColumnHeaders /的columnHeader/>
< / FO:表行>
< / FO:表头>
< FO:表体>
< XSL:申请模板选择=行/列/>
< / FO:表体>
< / FO:表>
< / XSL:模板> <的xsl:模板匹配=的columnHeader>
< FO:表单元格的宽度={}宽度厘米BORDER =纯黑1px的填充=2px的字体体重=大胆的text-align =中心>
< FO:块GT;<的xsl:value-of的选择=名称/>< / FO:块GT;
< / FO:表电池>
< / XSL:模板> <的xsl:模板匹配=行>
< FO:表行>
< XSL:申请模板/>
< / FO:表行>
< / XSL:模板> <的xsl:模板匹配=列>
< FO:表单元格边框=纯黑1px的填充=2px的>
< FO:块GT;<的xsl:value-of的选择= />< / FO。:块GT;
< / FO:表电池>
< / XSL:模板>< / XSL:样式>
XSL-FO输出
< FO:根的xmlns:FO =http://www.w3.org/1999/XSL/Format>
< FO:布局主集>
< FO:简单页面法师-NAME =我的页面页面高度=8.5in页宽=11英寸>
< FO:区域体余量=1英寸的margin-top =1.5英寸保证金底=1.5英寸/>
< / FO:简单页主>
< / FO:布局主集>
< FO:页序主基准=我的页面>
< FO:流流NAME =XSL-区体>
< FO:表>
< FO:表头>
< FO:表行>
< FO:表单元格的宽度=5厘米
BORDER =纯黑1px的
填充=2px的
字体体重=大胆
的text-align =中心>
< FO:块GT;西-头1< / FO:块GT;
< / FO:表电池>
< FO:表单元格的宽度=10厘米
BORDER =纯黑1px的
填充=2px的
字体体重=大胆
的text-align =中心>
< FO:块GT;西-头2< / FO:块GT;
< / FO:表电池>
< FO:表单元格的宽度=8厘米
BORDER =纯黑1px的
填充=2px的
字体体重=大胆
的text-align =中心>
< FO:块GT;西-Header3< / FO:块GT;
< / FO:表电池>
< / FO:表行>
< / FO:表头>
< FO:表体>
< FO:表行>
< FO:表单元格边框=纯黑1px的填充=2px的>
< FO:块GT; ROW1-COL1< / FO:块GT;
< / FO:表电池>
< FO:表单元格边框=纯黑1px的填充=2px的>
< FO:块GT; ROW1-col2的< / FO:块GT;
< / FO:表电池>
< FO:表单元格边框=纯黑1px的填充=2px的>
< FO:块GT; ROW1-COL3< / FO:块GT;
< / FO:表电池>
< / FO:表行>
< FO:表行>
< FO:表单元格边框=纯黑1px的填充=2px的>
< FO:块GT;的Row2-COL1< / FO:块GT;
< / FO:表电池>
< FO:表单元格边框=纯黑1px的填充=2px的>
< FO:块GT;的Row2-col2的< / FO:块GT;
< / FO:表电池>
< FO:表单元格边框=纯黑1px的填充=2px的>
< FO:块GT;的Row2-COL3< / FO:块GT;
< / FO:表电池>
< / FO:表行>
< / FO:表体>
< / FO:表>
< / FO:流程>
< / FO:页序>
< / FO:根>
PDF输出
For the following xml file, i need to generate an xsl-fo file to be converted into pdf.
I am new to style sheets and struggling to create dynamic table. Please help.
Also, the width for each column varies,based on the column.How would i include this into the code?
The Column Headers and Column Values are dynamically populated in the xml file. Below is a sample.
Can anybody please help in generating xsl-fo or xslt code?
<?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>
This should get you started. I used cm
for the column width and the page is 11" x 8.5" (landscape) so the table would fit on the page. This should be easy for you to change.
XML Input (fixed to be well-formed)
<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>
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>
XSL-FO Output
<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>
PDF Output
这篇关于XSLT生成的Apache FOP动态的行和列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!