新闻资讯 | 控件产品 | 技术文章 | 购物车 | 合作伙伴 | 问题解答 | 电子简报 | PDF论坛 | 资源下载
您现在的位置:技术文章>PDF开发篇 首页|PDF应用篇|PDF开发篇|解决方案

xml的转换之pdf 1 (xml+xsl 2 pdf)

发布日期:2008-12-29 作者:智在居士 出处:http://blog.csdn.net

 

pdf转换是很实用的工作。已然存在的的转换工具就有很多,其中包括一些成熟的商业软件。而作为java程序开发,我们将借助一个叫FOP的开源工具。

在开始转换之前,我们不得不认识先一下FOP并对它的使用做简单的了解。

FOP (Formatting Objects Processor) 是第一个基于XSL:FO的打印格式处理器,也是第一个与输出无关的格式处理器。它是一个Java程序,能够从对象树中读入然后生成渲染过的页面输出到指定的流。目前支持的输出格式有PDF,PCL,PS,SVG,XML(以树形结构表示),打印机,AWT,MIFTXT。最主要的输出指的是PDF
James Tauber 
 FOP 的最初作者。他开发了该工具的原始版本,而且很大方地开放了该代码,后来又将它移交给 Apache XML Project。(他还给该工具选了一个极好的名称;除了该名称是字首组合词之外,Webster  fop 的定义是过分讲究外表的人。)现在 James  Bowstreet 的首席 XML 设计师。Apache XML项目以开放与合作的方式开发的,提供商业品质的基于XML标准的解决方案。从标准的实施角度看,它能给标准机构(比如IETFW3C)提供反馈信息。

FOP主页 http://xml.apache.org/fop/

 

FOP使用方式

FOP3种使用方式,分别为命令行,程序嵌入,XT 嵌入。这里将主要介绍如何在程序中嵌入FOP功能。将XML文件转换为PDF实际上分为2步,第1步是利用XSLTXML转换为XSL-FO,第2步是将XSL-FO转换为PDF。这里只讲述如何进行第2步的转换编程。

 

下载fop包后,你需要CLASSPATH中添加下述jar文件:

{FOP安装目录}\build\fop.jar

{FOP安装目录}\lib\batik.jar

{FOP安装目录}\lib\xalan-2.0.0.jar

{FOP安装目录}\lib\xerces-1.2.3.jar

{FOP安装目录}\lib\avalon-framework-4.0.jar

{FOP安装目录}\lib\logkit-1.0b4.jar

{FOP安装目录}\lib\jimi-1.0.jar

我是使用Eclipse,只需要在工程属性->构建路径中加入他们,就可以使用这个伟大的工具了。

 

下面是具体的程序:

 

这是一个xml文件 test.xml


objective here

scope here

responsibilities here

reference here

term here

definition here

summary here

breakdown here

content here.

content2 here.

featureInteractions here

estring here

resourceid here

rqmt here.

 

这是它的xsl文件 test.xsl

 



29.7cm" page-width="21cm" margin-top="2cm" margin-bottom="2cm" margin-left="2cm" margin-right="2cm">

20pt" font-weight="bold" space-after="5mm" text-align="center">Cardiac Feature SRS

10pt">

18pt" font-weight="bold" space-after="5mm">1. Intruction

14pt" font-weight="bold" space-after="5mm" margin-left="5mm">1.1 Objective

10pt" font-weight="normal" space-after="5mm" margin-left="7mm">

14pt" font-weight="bold" space-after="5mm" margin-left="5mm">1.2 Scope

10pt" font-weight="normal" space-after="5mm" margin-left="7mm">

14pt" font-weight="bold" space-after="5mm" margin-left="5mm">1.3. Responsibilities

10pt" font-weight="normal" space-after="5mm" margin-left="7mm">

14pt" font-weight="bold" space-after="5mm" margin-left="5mm">1.4. References

10pt" font-weight="normal" space-after="5mm" margin-left="7mm">

14pt" font-weight="bold" space-after="5mm" margin-left="5mm">1.5. Definitions, Acronyms, and Abbreviations

10pt" font-weight="bold" space-after="5mm" margin-left="5mm">

2cm" background-color="#fff2d9" >

4cm"/>

6cm"/>

Term

Definition

18pt" font-weight="bold" space-after="5mm">2. General Description

14pt" font-weight="bold" space-after="5mm" margin-left="5mm">2.1. Feature Name

14pt" font-weight="bold" space-after="5mm" margin-left="7mm">2.1.1. Feature Summary

10pt" font-weight="normal" space-after="5mm" margin-left="9mm">

14pt" font-weight="bold" space-after="5mm" margin-left="7mm">2.1.2. Feature Breakdown

10pt" font-weight="normal" space-after="5mm" margin-left="9mm">

14pt" font-weight="bold" space-after="5mm" margin-left="5mm">2.2. Feature Requirements

