服务器 频道

Oracle 格式化对象处理器

   【IT168 服务器学院】使用格式化对象处理器以为 PDF 格式呈现 Oracle HTML DB 报表
    许多最终用户希望能够将基于 Web 的报表生成具印刷质量的报表。使用 Oracle HTML DB 1.6,开发人员可以使用 Javascript 和格式化对象处理器 (FOP) 将 Oracle HTML DB 报表输出为 PDF 文档,FOP 是一个由 Apache 软件基金会提供的打印格式转换应用程序。本技术说明将提供将 Oracle HTML DB 报表呈现为 PDF 格式所需要素的示例和概述。 这技术可以实现对结果文档的高度控制。根据此技术说明中提供的样式表,我们将把 Oracle HTML DB 报表显示为这种格式以进行打印 — 页面都标记有页码且每页都包含相同的页眉和页脚。(要查看最终输出示例,请访问此处。)

注意:此技术说明假定读者对 Oracle HTML DB、Java、JavaScript 和 XML 有一个基本的了解。

所需软件
Oracle HTML DB 1.6
Oracle 数据库 10g
过程概述
将 Oracle HTML DB 报表呈现为 PDF 的过程要求具备以下要素:

Oracle HTML DB 1.6 -- 利用此版本的 HTML DB 以 FOP 可识别的 XML 格式生成报表。
Java 平台 -- Java Server Page (JSP) 该平台上可以执行 XML/XSL 转换。
Javascript -- 在产生 Oracle HTML DB 报表的页面上,需要一定的 Javascript 来将报表输出传送到 JSP。可扩展样式表语言转换 (XSLT) -- JSP 需要使用 XSLT 文档将 XML 格式的报表转换为 PDF。
过程示例要演示此概念,我们会将“输出到 PDF”链接添加到包含报表的 HTML DB 区域的模板中。当用户单击此链接时,会弹出一个新浏览器窗口,其中包含该报表的 PDF 版本。尽管我们将在 HR.EMPLOYEES 表上使用一个简单的查询,但是此技术说提供的格式化代码并不是特定于某个查询,而应该适合于您构建的任何查询。此示例的前面几个步骤是在 Oracle HTML DB 环境的外部执行的,以将各种支持要素到位。

    第 1 步:将 FOP 库添加到 Java 环境中

    为了将接收到的 XML 报表输出呈现为某个特定格式(在本例中是 PDF),您的 Java 环境需要访问 FOP 库。在此示例中,我们将使用用于该环境的 Oracle Application Server Containers for J2EE (OC4J) 10g ,因此会将这些库添加到 $ORACLE_HOME/oc4j/j2ee/home/config/application.xml 中。

http://xml.apache.org/fop/ 下载和解压缩 FOP 库
将解压缩后的 fop-0.20.5 目录置于 $ORACLE_HOME/oc4j/j2ee 中
在 $ORACLE_HOME/oc4j/j2ee/home/config/application.xml 中加入下列内容:
<!-- libraries below added for FOP support -->
<library path="../../../j2ee/fop-0.20.5/build/fop.jar"/>
<library path="../../../j2ee/fop-0.20.5/lib/batik.jar"/>
<library path="../../../j2ee/fop-0.20.5/lib/avalon-framework-cvs-20020806.jar" /><!-- above libraries added for FOP support

-->
第 2 步:将与 Oracle HTML DB 相关的呈现组件添加到 Java 环境中
有两个专用于此 Oracle HTML DB PDF 呈现过程的两个文件:htmldb_fop_render.jsp

和htmldb_example.xslt。简而言之,htmldb_fop_render.jsp 接收由 Javascript(稍后在下面的步骤中加入) 提供的 XML 报表,并使用

htmldb_example.xslt 和 FOP 库执行 XML/XSL 转换。尽管可以将这两个文件放到其他地方,但现在为方便起见,将它们都放到

$ORACLE_HOME/oc4j/j2ee/home/default-web-app 中。

第 3a 步:创建 Oracle HTML DB 报表

创建一个标量数据类型报表,该报表将用于此示例。如前所述,上面添加的格式化代码不针对特定报表,因此任何标量数据类型的报表都将可以应用这些格式化代码。

