使用Apache XML项目FOP生成PDF文件(上)

原创 2004年09月15日 11:25:00

使用Apache XML项目FOP生成PDF文件(上)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

一、前言:在项目中遇到要把文档保存成PDF文件,在网上找了很久之方面的资料,终于发现了ApacheFOP项目有这个功能。

二、适合读者对象:想学就学吧!

三、介绍:FOP全称为Formatting Objects Processor,译为格式化对象处理器,简单点,它就是一种打印格式驱动,通过这种驱动,可以很方便的生成相应格式化的文件。FOP现在支持的格式化的文件包括PDF, PCL, PS, SVG, XML, Print, AWT, MIF and TXT.最主要也是最常使用的也是我们熟悉的PDF文件。下面就用简单的几个例子来说明FOP是如何做到的。

四、内容:

1、   安装:http://xml.apache.org/dist/fop/  外下载一个文件包fop-0.20.5rc-bin.tar.gz 文件包解压缩以后生成一个文件夹假设为F:/fop

目录结构为

 F:/fop 的目录

 

12/19/2002  04:00p      <DIR>          .

12/19/2002  04:00p      <DIR>          ..

12/11/2002  12:26a              46,124 CHANGES

12/11/2002  12:26a                 679 fop.bat

12/11/2002  12:26a               2,446 fop.sh

12/11/2002  12:26a               2,675 LICENSE

12/11/2002  12:26a               1,248 README

12/11/2002  12:26a                 597 ReleaseNotes.html

12/11/2002  12:26a                 884 STATUS

12/19/2002  04:00p      <DIR>          lib

12/19/2002  04:00p      <DIR>          docs

12/19/2002  04:00p      <DIR>          contrib

12/19/2002  04:00p      <DIR>          conf

12/19/2002  04:00p      <DIR>          build

12/11/2002  12:26a              14,899 bugs.html

 

其中lib目录包括几个需要的库:

aXMLAPIxml-apis.jar

bApacheXML的解析器:xercesImpl-2.2.1.jar

(c) ApacheXSLT的处理器:xalan-2.4.1.jar

(d) ApacheSVG的库文件,可以使PDF生成多彩图片:batik.jar

(e) Avalon  framework库文件:avalon-framework-cvs-20020806.jar

将它们加入CLASSPATH

在系统的PATH变量里加入:F:/fop

一个简单的测试:

先生成一个fo文件:

<?xml version="1.0" encoding="UTF-8"?>

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

  <fo:layout-master-set>

    <fo:simple-page-master master-name="simpleA4" page-height="29.7cm" page-width="21cm" margin-top="2cm" margin-bottom="2cm" margin-left="2cm" margin-right="2cm">

      <fo:region-body/>

    </fo:simple-page-master>

  </fo:layout-master-set>

  <fo:page-sequence master-reference="simpleA4">

    <fo:flow flow-name="xsl-region-body">

      <fo:block>Hello World!</fo:block>

    </fo:flow>

  </fo:page-sequence>

</fo:root>

打开DOS窗口:键入

              fop helloworld.fo helloworld.pdf

如果安装配置没有问题,就会看到在当前目录下生成一个helloworld.pdf文件。

