使用JDOM处理XML数据之PDF篇(二)
XML文件的代码和
http://www.csdn.net/Develop/read_article.asp?id=20733 相同
格式转换的XSLT-FO文件的代码如下:
watchlist.pdf.xsl
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
>
<xsl:template match ="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<!-- defines page layout -->
<fo:layout-master-set>
<fo:simple-page-master master-name="simple"
page-height="29.7cm"
page-width="21cm"
margin-top="1.5cm"
margin-bottom="2cm"
margin-left="2.5cm"
margin-right="2.5cm">
<fo:region-body margin-top="3cm"/>
<fo:region-before extent="1.5cm"/>
<fo:region-after extent="1.5cm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<!-- defines the content -->
<fo:page-sequence master-name="simple">
<fo:static-content flow-name="xsl-region-before">
<fo:block text-align="end"
font-size="10pt"
font-family="serif"
line-height="14pt" >
Watch List - Customer #<xsl:value-of select="./quote-list/customer/@id"/>
</fo:block>
</fo:static-content>
<fo:flow flow-name="xsl-region-body">
<fo:block font-size="16pt"
font-family="sans-serif"
font-weight="bold"
line-height="26pt"
space-after.optimum="12pt"
background-color="blue"
color="white"
text-align="center">
Your Stock Watch List
</fo:block>
<fo:block font-size="12pt"
font-family="sans-serif"
font-weight="bold"
line-height="18pt"
space-after.optimum="10pt"
start-indent="10pt">
Hello, <xsl:value-of select="./quote-list/customer/@first-name"/>
</fo:block>
<fo:block font-size="10pt"
font-family="sans-serif"
font-style="italic"
line-height="18pt"
space-after.optimum="10pt"
start-indent="15pt">
Prices were obtained at <xsl:value-of select="./quote-list/@time"/> on <xsl:value-of select="./quote-list/@date"/>
</fo:block>
<fo:table>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="7cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-header font-size="10pt"
line-height="14pt"
font-family="sans-serif">
<fo:table-row font-weight="bold">
<fo:table-cell text-align="start">
<fo:block>SYMBOL</fo:block>
</fo:table-cell>
<fo:table-cell text-align="start">
<fo:block>COMPANY NAME</fo:block>
</fo:table-cell>
<fo:table-cell text-align="start">
<fo:block>SHARE PRICE</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-header>
<fo:table-body font-size="10pt"
line-height="16pt"
font-family="sans-serif">
<xsl:for-each select="//quote">
<fo:table-row>
<fo:table-cell>
<fo:block text-align="start" >
<xsl:value-of select="@symbol"/>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block text-align="start" >
<xsl:value-of select="@name"/>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block text-align="start" >
$ <xsl:value-of select="./price[@currency='USD']/@amount"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:for-each>
</fo:table-body>
</fo:table>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
</xsl:stylesheet>
最后我们在一个JSP文件中来调用这个javabean:
pdfWriter.jsp
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page import="org.jdom.*" %>
<%@ page import="org.jdom.output.*" %>
<%@ page import="org.jdom.input.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="XML.*" %>
<%
String aa=getServletContext().getRealPath("/")+"j2ee_xml\\";
String fileName="watchlist.xml";
String trace=aa+fileName;
String styleName="watchlist.pdf.xsl";
String styleTrace=aa+styleName;
String resultName="aa.pdf";
String resultTrace=aa+resultName;
XML.PDFWriter PDFWriter = new XML.PDFWriter();
try {
PDFWriter.createPDFFromXML(styleTrace,trace, resultTrace);
} catch (Exception e) {
System.out.println(e.getMessage());
}
%>
aa.pdf就是格式化后的结果。
到现在使用XML数据的三种方式都介绍过了:
直接读取:http://www.csdn.net/Develop/read_article.asp?id=20720
使用XSLT转化成HTML:http://www.csdn.net/Develop/read_article.asp?id=20733
和这篇里介绍的使用XSL-FO转化成二进制格式。