日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

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

發(fā)布時間:2024/3/26 asp.net 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Apache XML项目FOP生成PDF文件(上) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

一、前言:在項目中遇到要把文檔保存成PDF文件,在網(wǎng)上找了很久之方面的資料,終于發(fā)現(xiàn)了ApacheFOP項目有這個功能。

二、適合讀者對象:想學(xué)就學(xué)吧!

三、介紹:FOP全稱為Formatting Objects Processor,譯為格式化對象處理器,簡單點,它就是一種打印格式驅(qū)動,通過這種驅(qū)動,可以很方便的生成相應(yīng)格式化的文件。FOP現(xiàn)在支持的格式化的文件包括PDF, PCL, PS, SVG, XML, Print, AWT, MIF and TXT.最主要也是最常使用的也是我們熟悉的PDF文件。下面就用簡單的幾個例子來說明FOP是如何做到的。

四、內(nèi)容:

1、?? 安裝:http://xml.apache.org/dist/fop/? 外下載一個文件包fop-0.20.5rc-bin.tar.gz 文件包解壓縮以后生成一個文件夾假設(shè)為F:/fop

目錄結(jié)構(gòu)為

?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

在系統(tǒng)的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

如果安裝配置沒有問題,就會看到在當(dāng)前目錄下生成一個helloworld.pdf文件。

2、?? 下面我們來看一下在JAVA程序中如何使用FOP庫資源來生成PDF文件,具體會遇到幾種情況:(1XLS-FOàPDF;(2XMLàXSL-FOàPDF;(3JAVAàXMLàXSL-FOàPDF

1XLS-FOàPDF

XSLW3C的標(biāo)準(zhǔn)XML文檔,它包括兩種:XSLTXSLFO,而XSLFOeXtensible Stylesheet Language Formatting Objects,也就是具有格式化對象的擴展樣式語言文件。使用FOP的函數(shù)可以直接把一個XMLFO文件生成PDF文件。處理流程如下:

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轉(zhuǎn)化為ResultFO2PDF.pdf

?

?

參考資料:http://xml.apache.org/

作者郵箱:Jasea@sina.com

總結(jié)

以上是生活随笔為你收集整理的使用Apache XML项目FOP生成PDF文件(上)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。