Sehr oft kommt die Frage in unseren APEX Kursen auf, wie man ein PDF in einer Seite anzeigen kann. In unserem Fall stammt das PDF aus einer Tabelle der Oracle Datenbank.
Vorbereitung:
- Tabelle erstellen
Beispiel-Tabelle: emp_lob
create table emp_lob (
EMPNO NUMBER(4,0),
ENAME VARCHAR2(10 BYTE),
DATEINAME VARCHAR2(512 BYTE),
BESCHREIBUNG VARCHAR2(4000 BYTE),
DATEITYP VARCHAR2(100 BYTE),
L_UPDATE DATE,
BILD BLOB)
- Form mit Report auf diese Tabelle legen. Damit können Sie dann die PDF in Ihre Tabelle laden
- In APEX ein neues Application Item (Shared Components / Application Logic / Application Item) anlegen (Name: EMPNO) und dieses Item auf unrestricted setzen.
in APEX einen Application Process (Shared Components / Application Logic / Application Process) anlegen: Name getPDF und als Ajax Prozes definieren
Der Process hat folgenden Code:
begin
for file in (select * from emp_lob
where empno = :EMPNO
and dateityp='application/pdf') loop
sys.htp.init;
sys.owa_util.mime_header( file.dateityp, FALSE );
sys.htp.p('Content-length: ' || sys.dbms_lob.getlength( file.bild));
sys.htp.p('Content-Disposition: inline; filename="' || file.fname || '"' );
sys.htp.p('Cache-Control: max-age=3600'); -- tell the browser to cache for one hour, adjust as necessary
sys.owa_util.http_header_close;
sys.wpg_docload.download_file( file.bild );
apex_application.stop_apex_engine;
end loop;
end;
Legen Sie eine neue Seite an mit einer Static Content Region:
Passen Sie bitte die IP-Adresse und evtl. den Port auf Ihrem Server an
In dieser Region (wir gehen hier jetzt von Seite 1 aus) sollte ein Iten mit Namen P1_EMPNO liegen. Dort kann dann die entsprechende Zeile in dem sich das PDF befindet ausgewählt werden.
Die Seite sollte dann noch über einem Submit verfügen (z.B. über einen Button)
<object
data="http://127.0.0.1:8080/ords/f?p=100:0:&SESSION.:APPLICATION_PROCESS=getPDF:::EMPNO:&P1_EMPNO." style="width:100%;height:700px">
<a href="http://127.0.0.1:8080/ords/f?p=100:0:&SESSION.:APPLICATION_PROCESS=getPDF:::EMPNO:&P1_EMPNO.">PDF laden</a>
</object>
Und nun viel Spass mit der Anzeige alle Ihrer PDF´s. Wir zeigen damit unsere PDF Rechnungen in der APEX an :-)
Wir sehen uns (hoffentlich) bald in einem unserer Kurse …