登录进入 Oracle HTML DB 工作区。
如果希望将此示例报表添加到某个应用程序中,单击该应用程序的名称,转至 Application Builder(应用程序建立器)主页。
单击 Create Page(创建表)。
选择 Page with Component 并单击 Next(下一步)。
选择 Report 并单击 Next(下一步)。
选择 SQL Report 并单击Next(下一步)。
提供要使用的查询,根据要求完成报表向导。下面简单的几行代码就可以满足我们的目的:
select first_name "First", last_name "Last", email "Email ID",
job_id "Job", hire_date "Date of Hire", salary "Compensation"
from hr.employees

请注意,如果您的 HTML DB 应用程序模式无权访问 HR 模式,只需为此示例使用另一个查询。
第 3b 步:将某个页面级项目和分支添加到 Oracle HTML DB 报表中要说明从应用在转换中的 XSLT 中引用页面级项的能力,请添加一个项目和一个分支以将用户返回到当前页面。

从新创建页面的 Page Definition(页面定义)视图中,单击 Items(项目)部分中的 Create 图标。
选择 Text 并单击 Next。
选择 Text Field (always submits page when Enter pressed),并单击 Next。
将该项命名为 MY_REPORT_PARAMETER,然后单击 Next。
为 My Report Parameter 提供一个 Label 值,然后单击 Next。
接受 Create Page Item 向导中的其它缺省值,并返回到 Page Definition 视图。
单击 Branches 部分中的 Create 图标。
为目标页面提供 &APP_PAGE_ID. 时,接受 Create Branch(创建分支)向导的所有缺省值。
单击 Create Branch。
最后,为将 MY_REPORT_PARAMETER 包含在您的报表区域中,将 MY_REPORT_PARAMETER 的查询更改为:
select first_name "First", last_name "Last", email "Email ID",
job_id "Job", hire_date "Date of Hire", salary "Compensation"
from hr.employees
where salary > :MY_REPORT_PARAMETER or :MY_REPORT_PARAMETER IS null

第 4 步:向报表页向添加 PDF 链接

从您的报表页面的 Page Definition 视图中,单击显示在 Shared Components列的 Templates部分中的区域模板的名称。
将下面某处的链接定义添加到此页面的 Template字段中。将该链接直接放在 #CLOSE# 替换字符串的前面,这样呈现的效果更佳。
<a href="Javascript:pdf_GrabXML(''f?p=&APP_ID.:&APP_PAGE_ID.:&APP_SESSION.:FLOW_FOP_OUTPUT_#REGION_ID#'')">输出至 PDF 文档</a>
单击 Apply Changes。
第 5 步:修改并上载 Javascript 文件
下载此 Javascript 文件并更改显示在此行中的路径:
var g_Render_URL = ''http://<host name>:<port>/htmldb_fop_render.jsp'';

以和您上面步骤 2 中添加的 JSP 的位置保持一致。例如:
var g_Render_URL = ''http://myhostname.com:8888/htmldb_fop_render.jsp'';

返回到 Oracle HTML DB 中,并单击屏幕顶部的 Application Builder 选项卡。
单击 Shared Components图标。
单击 Files部分中的 Static Files 链接。
单击 Create。
单击 Browse,转至修改过的 htmldb_pdf.js 文件。
单击 Upload。
第 6 步:在报表页面上引用 Javascript 函数
返回到包含报表区域的页面的 Page Definition(页面定义)视图。
将下列行添加到 HTML Header 字段中,在此页面的标题调用上载的 Javascript:
<script src="#WORKSPACE_IMAGES#htmldb_pdf.js"></script>

单击 Apply Changes(应用更改)。
第 7 步:运行报表页面并单击 Output to PDF Document 链接
总结

此技术说明提供了使用 Oracle HTML DB 1.6 的一个简单示例和将 HTML DB 报表输出表现为 PDF 文档的一个 Java 环境。过程可汇总如下:
HTML DB 在 HTML DB 应用程序页面中生成 HTML 报表。
最终用户单击页面上的某个链接。
该链接调用 Javascript,Javascript 通知 HTML DB 引擎以某种特定的 XML 格式将报表发送至 JSP。
JSP 使用提供的 XSLT 和 FOP 库执行 XML/XSL 转换。
FOP 将该文档呈现为 PDF。

根据这一概念,Oracle HTML DB 开发人员现在可以使用 FOP 来控制生成的报表输出的所有方面,直至特定格式中的版式,特定格式如

PDF、PCL、PS、SVG、Print、AWT、MIF 和 TXT。

0
相关文章