HTML-Vorschau eines PDF oder Office-Dokumentes bereitstellen: mit Application Express

Wie man in Application Express-Anwendungen mit Dokumenten umgehen kann, war bereits Thema einiger Community Tipps:

Lädt der Endanwender die Dokumente herunter, so öffnet sich in aller Regel die entsprechende Desktop-Applikation (bspw. der Adobe® Reader® für PDF-Dokumente). Mitunter ist genau dies jedoch nicht gewünscht und es wäre besser, dem Endanwender eine HTML-Vorschau, welche vom Browser ohne weiteres dargestellt werden kann, zu präsentieren. Wie Sie das erreichen, erfahren Sie in diesem Tipp. Arbeiten Sie zunächst die beiden oben an erster Stelle stehenden Tipps Dateien in einer Application Express-Anwendung hochladen und Dateien aus einer Application Express-Anwendung herunterladen durch. Sie sollten dann eine Anwendungsseite wie in Abbildung 1 vor sich sehen ...

Fertige Seite zum Herunterladen gespeicherter Dokumente

Abbildung 1: Fertige Seite zum Herunterladen gespeicherter Dokumente

Klickt man auf den Dokumentnamen, öffnet sich (in diesem Fall) das entsprechende Browser-Plugin und das Dokument wird dargestellt. Aber nun zur reinen HTML-Vorschau: Die "Intelligenz", aus einem PDF ein HTML-Dokument zu machen, ist bereits in der Datenbank enthalten - sie gehört zur Volltextengine Oracle TEXT, kann jedoch auch unabhängig davon genutzt werden. Lassen Sie zunächst als Vorbereitung folgendes SQL-Skript ablaufen (Sie benötigen allerdings entweder die Rolle CTXAPP oder EXECUTE-Privilegien auf das Paket CTX_DDL).

begin
  ctx_ddl.drop_policy(
    policy_name => 'filter_policy'
  );
end;
/
sho err

begin
  ctx_ddl.create_policy(
    policy_name => 'filter_policy',
    filter      => 'CTXSYS.AUTO_FILTER'
  );
end;
/
sho err

create or replace function filter_document(
  p_document in blob
) return clob
is
  l_data clob;
begin
  dbms_lob.createtemporary(
    lob_loc => l_data, 
    cache   => true, 
    dur     => dbms_lob.call
  );
  ctx_doc.policy_filter(
    policy_name => 'filter_policy',
    document    => p_document, 
    restab      => l_data
  );
  return l_data;
end;
/
sho err

create or replace procedure preview_document(
  p_id in dokument_tab.id%TYPE
)
is
  v_clob    clob;
  v_blob    blob;
  v_dstoff  pls_integer := 1;
  v_srcoff  pls_integer := 1;
  v_langctx pls_integer := 0;
  v_warning pls_integer := 1;
begin
  select filter_document(dokument) into v_clob
  from dokument_tab where id = p_id;
  
  dbms_lob.createtemporary(
    lob_loc => v_blob, 
    cache   => true, 
    dur     => dbms_lob.call
  );
  dbms_lob.converttoblob(
    dest_lob   =>   v_blob,
    src_clob   =>   v_clob,
    amount     =>   dbms_lob.getlength(v_clob),
    dest_offset =>  v_dstoff,
    src_offset  =>  v_srcoff,
    blob_csid   =>  nls_charset_id('AL32UTF8'),
    lang_context => v_langctx,
    warning      => v_warning
  );
  owa_util.mime_header('text/html', false);
  htp.p('content-length: '||dbms_lob.getlength(v_blob));
  owa_util.http_header_close;

  wpg_docload.download_file(v_blob);
  dbms_lob.freetemporary(v_blob);
end;
/

grant execute on preview_document to public
/

Das Skript erzeugt zum einen die Funktion FILTER_DOCUMENT, welche das (binäre) Dokument als BLOB entgegennimmt und die HTML-Version als CLOB zurückliefert. Die eigentliche Arbeit wird dabei von der Prozedur POLICY_FILTER im Paket CTX_DOC erledigt. Die Prozedur PREVIEW_DOCUMENT ist für unsere APEX-Applikation geschrieben: Sie nimmt die ID als Parameter auf und gibt das gefilterte Dokument im Browser aus.

Navigieren Sie nun zu den Eigenschaften des Berichts, der die Dokumentübersicht darstellt, und fügen Sie eine Link-Spalte hinzu (Abbildung 2).

Link-Spalte zu einem Bericht hinzufügen

Abbildung 2: Link-Spalte zu einem Bericht hinzufügen

Als Link-Ziel rufen Sie die soeben erzeugte Prozedur PREVIEW_DOCUMENT auf (Abbildung 3).

#OWNER#.PREVIEW_DOCUMENT?P_ID=#ID#
Link-Ziel konfigurieren

Abbildung 3: Link-Ziel konfigurieren

Probieren Sie es nun aus: Die Dokumentübersicht enthält nun eine neue Spalte mit dem Text [Preview] - wenn Sie darauf klicken, wird eine reine HTML-Variante des Dokuments angezeigt: Abbildung 4 zeigt ein Beispiel:

Das Ergebnis: Darstellung eines Office-Dokuments als reines HTML im Browser

Abbildung 4: Das Ergebnis: Darstellung eines Office-Dokuments als reines HTML im Browser

Wenn Sie mit Microsoft Office 2007 arbeiten, ist das Patchset 11.1.0.7 für Sie wichtig; Stand heute unterstützt nur diese Datenbankversion Office 2007.

Zurück zur Community-Seite