分享
 
 
 

Oracle XML Publisher与JDeveloper 10g集成

王朝oracle·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

2006 年 11 月发布

Oracle xml Publisher 是基于 XSL-FO 的 Oracle 报表工具,它包含一个 GUI 和一组核心 API 组件。以下核心 API 可以与 Oracle JDeveloper 10.1.3 集成,以生成 PDF、Excel、Html 或 RTF 报表:

PDF Form PRocessing Engine API。将 PDF 模板与 XML 数据合并以生成 PDF 文档。RTF Processor。将 RTF 模板转换为可扩展样式语言格式化对象 (XSL-FO) 文件,该文件随后将用作 FO Processor Engine 的输入。

FO Processor Engine。合并 XML 文件(数据源文件)与 XSLT 文件(模板),以生成 PDF、Excel、HTML 和 RTF 报表。

XSL-FO Utility。通过一个 XML 文件和 XSLT 文件或者一组 XML 和 XSLT 文件生成 XSL-FO 文件。PDF Document Merger。组合 PDF 文档并添加页码。

PDF Book Binder Processor。将一组 PDF 文档合并到单个文档中,并采用章、节、子节和目录的格式。

Document Processor Engine。通过单个 XML 文档(指定了模板、数据源和输出)对上述 API 进行批处理。

在本文中,您将了解如何使用 FO Processor Engine、XSL-FO Utility 和 PDF Document Merger。您还可以大概了解能够从数据库生成 XML 文档的 Data Engine API。该 API 使用 XML 模板指定对数据库的 SQL 查询以及所生成的 XML 文档的结构。

某些 Oracle XML Publisher API 需要 RTF 和 PDF 模板作为输入。要创建 RTF 模板,您需要 Oracle XML Publisher Desktop,这是一个 Microsoft Word 插件。要创建 PDF 模板,只需在 Word 文档中定义一个布局,然后使用 Adobe Acrobat Distiller 将该文档转换为 PDF。尽管本文没有讨论需要 RTF 和 PDF 模板的 API,但使用它们生成报表的过程类似于使用 Oracle XML Publisher API 生成报表的过程。

安装 Oracle XML Publisher

下载 Oracle XML Publisher Enterprise 5.6.2 for Microsoft Windows,然后将 zip 文件 XMLP562_WIN.zip 解压缩到一个目录中。

在 Oracle JDeveloper 10.1.3 中,选择 File>New 以打开 New Gallery 向导。

选择 General>application 创建一个新应用程序,然后单击 OK 按钮。

在 Create Application 框架中,指定一个应用程序名(如 XMLPublisher),然后单击 OK。

在 Create Project 框架中,指定一个项目名(如 XMLPublisher),然后单击 OK。这将在 Applications Navigator 中添加一个应用程序和一个项目。

接下来,通过在 New Gallery 框架中选择 General>java Class,将 Java 类添加到项目。

在 Create Java Class 框架中,指定一个类名(如 XMLPublisher)和一个程序包名(如‘xmlpublisher’),然后单击 OK 按钮。这将在 Oracle XML Publisher 项目中添加一个 Java 类。

在本文中,您将根据 XML 文档创建 PDF 报表。因此,需要在 New Gallery 框架中选择 General>XML>XML Document,将 XML 文档添加到项目。

您将在以下部分中为项目添加其他 XML 和 XSLT 文档。图 1 展示了 Oracle XML Publisher 项目的目录结构:

图 1:Oracle XML Publisher 项目的目录结构。

接下来,通过选择 Tools>Project Properties 将 Oracle XML Publisher API 的 Jar 文件添加到 Oracle XML Publisher 项目。

在 Project Properties 框架中,选择 Libraries。

使用 Add Jar/Directory 按钮添加 Jar 文件。Oracle XML Publisher Jar 文件位于 <XMLP562_WIN>\manual\lib 目录中;其中,<XMLP562_WIN> 是安装有 Oracle XML Publisher zip 文件的目录。

使用 Add Library 按钮添加 Oracle JDBC 库,这需要建立 Oracle 数据库的 JDBC 连接。单击 OK。

图 2 展示了 Oracle XML Publisher 项目中的 Jar 文件/库:

图 2:Oracle XML Publisher 项目库。 下载并安装 Oracle 数据库 10g,然后创建一个包含示例模式的数据库实例。然后,在 OE 模式中使用下面所示的 SQL 脚本创建示例数据库表。