2、   下面我们来看一下在JAVA程序中如何使用FOP库资源来生成PDF文件,具体会遇到几种情况:(1XLS-FOàPDF;(2XMLàXSL-FOàPDF;(3JAVAàXMLàXSL-FOàPDF

1XLS-FOàPDF

XSLW3C的标准XML文档,它包括两种:XSLTXSLFO,而XSLFOeXtensible Stylesheet Language Formatting Objects,也就是具有格式化对象的扩展样式语言文件。使用FOP的函数可以直接把一个XMLFO文件生成PDF文件。处理流程如下:

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

XLS-FO

PDF

FOP

 

 

 


//例一:ExampleFO2PDF.java

 

import java.io.File;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

 

//SAX

import org.xml.sax.InputSource;

 

//Avalon

import org.apache.avalon.framework.ExceptionUtil;

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

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

 

//FOP

import org.apache.fop.apps.Driver;

import org.apache.fop.apps.FOPException;

import org.apache.fop.messaging.MessageHandler;

 

/**

 * This class demonstrates the conversion of an FO file to PDF using FOP.

 */

public class ExampleFO2PDF {

 

    public void convertFO2PDF(File fo, File pdf) throws IOException, FOPException {

       

        //Construct driver

        Driver driver = new Driver();

       

        //Setup logger

        Logger logger = new ConsoleLogger(ConsoleLogger.LEVEL_INFO);

        driver.setLogger(logger);

        MessageHandler.setScreenLogger(logger);

 

        //Setup Renderer (output format)       

        driver.setRenderer(Driver.RENDER_PDF);

       

        //Setup output

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

        try {

            driver.setOutputStream(out);

 

            //Setup input

            InputStream in = new java.io.FileInputStream(fo);

            try {

                driver.setInputSource(new InputSource(in));

           

                //Process FO

                driver.run();

            } finally {

                in.close();

            }

        } finally {

            out.close();

        }

    }

 

 

    public static void main(String[] args) {

        try {

            System.out.println("FOP ExampleFO2PDF/n");

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

           

            //Setup directories

            File baseDir = new File(".");

 

            //Setup input and output files           

            File fofile = new File(baseDir, "helloworld.fo");

            File pdffile = new File(baseDir, "ResultFO2PDF.pdf");

 

            System.out.println("Input: XSL-FO (" + fofile + ")");

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

            System.out.println();

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

           

            ExampleFO2PDF app = new ExampleFO2PDF();

            app.convertFO2PDF(fofile, pdffile);

           

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

        } catch (Exception e) {

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

            System.exit(-1);

        }

    }

}

 

              编译运行上面的程序把XMLFO文件helloworld.fo转化为ResultFO2PDF.pdf

 

 

参考资料:http://xml.apache.org/

作者邮箱:Jasea@sina.com

使用FOP将xsl-fo转pdf

第三步骤:将生成的fo文件转成pdf。【由于.xsl文件不能识别中文,我在root路径下,给root添加了一个属性,font-family,让其可以识别中文。其余需要修改的属性或者样式,需要你自己修改...
  • shihengli2010
  • shihengli2010
  • 2016年09月09日 09:33
  • 1491

fop生成pdf的中文乱码问题

1.建立font metrics文件,对ttc或ttf有不同的方法。 确定系统字体文件夹下的字体文件(微软雅黑字体的路径为C:\WINDOWS\Fonts\msyh.ttf)。 然后在命令...
  • hulua2010
  • hulua2010
  • 2015年05月17日 18:08
  • 1339

java通过xml配置属性用iText包生成pdf文件

总共步骤为:1、提供一个需要替换参数传入类;2、解析xml文件,替换xml文件中的特定参数(写死格式);3、解析xml文件中的pdf文件布局(包括表、段落、文字、换行等); 4、生成pdf文件。 第一...
  • asdcxz868
  • asdcxz868
  • 2016年05月05日 20:47
  • 2277

使用Apache FOP将XML导出成PDF

FOP是由James Tauber发起的一个开源项目,最初的目的是利用xsl-fo将xml文件转换成pdf文件。目前最新的版本是2001年9月29日发布的 0.20.2,它可以将xml文件转换成p...
  • yangyigen
  • yangyigen
  • 2012年08月10日 20:20
  • 6919

Wrox.Press.Professional.XML.Development.with.Apache.Tools.Xerces.Xalan.FOP.Cocoon.Axis.Xindice.eBook-LiB.chm

  • 2008年05月24日 10:59
  • 1.71MB
  • 下载

使用FOP将xsl-fo转pdf

第三步骤:将生成的fo文件转成pdf。【由于.xsl文件不能识别中文,我在root路径下,给root添加了一个属性,font-family,让其可以识别中文。其余需要修改的属性或者样式,需要你自己修改...
  • shihengli2010
  • shihengli2010
  • 2016年09月09日 09:33
  • 1491

Apache Fop1.0 Pdf demp

  • 2016年05月12日 14:44
  • 10.47MB
  • 下载

fop生成pdf的中文乱码问题

1.建立font metrics文件,对ttc或ttf有不同的方法。 确定系统字体文件夹下的字体文件(微软雅黑字体的路径为C:\WINDOWS\Fonts\msyh.ttf)。 然后在命令...
  • hulua2010
  • hulua2010
  • 2015年05月17日 18:08
  • 1339

Java Web项目中利用FreeMarker模板生成的word文档,其它格式文档同理,如pdf,txt,java,xml等等

利用FreeMarker模板生成的word文档,其它格式文档同理,如pdf,txt,java,xml等等 需要向项目中加入freemarker的JAR文件,可以通过下面的链接获得Freema...
  • qq_35624642
  • qq_35624642
  • 2016年08月15日 12:09
  • 1160

新建maven项目时pom.xml文件第一行报org.apache.maven.plugin.war.WarMojo的解决方法

新建maven项目的时候pom.xml文件第一行报错,如下: 出现这个错误的原因是 org.apache.maven.pluginsmaven-war-plugin这个插件的默认的版本在jdk1.7下...
  • qq807500387
  • qq807500387
  • 2017年01月05日 20:45
  • 1012
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用Apache XML项目FOP生成PDF文件(上)
举报原因:
原因补充:

(最多只允许输入30个字)