10pt" font-weight="normal" space-after="5mm" margin-left="7mm">

14pt" font-weight="bold" space-after="5mm" margin-left="5mm">2.3. Feature Interactions

10pt" font-weight="normal" space-after="5mm" margin-left="7mm">

18pt" font-weight="bold" space-after="5mm">3. String Resources

10pt" font-weight="bold" space-after="5mm" margin-left="5mm">

2cm" background-color="#fff2d9" >

4cm"/>

10cm"/>

4cm"/>

English String

Resource ID

Rqmt

 

注意,以上文件不要加: 这句。

 

转换的java代码 ExampleXML2PDF.java

 

package src;

import java.io.File;

import java.io.IOException;

import java.io.OutputStream;

import javax.xml.transform.Result;

import javax.xml.transform.Source;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerException;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.sax.SAXResult;

import javax.xml.transform.stream.StreamSource;

import org.apache.avalon.framework.ExceptionUtil;

import org.apache.avalon.framework.logger.ConsoleLogger;

import org.apache.fop.apps.Driver;

import org.apache.fop.messaging.MessageHandler;

 

public class ExampleXML2PDF{

 

public void convertXML2PDF(File xml, File xslt, File pdf)

throws TransformerException, IOException {

Driver driver = new Driver();

ConsoleLogger logger = new ConsoleLogger(ConsoleLogger.LEVEL_INFO);

driver.setLogger((org.apache.avalon.framework.logger.Logger) logger);

MessageHandler.setScreenLogger((org.apache.avalon.framework.logger.Logger) logger);

 

//Setup Renderer (output format)

driver.setRenderer(Driver.RENDER_PDF);

 

//Setup output

OutputStream out = new java.io.FileOutputStream(pdf);

try {

driver.setOutputStream(out);

 

//Setup XSLT

TransformerFactory factory = TransformerFactory.newInstance();

Transformer transformer = factory.newTransformer(new StreamSource(xslt));

 

//Setup input for XSLT transformation

Source src = new StreamSource(xml);

 

//Resulting SAX events (the generated FO) must be piped through to FOP

Result res = new SAXResult(driver.getContentHandler());

 

//Start XSLT transformation and FOP processing

transformer.transform(src, res);

} finally {

out.close();

}

}

 

public static void main(String[] args) {

try {

System.out.println("FOP ExampleXML2PDF\n");

System.out.println("Preparing...");

 

//Setup directories

File baseDir = new File(".");

File outDir = new File(baseDir, "out");

outDir.mkdirs();

 

File xmlfile = new File("f:\\tomcat5\\webapps\\myxml\\xmldata\\test.xml");

File xsltfile = new File("f:\\tomcat5\\webapps\\myxml\\xmldata\\test.xsl");

File pdffile = new File("f:\\tomcat5\\webapps\\myxml\\xmldata\\test.pdf");

 

System.out.println("Input: XML (" + xmlfile + ")");

System.out.println("Stylesheet: " + xsltfile);

System.out.println("Output: PDF (" + pdffile + ")");

System.out.println();

System.out.println("Transforming...");

 

ExampleXML2PDF app = new ExampleXML2PDF();

app.convertXML2PDF(xmlfile, xsltfile, pdffile);

 

System.out.println("Success!");

} catch (Exception e) {

System.err.println(ExceptionUtil.printStackTrace(e));

System.exit(-1);

}

}

}

 

编译执行即可。

发布人:管理员 【报告错误】·【推荐好友】·【打印文章】
相关评论 本文现有 1 条评论 评分人数: 0 平均分: 0
hyfsoft   2009-3-5 11:50:29
FOP听说过,下面的工具也可以实现同样的功能。 http://www.antenna.co.jp/XML/download/axf43/~Windows/V4-3-M3-Windows_X86_32E.exe
相关评论
用户名: 密  码:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
注意:请不要在评论中含与内容无关的广告链接,违者封ID
文章搜索
推荐文章
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
热门点击
一个简单的PDF文件结构的分析(22609)
PHP的FDF文档支持(16221)
用C#制作PDF文件全攻略(13660)
Word转换PDF格式的C#或(12174)
pdfMaker文章:PDF加(11664)
ITextRenderer学习(11472)
PDF文件加密仿真(11088)
怎样用iReport制作Web(10445)
iText PDF概述(1)(9975)
循序渐进学习iTextShar(9901)
热门评论
从pdf文档中提取出文本(8)
PDFlib开发:创建超文本元(2)
客户端自动打印PDF(Prin(2)
浅谈PDFlib中文输出(一)(2)
xml的转换之pdf 2 ((1)
xml的转换之pdf 1 (x(1)
PDF知识讲座(1)(1)
PDFBox使用简介(1)
使用正则表达式计算PDF文档的(1)
word转pdf(1)