CREATE TABLE OE.Catalog(CatalogId VARCHAR(25) PRIMARY KEY,

Journal VARCHAR(25), Publisher VARCHAR(25),

Edition VARCHAR(25), Title Varchar(45), Author Varchar(25));

INSERT INTO OE.Catalog VALUES('catalog1', 'Oracle Magazine', 'Oracle Publishing',

'March-April 2006', 'Commanding ASM', 'Arup Nanda');

INSERT INTO OE.Catalog VALUES('catalog2', 'Oracle Magazine', 'Oracle Publishing',

'May-June 2006', 'Tuning Your View Objects', 'Steve Muench');

INSERT INTO OE.Catalog VALUES('catalog3', 'Oracle Magazine', 'Oracle Publishing',

'May-June 2006', 'Managing Oracle Portal', 'Aradhana Puri');

FO Processor Engine

FO Processor Engine API 用于从 XML 文件和 XSLT 文件生成 PDF、Excel、HTML 或 RTF 报表。在本部分中,我们将创建一个 PDF 文档。PDF 报表的输入 XML 文档如下所示。<?xml version="1.0" encoding="UTF-8"?>

<!--A Oracle Magazine Catalog-->

<catalog title="Oracle Magazine" publisher="Oracle Publishing">

<magazine date="March-April 2006">

<article>

<title>Using Bind Variables</title>

<author>Steve Muench</author>

</article>

<article>

<title>Commanding ASM</title>

<author>Arup Nanda</author>

</article>

</magazine>

<magazine date="May-June 2006">

<article>

<title>Tuning Your View Objects</title>

<author>Steve Muench</author>

</article>

<article>

<title>Managing Oracle Portal</title>

<author>Aradhana Puri</author>

</article>

</magazine>

</catalog>

要生成 PDF 报表,您需要一个 XSL-FO 文件。XSL 规范中说明了格式化对象。这里,您将定义一个 XSLT 样式表,用于将 XML 文件转换为 XSL-FO 文件。随后,我们将使用 FO Processor Engine 将该文件转换为报表。

XSL-FO 文件指定如何在报表中格式化数据,包括布局、字体和表。XSL-FO 文件中的元素位于带‘fo’前缀的命名空间中,该命名空间通过命名空间声明 xmlns:fo=http://www.w3.org/1999/XSL/Format 来指定。XSL-FO 文件的 DTD 可以从 fo.zip 中获得。

您可以通过 XML 模式验证 XSL-FO 文件,方法是将 XSL-FO 文件的 DTD 转换为 XML 模式。Oracle JDeveloper 可以注册 XSL-FO 文件的 XML 模式,并生成或验证 XSL-FO 文件的实例。验证 XSL-FO 文件指的是检查 XSL-FO 文件的格式。表 1 列出了 XSL-FO 文件中的某些元素。

表 1. XSL-FO 文档元素

元素

说明

fo:root

XSL-FO 文档中的根元素

fo:layout-master-set

指定一组页面模板

fo:simple-page-master

页面布局

fo:page-sequence

指定页面模板的顺序

fo:flow

页面内容

fo:block

块内容

fo:list-block

指定列表

fo:list-item

列表项

fo:table

fo:table-column

表列

fo:table-header

表头

fo:table-body

表主体

fo:table-row

表行

fo:table-cell

表单元格

示例 XSLT 样式表 (catalog.xsl) 用于从输入 XML 文件 (catalog.xml) 生成 XSL-FO 文件。

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

<xsl:stylesheet version="1.1"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

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

<xsl:output method="xml" version="1.0"

omit-xml-declaration="no" indent="yes"

<!-- ========================= -->

<!-- root element:catalog -->

<!-- ========================= -->

<xsl:template match="/catalog">

<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 font-size="16pt" font-weight="bold" space-after="5mm">

Catalog:<xsl:value-of select="@title"

</fo:block>

<fo:block font-size="16pt" font-weight="bold" space-after="5mm">

Publisher:<xsl:value-of select="@publisher"

</fo:block>

<fo:block font-size="10pt">

<fo:table table-layout="fixed">

<fo:table-column column-width="4cm"

<fo:table-column column-width="4cm"

<fo:table-column column-width="5cm"

