【发布时间】:2014-11-01 04:38:49
【问题描述】:
我有兴趣将 Oracle-APEX 生成的页面内容导出到外部文件,同时尽可能多地保留格式。最后,我想将其导出为 .doc、.xls. 或 .pdf 格式。目前,我正在使用 .doc 文件进行测试。
目前,我正在尝试通过创建一个 PL/SQL 匿名块“进程”来执行此操作,该块在按下“导出”按钮时执行。根据我在网上找到的一个示例,如果在此过程中使用以下代码,我可以将页面中的一项输出到 .doc 文件:
DECLARE
test_blob BLOB;
BEGIN
dbms_lob.createtemporary(test_blob, FALSE);
dbms_lob.open(test_blob, dbms_lob.lob_readwrite);
DBMS_LOB.APPEND(test_blob, UTL_RAW.CAST_TO_RAW(:P4016_ITEM_NAME));
OWA_UTIL.mime_header('application/doc', FALSE);
HTP.p('Content-Length: ' || DBMS_LOB.getlength(test_blob));
htp.p('Content-Disposition: attachment; filename= "text.doc"');
OWA_UTIL.http_header_close;
WPG_DOCLOAD.download_file(test_blob);
dbms_lob.close(test_blob);
END;
但是,据我所知,我想在我的页面上输出一些包含表格的区域,这些区域不被视为项目(我对 APEX 还是很陌生)。如果我在DMS_LOB.APPEND 行中包含表名,我会收到一条错误消息。有谁知道引用这些区域的简单方法?
我发现的唯一解决方法是在导出的文件中复制页面,方法是根据我的 APEX 页面的 HTML 将用于填充 HTML 表格的 SQL 查询的结果封装起来。换句话说,如果我想用斜体字,我会这样做:
...
dbms_lob.append(test_blob, UTL_RAW.CAST_TO_RAW('<html><i>'));
dbms_lob.append(test_blob, [PARSED SQL QUERY]);
dbms_lob.append(test_blob, UTL_RAW.CAST_TO_RAW('</i></html>'));
如果有人知道执行此操作的更简单方法,最好是对我的页面区域进行简单引用,我将不胜感激。
【问题讨论】:
-
这里有一些问题。 (1) 您想获取页面的生成 HTML,但 Apex 没有提供对此的内置访问权限(也许在页面加载后一些聪明的 Javascript 可能会完成这项工作); (2) 您想将 HTML 页面存储在
.doc中,我怀疑这可能会产生奇怪的结果(MS Word 会读取 html,但可能无法很好地处理 CSS 和 javascript)。 -
假设我可以很好地使用 .html 文件而不是 .doc 并且我能够让 JavaScript 工作(或者只是从浏览器的“开发人员视图”模式复制 HTML),您认为这种方法可行吗?
-
我觉得值得一试。我想另一种选择是在 PL/SQL 中自己生成页面内容,然后您可以控制内容的呈现/存储位置。
标签: html plsql blob oracle-apex