2014-10-31 121 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