<fo:table-header>

<fo:table-row font-weight="bold"><fo:table-cell>

<fo:block>

<xsl:text>Date</xsl:text>

</fo:block>

</fo:table-cell>

<fo:table-cell>

<fo:block>

<xsl:text>Title</xsl:text>

</fo:block>

</fo:table-cell>

<fo:table-cell>

<fo:block>

<xsl:text>Author</xsl:text>

</fo:block>

</fo:table-cell>

</fo:table-row>

</fo:table-header>

<fo:table-body>

<xsl:apply-templates select="magazine"

</fo:table-body>

</fo:table>

</fo:block>

</fo:flow>

</fo:page-sequence>

</fo:root>

</xsl:template>

<xsl:template match="magazine">

<xsl:for-each select="article">

<fo:table-row>

<fo:table-cell>

<fo:block>

<xsl:value-of select="../@date"/>

</fo:block>

</fo:table-cell>

<fo:table-cell>

<fo:block>

<xsl:value-of select="title"/>

</fo:block>

</fo:table-cell>

<fo:table-cell>

<fo:block>

<xsl:value-of select="author"/>

</fo:block>

</fo:table-cell>

</fo:table-row>

</xsl:for-each>

</xsl:template>

</xsl:stylesheet>

接下来,您将开发一个 Java 应用程序,以使用 Oracle XML Publisher API 生成报表。在 XMLPublisher.java 类中,导入 Oracle XML Publisher 类:

import oracle.apps.xdo.template.FOProcessor;

import oracle.apps.xdo.template.fo.util.FOUtility;

import oracle.apps.xdo.common.pdf.util.PDFDocMerger;

import oracle.apps.xdo.dataengine.DataProcessor;

import oracle.apps.xdo.XDOException;

创建 FOProcessor 对象。FOProcessor 类是使用 FO Processing Engine 的主要类。FOProcessor processor = new FOProcessor();

设置输入 XML 文件:processor.setData("catalog.xml");

设置 XSLT 模板:processor.setTemplate("catalog.xsl");

设置 PDF 文档的输出文件和输出格式:processor.setOutput("catalog.pdf");

processor.setOutputFormat(FOProcessor.FORMAT_PDF);

表 2 列出了支持的输出格式。

表 2. FO Processor 输出格式

输出格式

说明

FORMAT_AWT

AWT 格式

FORMAT_EXCEL

Excel 电子表格格式

FORMAT_HTML

HTML 格式

FORMAT_PDF

PDF 格式

FORMAT_RTF

RTF 格式

FORMAT_UIX

UIX 格式

假如需要 HTML 输出,应指定 HTML 输出文件和 HTML 输出格式:processor.setOutput("catalog.html");

processor.setOutputFormat(FOProcessor.FORMAT_HTML);

运行 FO Processor Engine:processor.generate();

您将在示例代码 zip 中找到 PDF 报表 (catalog.pdf),该报表是通过 FO Processor Engine 生成的。

XSL-FO Utility

在前面部分中,您通过 XML 文件和 XSLT 文件生成了 Oracle XML Publisher 报表。输入还可以是一组 XML 文件和 XSLT 文件。XSL-FO Utility 可以通过一组输入 XML 和 XSLT 文件生成 XSL-FO 文件。

例如,我们通过以下两个输入 XML 文件(catalog2.xml 和 catalog3.xml)来创建 XSL-FO 文件。

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

<!--A Oracle Magazine Catalog-->

<catalog title="Oracle Magazine" publisher="Oracle Publishing">

<magazine date="July-August 2006">

<article>

<title>Archiving Data Using XML</title>

<author>Arup Nanda</author>

</article>

</magazine>

</catalog>

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

<!--A Oracle Magazine Catalog-->

<catalog title="Oracle Magazine" publisher="Oracle Publishing">

<magazine date="July-August 2006">

<article>

<title>XML in Databases</title>

<author>Ari Kaplan</author>

</article>

</magazine>

<magazine date="Sept-Oct 2006">

<article>

<title>Harnessing the Active Data Model</title>

<author>Steve Muench</author>

</article>

</magazine>

</catalog>

我们将使用 XSLT 文件 (catalog.xsl) 为输入 XML 文件生成 XSL-FO 文件,然后合并这些 XSL-FO 文件以生成单个 XSL-FO 文件。

