我有兴趣将Oracle-APEX生成的页面内容导出到外部文件,同时保留尽可能多的格式。最终,我想将其导出为.doc,.xls。或.pdf格式。目前,我正在使用.doc文件进行测试。使用DBMS_LOB导出Oracle APEX区域
目前,我试图通过创建一个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)你想在一个'.doc'中存储一个HTML页面,我怀疑可能会给出奇怪的结果(MS Word将会读取html,但可能不会很好地处理CSS和javascript)。 – 2014-11-03 01:39:13
假设我没有使用.html文件而不是.doc,并且我能够使JavaScript工作(或者只是从浏览器的“开发者视图”模式复制HTML),您是否认为这种方法是可行? – jobrien9 2014-11-03 18:16:33
我认为这值得尝试。我想另外一种选择是在PL/SQL中自己生成页面内容,然后它可以让你控制内容的渲染/存储位置。 – 2014-11-03 22:34:06