我有興趣將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