为要通过输入 XML 和 XSLT 文件生成的 XSL-FO 文件创建 InputStream 对象数组:

InputStream[] input = new InputStream[2];

通过 XSL-FO Utility 的主要类 FOUtility,根据输入 XML 和 XSLT 文件创建 XSL-FO 文件。使用静态方法 createFO(java.lang.String xmlFile,java.lang.String xslFile) 创建 XSL-FO 文件: InputStream firstFOStream = FOUtility.createFO("catalog2.xml",

"catalog.xsl");InputStream secondFOStream =

FOUtility.createFO("catalog3.xml", "catalog.xsl");

在 InputStream 数组中设置 XSL-FO InputStream 对象:Array.set(input, 0, firstFOStream);

Array.set(input, 1, secondFOStream);

使用静态方法 mergeFOs() 合并 XSL-FO InputStream 对象:InputStream mergedFOStream = FOUtility.mergeFOs(input, null);

创建 FOProcessor 对象,以便通过合并的 XSL-FO 文件生成 PDF 报表:FOProcessor processor = new FOProcessor();

在 FOProcessor 对象上设置合并的 XSL-FO InputStream:processor.setData(mergedFOStream);

假如将 XSL-FO 文件指定为 FOProcessor 的数据源,则不需要设置 XSLT 文档。将 XSLT 模板设置为 null:processor.setTemplate((String)null);

设置输出 PDF 文件和输出格式,并生成 PDF 报表:processor.setOutput("catalog2.pdf");

processor.setOutputFormat(FOProcessor.FORMAT_PDF);

processor.generate();

您将在示例代码中找到 PDF 报表 (catalog2.pdf),该报表是通过合并的 XSL-FO InputStream 生成的。

PDF Document Merger

有时,您必须合并 PDF 文档。PDF Document Merger 用于合并 PDF 文档,还可以为合并的文档添加页码。在本部分中,我们将合并在前面部分中生成的 catalog.pdf 和 catalog2.pdf。

首先,根据 catalog.pdf 和 catalog2.pdf 创建一个 InputStream 数组:FileInputStream[] inputStreams = new FileInputStream[2];

inputStreams[0] = new FileInputStream("catalog.pdf");

inputStreams[1] = new FileInputStream("catalog2.pdf");

为合并的 PDF 文档创建 FileOutputStream:FileOutputStream outputStream = new FileOutputStream("catalog3.pdf");

合并 PDF 文档与 PDFDocMerger 类:PDFDocMerger pdfMerger = new PDFDocMerger(inputStreams, outputStream);

要添加页码,应指定页码坐标和页码字体:pdfMerger.setPageNumberCoordinates(300, 20);

pdfMerger.setPageNumberFontInfo("Courier", 10);

使用 setPageNumberValue(int initialValue, int startPageIndex) 方法设置页码值。initialValue 指定页码的初始值。startPageIndex 指定从哪个页码开始编号:pdfMerger.setPageNumberValue(1, 1);

运行 PDF Document Merger: pdfMerger.process();

您将在示例代码中找到合并后的 PDF 文档 (catalog3.pdf)。

Data Engine

Data Engine API 可以使用数据库数据创建 XML 文档。DataProcessor 类用于从数据模板生成 XML 文档。该模板是一个 XML 文件,可以指定输入参数、从数据库检索数据的 SQL 查询以及要生成的 XML 文档的数据结构。与 XML SQL Utility(也是从数据库生成 XML 文档)相比,Data Engine API 的一个优势是可让您在 XML 文档中生成元素的层次结构。表 3 列出了一些在数据模板中常用的元素。

表 3. 数据模板元素

元素

说明

属性

dataTemplate(必需)

根元素

name(必需)

version(必需)

parameters

指定 SQL 查询的输入参数,由 <parameter> 元素组成。参数值可以在运行时设置。

name(必需)

dataType — 值可以是“character”、“date”或“number”。默认值是“character”。

dataQuery(必需)

指定从数据库检索数据的 SQL 查询,由 <sqlstatement> 元素组成。

-

sqlstatement(必需)

指定 SQL 语句。

name(必需)

dataStrUCture(对于多个查询是必需的)

定义输出 XML 的结构,由 <group> 和 <element> 元素组成。假如没有为单个查询指定,则输出 XML 由与 SQL 查询中的列相对应的元素组成。

