`

xml + xslt => html => pdf

阅读更多

    继上一篇:使用java将xml格式化,本blog主要描述如何通过xslt将xml渲染为html(包含CSS),然后再

将html转为pdf.

    如果你想了解更多xslt信息,请点击链接xslt。本程序直接使用javax.xml.transform.Transformer将howto.xsl通过数据源howto.xml渲染并保存为howto.html,然后通过第三方开源软件http://code.google.com/p/flying-saucer/将生成的XHTML转换为pdf.(注意:任何标签都必须闭合,否则flying-Saucer做XML解析会报错)

     主要代码如下(程序已经上传):

    howto.xml:

<?xml version="1.0"?>
<products>
   <product href="http://www.playfield.com/text">
      <name>Playfield Text</name>
      <price currency="usd">299</price>
      <description>Faster than the competition.</description>
      <version>1.0</version>
   </product>
   <product href="http://www.playfield.com/virus">
      <name>Playfield Virus</name>
      <price currency="eur">199</price>
      <description>
         Protect yourself against malicious code.
      </description>
      <version>5.0</version>
   </product>
   <product href="http://www.playfield.com/calc">
      <name>Playfield Calc</name>
      <price currency="usd">299</price>
      <description>Clear picture on your data.</description>
      <version>1.5</version>
   </product>
   <product href="http://www.playfield.com/db">
      <name>Playfield DB</name>
      <price currency="cad">599</price>
      <description>Organize your data.</description>
   </product>
</products>

    howto.xsl:

    

<?xml version="1.0"?>
<xsl:stylesheet version="2.0" xmlns:htm="http://www.w3.org/1999/xhtml" 
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes"/>   
<xsl:template match="/products">  
	<html ang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
      <head>
         <title>Cascading Style Sheet</title>
         <link rel="stylesheet" type="text/css" href="table.css" title="Style"/>
      </head>
      <body>
        <table>
          <tr class="header">
             <td>Name</td>
             <td>Price</td>
             <td>Description</td>
          </tr>
          <xsl:apply-templates/>
        </table>
      </body>
   </html>
</xsl:template>

<xsl:template match="product[position() mod 2 = 1]">
   <tr class="odd">
      <td><xsl:value-of select="name"/></td>
      <td><xsl:value-of select="price"/></td>
      <td><xsl:value-of select="description"/></td>
   </tr>
</xsl:template>

<xsl:template match="product">
   <tr class="even">
      <td><xsl:value-of select="name"/></td>
      <td><xsl:value-of select="price"/></td>
      <td><xsl:value-of select="description"/></td>
   </tr>
</xsl:template>

</xsl:stylesheet>

    table.css:

    

.header { background-color: #999999; font-weight: bold; }
.odd { background-color: normal; }
.even { background-color: #dfdfdf; }

 

 

  

package sunflowerbbs.com;

import javax.xml.transform.*;

import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;

import java.io.*;

public class HowToXSLT {
	public static void main(String[] args) throws Exception{
		try {

			TransformerFactory tFactory = TransformerFactory.newInstance();

			Transformer transformer = tFactory
					.newTransformer(new javax.xml.transform.stream.StreamSource(
							"howto.xsl"));

			transformer.transform(new javax.xml.transform.stream.StreamSource(
					"howto.xml"), new javax.xml.transform.stream.StreamResult(
					new FileOutputStream("howto.html")));
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		convertHtmlToPdf("howto.html","product.pdf");
		
	}

	public static boolean convertHtmlToPdf(String inputFile, String outputFile)
			throws Exception {

		OutputStream os = new FileOutputStream(outputFile);
		ITextRenderer renderer = new ITextRenderer();
		String url = new File(inputFile).toURI().toURL().toString();

		renderer.setDocument(url);

		// 解决中文支持问题
		// ITextFontResolver fontResolver = renderer.getFontResolver();
		// fontResolver.addFont("C:/Windows/Fonts/SIMSUN.TTC",
		// BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
		// 解决图片的相对路径问题
		// renderer.getSharedContext().setBaseURL("file:/D:/");
		renderer.layout();
		renderer.createPDF(os);

		os.flush();
		os.close();
		return true;
	}

}

 

0
0
分享到:
评论

相关推荐

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    1.4 xml与html的比较 4 1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 1.6.2 文档类型声明 10 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    1.4 xml与html的比较 4 1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 1.6.2 文档类型声明 10 ...

    Javascript+Xslt解析Xml为Html的方法.pdf

    Javascript+Xslt解析Xml为Html的方法.pdf

    Javascript+Xslt解析Xml为Html的方法[参照].pdf

    Javascript+Xslt解析Xml为Html的方法[参照].pdf

    Java and XSLT.pdf

    XSLT提供了一种将XML文档转换为HTML的强有力的工具.然而,当这种转换需要涉及更多逻辑的时候,就会显现出它的不足之处.文中讲述了如何使用Java扩展XSLT,从而更好地发挥两种语言的特色.最后给出一实例来具体展示如何将...

    XML高级编程pdf

    8.6.4 使用Xpath和XSLT查询XML文档 8.6.5 查询语言展望 8.7 小结 第9章 转换 XML 9.1 为什么转换 XML 9.1.1 在不同词汇表之间转换 9.1.2 动态转换 9.1.3 不同的浏览器 9.2 XSL 9.3 XSLT 样式表结构 9.3.1 ...

    XSLT从入门到精通(PDG)

    以实现为重点,全面讲述了XSLT的文档转换功能,学习将XML转换为HTML、XHTML、PDF和其他格式。 XSLT是万维网联盟(W3C)最新提出的一种用来转换XML文档结构的说明性计算机语言,随着网络时代的发展,它的应用场合...

    电子书-《XML实用教程》高清晰PDF Part1(共2Parts)

    书中阐述了XML 的基本概念、语法规则、文档类型定义(DTD)、Schema 结构、层叠样式单(CSS)、数据源对象(DSO)、文件转换(XSLT)、文档对象模型(DOM),还介绍了在Java、ASP 和.NET 以及电子商务环境下XML 的应用。...

    XML 高级编程(高清版)

    8.6.4 使用Xpath和XSLT查询XML文档 8.6.5 查询语言展望 8.7 小结 第9章 转换 XML 9.1 为什么转换 XML 9.1.1 在不同词汇表之间转换 9.1.2 动态转换 9.1.3 不同的浏览器 9.2 XSL 9.3 XSLT 样式表结构 9.3.1 ...

    XML高级编程 (Extensible Markup Language)

    8.6.4 使用Xpath和XSLT查询XML文档 8.6.5 查询语言展望 8.7 小结 第9章 转换 XML 9.1 为什么转换 XML 9.1.1 在不同词汇表之间转换 9.1.2 动态转换 9.1.3 不同的浏览器 9.2 XSL 9.3 XSLT 样式表结构 9.3.1 ...

    XML入门经典(第4版).part1.rar

    主要内容有XML基本语法、DTD、XML Schema、RELAX NG、XPath、XSLT、XQuery、DOM、SAX、RSS、Web服务、Ajax、SOAP、CSS、XHTML、SVG和XForms等,每章都有习题,书后附有参考答案,可帮助你全面掌握XML及其应用方法。

    oXygen XML Editor(XML脚本编辑软件)

    oXygen XML Editor是一个多平台的XML编辑器(里诺下载站提供),XSLT / XQuery的调试器和分析器具有完整的Unicode支持。它提供了一个强大的代码洞察力,可以遵循DTD,RELAX NG或者XML架构,甚至可以从部分编辑过的...

    介绍Ajax、Xml语法和文件操作.pdf

    基于web标签的 html+css ...使用XML和XSLT(是一种用于将XML 文档 转换任意文本的描述语言)进行数据的交换和操作 使用XMLHttpRequest进行异步的数据查询和检索等操作 XML语法和文件操作 XML文件的规则和特点

    Oxygen XML Editor 20.1.2018080903 XML编辑器

    Oxygen XML Editor 是一款基于Java的XML编辑器,支持XML, XSL, TXT, XSD, DTD文档,能自行校验XML, XSL, XSD代码,...强大的转换支持让你不仅能编辑XSLT和XSL-FO文档,也能把它们转换成为你想要的如HTML/PS/PDF等文件。

    object-to-xml-to-html-to-pdf:使用 Xstream、XSLT 和 iText 序列化对象并将它们打印为 pdf 的沙盒 Java 应用程序

    object-to-xml-to-html-to-pdf )

    XML入门教程

    12 使用 XSLT 显示 XML 13 XML 解析器 14 XML DOM 15 XML to HTML 16 XMLHttpRequest 对象 17 XML 应用程序 18 XML 命名空间(XML Namespaces) 19 XML CDATA 20 XML 编码 21 XML DOM 高级 22 XML Don't

    Quickreport v5.05.1 for BC++ XE4 Full Source

    XML/XSLT export filter outputs the document (not the data) as a browser viewable XML/XSLT document. A stylesheet for browser viewing is supplied Transparent bands and background image property is a ...

    JSP编程指南(pdf)

    更通过大量的案例分析对如何使用JSP、XML和XSLT在WAP浏览器和HTML浏览器中显示web内容、使用LDAP开发电子商务以及使用JMF处理数据等进行了详尽的阐述, 对于那些想要将JSP作为其J2EE平台上Web应用前端的专业Java软件...

    draft2html5:将 C++ 标准草案的 XML 版本转换为 HTML5 网页的 XSL 转换

    将 C++ 标准草案源从 XML 转换为 HTML5 该项目旨在提供 C++ 标准草案源的基本 HTML5 渲染。 转换是从原始 LaTeX 源分两步执行的: LaTeX 到 XML 的转换。 由一个。 XML 到 HTML5 的转换。 由本项目执行。本次转换的...

Global site tag (gtag.js) - Google Analytics