2014-10-31 140 views
1

我有兴趣将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>')); 

如果任何人的一个简单的方法来做到这一点,最好是涉及一个简单的引用到我的网页地区知道,我将不胜感激。

+0

这里有一些问题。 (1)你想获得为一个页面生成的HTML,但Apex不会给你内置的访问权限(也许一些聪明的Javascript后,加载页面可能会做的工作); (2)你想在一个'.doc'中存储一个HTML页面,我怀疑可能会给出奇怪的结果(MS Word将会读取html,但可能不会很好地处理CSS和javascript)。 – 2014-11-03 01:39:13

+0

假设我没有使用.html文件而不是.doc,并且我能够使JavaScript工作(或者只是从浏览器的“开发者视图”模式复制HTML),您是否认为这种方法是可行? – jobrien9 2014-11-03 18:16:33

+0

我认为这值得尝试。我想另外一种选择是在PL/SQL中自己生成页面内容,然后它可以让你控制内容的渲染/存储位置。 – 2014-11-03 22:34:06

回答

0

有一种方法(3种方式)获取PDF - http://www.oracle.com/technetwork/developer-tools/apex/learnmore/custom-pdf-reports-1953918.pdf。 您也可以使用交互式报告,它具有导出选项。但默认情况下,它只能以HTML格式导出。

这不完全是你问的,但你不需要编写代码。

+0

据您所知,PDF中概述的三个选项中的任何一个都需要最终用户下载任何其他软件?乍一看,它看起来并不像它,但我想确定。 – jobrien9 2014-11-03 15:19:27

+0

据我所知,用户不必安装任何东西。 – Dmitry 2014-11-03 20:35:32