-

group

指定一组元素和子组。元素的层次结构可以通过子组元素指定。

name(必需)

source(必需)— 指定从中派生组元素的相应 SQL 语句的查询标识符。

element(必需)

指定输出 XML 文档中的元素。

name(必需)

value(必需)— 指定 SQL 语句的列名。 该示例数据模板 (catalogDataTemplate.xml) 用于从数据库表生成 XML 文档:

catalogDataTemplate.xml

<?xml version="1.0" encoding="WINDOWS-1252" ?>

<dataTemplate name="catalogDataTemplate" description="Magazine

Catalog" defaultPackage="" Version="1.0">

<parameters>

<parameter name="id" dataType="character"

</parameters>

<dataQuery>

<sqlStatement name="Q1">

<![CDATA[

SELECT CatalogId, Journal, Publisher, Edition, Title,

Author from OE.CATALOG WHERE CatalogId=:id

</sqlStatement>

</dataQuery>

<dataStructure>

<group name="G_Catalog" source="Q1">

<element name="CATALOGID" value="CatalogId"

<element name="JOURNAL" value="Journal"

<element name="PUBLISHER" value="Publisher"

<element name="EDITION" value="Edition" />

<element name="TITLE" value="Title"/>

<element name="AUTHOR" value="Author" />

</group>

</dataStructure>

</dataTemplate>

示例数据模板指定的参数、id 均为 character 类型。SQL 查询中的绑定变量用于设置 CatalogId 列的值(通过 id 参数)。CatalogId 列的值在运行时设置。示例查询中的所有列都是 VARCHAR 类型。可以在 SQL 查询中指定以下列类型:VARCHAR2、CHAR、NUMBER、DATE、TIMESTAMP、BLOB、CLOB 和 XMLType。

接下来,我们将通过 Data Engine API 使用数据库数据生成 XML 文档。首先,创建一个 DataProcessor 对象:DataProcessor dataProcessor = new DataProcessor();

在 DataProcessor 对象上设置数据模板:dataProcessor.setDataTemplate("catalogDataTemplate.xml");

指定参数的值,并在 DataProcessor 对象上设置参数:Hashtable parameters = new Hashtable();

parameters.put("id","catalog1");

dataProcessor.setParameters(parameters);

创建 Oracle 数据库的 JDBC 连接,并在 DataProcessor 对象上设置该连接:Class.forName("oracle.jdbc.OracleDriver");

String url="jdbc:oracle:thin:@localhost:1521:ORCL";

java.sql.Connection jdbcConnection = DriverManager.getConnection(url,

"OE", "password");

dataProcessor.setConnection(jdbcConnection);

设置输出 XML 文档并运行数据处理器:dataProcessor.setOutput("catalogData.xml");

dataProcessor.processData();

数据库将生成 XML 文档 (catalogData.xml),如下所示: <?xml version="1.0" encoding="UTF-8"?>

<catalogDataTemplate>

<id>catalog1</id>

<LIST_G_CATALOG>

<G_CATALOG>

<CATALOGID>catalog1</CATALOGID>

<JOURNAL>Oracle Magazine</JOURNAL>

<PUBLISHER>Oracle Publishing</PUBLISHER>

<EDITION>March-April 2006</EDITION>

<TITLE>Commanding ASM</TITLE>

<AUTHOR>Arup Nanda</AUTHOR>

</G_CATALOG>

</LIST_G_CATALOG>

</catalogDataTemplate>

以下是 XMLPublisher.java 类:package xmlpublisher;

import com.sun.java.util.collections.Hashtable;

import oracle.apps.xdo.XDOException;

import oracle.apps.xdo.common.pdf.util.PDFDocMerger;

import oracle.apps.xdo.dataengine.DataProcessor;

import oracle.apps.xdo.template.FOProcessor;

import oracle.apps.xdo.template.fo.util.FOUtility;

import oracle.xml.parser.v2.NSResolver;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.lang.reflect.Array;

import java.sql.DriverManager;

import java.sql.SQLException;

public class XMLPublisher {

public XMLPublisher() {

}

public void foProcessorEngine() {

try {

FOProcessor processor = new FOProcessor();

processor.setData("catalog.xml");

processor.setTemplate("catalog.xsl");

processor.setOutput("catalog.pdf");

processor.setOutputFormat(FOProcessor.FORMAT_PDF);

processor.generate();

} catch (XDOException e) {

System.out.println("XDOException " + e.getMessage());

}

}

public void xslFoUtility() {

try {

InputStream[] input = new InputStream[2];

InputStream firstFOStream = FOUtility.createFO("catalog2.xml", "catalog.xsl");

InputStream secondFOStream = FOUtility.createFO("catalog3.xml", "catalog.xsl");

Array.set(input, 0, firstFOStream);

Array.set(input, 1, secondFOStream);

InputStream mergedFOStream = FOUtility.mergeFOs(input, null);

if (mergedFOStream == null) {

System.out.println("Merge failed.");

}

FOProcessor processor = new FOProcessor();

processor.setData(mergedFOStream);

processor.setTemplate((String) null);

processor.setOutput("catalog2.pdf");

processor.setOutputFormat(FOProcessor.FORMAT_PDF);

processor.generate();

} catch (XDOException e) {

System.out.println("XDOException" + e.getMessage());

}

}

public void pdfDocumentMerger() {

try {

FileInputStream[] inputStreams = new FileInputStream[2];

inputStreams[0] = new FileInputStream("catalog.pdf");

inputStreams[1] = new FileInputStream("catalog2.pdf");

FileOutputStream outputStream = new FileOutputStream("catalog3.pdf");

PDFDocMerger pdfMerger = new PDFDocMerger(inputStreams, outputStream);

pdfMerger.setPageNumberCoordinates(300, 20);

pdfMerger.setPageNumberFontInfo("Courier", 10);

pdfMerger.setPageNumberValue(1, 1);

pdfMerger.process();

pdfMerger = null;

} catch (XDOException e) {

System.out.println("XDOException" + e.getMessage());

} catch (FileNotFoundException e) {

System.out.println("FileNotFoundException " + e.getMessage());

}

}

public void dataEngine() {

try {

Class.forName("oracle.jdbc.OracleDriver");

String url = "jdbc:oracle:thin:@localhost:1521:ORCL";

java.sql.Connection jdbcConnection = DriverManager.getConnection(url,

"OE", "password");

DataProcessor dataProcessor = new DataProcessor();

dataProcessor.setDataTemplate("catalogDataTemplate.xml");

Hashtable parameters = new Hashtable();

parameters.put("id", "catalog1");

dataProcessor.setParameters(parameters);

dataProcessor.setConnection(jdbcConnection);

dataProcessor.setOutput("catalogData.xml");

dataProcessor.processData();

} catch (SQLException e) {

System.out.println("SQLException " + e.getMessage());

} catch (ClassNotFoundException e) {

System.out.println("ClassNotFoundException " + e.getMessage());

} catch (XDOException e) {

System.out.println("XDOException" + e.getMessage());

}

}

public static void main(String[] argv) {

XMLPublisher xmlPublisher = new XMLPublisher();

xmlPublisher.foProcessorEngine();

xmlPublisher.xslFoUtility();

xmlPublisher.pdfDocumentMerger();

xmlPublisher.dataEngine();

}

}

接下来,运行 Oracle XML Publisher 应用程序。右键单击 XMLPublisher.java 类并选择 Run,如图 3 所示。这将生成 PDF 和 XML 报表:

图 3.运行 XMLPublisher.java。

假如 FO Processor Engine 部分中的输出格式设为 HTML,则将生成输出 HTML 报表,如图 4 所示:

图 4.HTML 报表。

本文未讨论的 XMLPublisher API 可能也集成在类似过程中。

PDF Form Processing Engine 的 XML Publisher 类是 oracle.apps.xdo.template.FormProcessor

RTF Processor 的类是 oracle.apps.xdo.template.RTFProcessor

Document Processor 的类是 oracle.apps.xdo.batch.DocumentProcessor

PDF Book Binder Processor 的类是 oracle.apps.xdo.template.pdf.book.PDFBookBinder

结论

恭喜!您已经将 Oracle XML Publisher API 与 Oracle JDeveloper 集成在一起,可以生成 PDF、Excel、HTML 和 XML 报表了。

Deepak Vohra (dvohra09@yahoo.com) 是 NuBean 顾问、Web 开发人员、Sun 认证的 Java 程序员,并且是 Oracle 认证助理。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有