PDF-Ausgabe mit dynamischen Bildern

Bereits vor einiger Zeit haben wir Tipps zur druckfreundlichen PDF-Ausgabe mit Application Express und dem BI Publisher vorgestellt. In diesen beiden Dokumenten finden Sie Informationen zur Installation und Konfiguration des BI Publisher im Zusammenhang mit Application Express.

Heute erfahren Sie, wie Sie dynamische Bilder (also Bilder aus einer Tabelle) in die PDF-Dokumente aufnehmen können - dies ist interessant, wenn Sie bspw. einen Produktkatalog verwalten und dazu PDF-Ausgaben erzeugen möchten - natürlich sollen die Produktfotos ebenfalls im Dokument enthalten sein.

Als Ausgangspunkt werden wir eine Anwendung zur "Bildbearbeitung mit Application Express nehmen". Diese war ebenfalls Gegenstand eines Community-Tipps. Damit Sie diesen nun jedoch nicht komplett nacharbeiten müssen, können Sie die Anwendung als hier als Packaged Application herunterladen. Packen Sie das ZIP-Archiv einfach aus und importieren Sie die Anwendung ganz normal (Zeichensatz UTF-8).

Importieren der Bildbearbeitungs-Anwendung

Abbildung 1: Importieren der Bildbearbeitungs-Anwendung

Starten Sie die Anwendung nach dem Import und laden Sie einige Bilder hoch. Anschließend sollte die Anwendungsseite in etwa wie in Abbildung 2 aussehen.

Anwendungsseite nach dem Hochladen einiger Bilder

Abbildung 2: Anwendungsseite nach dem Hochladen einiger Bilder

Machen Sie sich, insbesondere wenn Sie mit einer eigenen Anwendung und eigenen Tabellen arbeiten, vor dem Erstellen des PDF-Layouts noch mit einigen Details vertraut - folgende Informationen sind für die weitere Arbeit wichtig:

  • Die Bilder der heruntergeladenen Anwendung liegen in der Tabelle INTERMEDIA_IMAGE in der Spalte DOKUMENT (im Community-Tipp wird dagegen die Tabelle BILDER_TAB und die Spalte BILD verwendet).
  • Die URL zum Abrufen und Darstellen eines Bildes ist wie folgt:
    #OWNER#.DISPLAY_INTMEDIA_IMAGE?P_ID=[Bild-ID]
    
    Diese URL benötigen zum Einbinden der Bilder in das Layout-Template.

Hinterlegen Sie nun die SQL-Abfrage für die PDF-Ausgabe. Alle Informationen der Webseite sollen auch auf dem PDF-Dokument enthalten sein. Navigieren Sie dazu zu den Gemeinsamen Komponenten und dort zu Berichtabfragen. Klicken Sie dort auf Erstellen, um eine neue Abfrage anzulegen.

Berichtsabfrage erstellen

Abbildung 3: Berichtsabfrage erstellen

Achten Sie darauf, dass Sie die Anwendungs- und Sessioninformationen einbeziehen; konkrete Elemente müssen Sie jedoch in diesem Beispiel nicht auswählen. Wenn Sie allerdings mit einer eigenen Anwendung arbeiten und Filter in ihren SQL-Abfragen verwenden, nehmen Sie die relevanten Elemente hier mit Hinzufügen auf. Klicken Sie danach auf Weiter und hinterlegen Sie danach die SQL-Abfrage, welche die Daten für die PDF-Ausgabe zusammenstellt.

select 
  id,
  substr(e.name, instr(e.name, '/') + 1)                    as name, 
  e.dokument.getwidth() || ' x ' || e.dokument.getHeight() as dimensionen, 
  e.dokument.getfileformat()                               as fileformat, 
  e.dokument.getcontentformat()                            as contentformat,
  /* Hier setzen wir die URL für ein Bild zusammen; der Einfachheit halber
   * tun wir das bereits in der SQL-Abfrage und nicht in der Definition des
   * Layouts
   */ 
  apex_application.get_g_base_href || 
  '[DB Schema].DISPLAY_INTMEDIA_IMAGE?P_ID='||id as image_url
from intermedia_image e

Wichtig ist vor allem die "Bild-URL"; in diesem Beispiel wird das Bild durch die Stored Procedure DISPLAY_INTMEDIA_IMAGE bereitgestellt. Wenn Sie mit einer eigenen Anwendung und einem eigenen Datenbestand arbeiten, achten Sie darauf, dass die generierte URL funktioniert (testen Sie ggfs. mit dem Browser - wenn Sie das gewünschte Bild sehen, ist die URL korrekt. Achten Sie auch darauf, dass der BI-Publisher keine APEX-Anwendung ist - also außerhalb des APEX Session-Kontext arbeitet. Kodieren Sie das Parsing Schema Ihrer Anwendung ("[DB Schema]" in der vorletzten Zeile) zunächst hart. Wenn das Layout fertig ist, können Sie dies in "#OWNER#" ändern.

Wenn Sie mit einer OracleXE-Datenbank oder mit Oracle11g und dem PL/SQL Embedded Gateway arbeiten, müssen Sie den direkten Zugriff auf die Stored Procedure DISPLAY_INTMEDIA_IMAGE zunächst freischalten - in diesem Blog Posting von Dietmar Aust erfahren Sie, wie das geht.

Nachdem Sie auf Weiter geklickt und damit das SQL gespeichert haben, markieren Sie die Option XML-Daten und laden Sie die Berichtsdaten mit der Schaltfläche Herunterladen als XML-Dokument auf Ihre lokale Festplatte.

XML-Daten herunterladen

Abbildung 4: XML-Daten herunterladen

Lassen Sie Ihren Browser nun auf diesem Dialog stehen - die nächsten Schritte werden mit Microsoft Word durchgeführt. Anschließend (nach der Erstellung des Layouts mit Microsoft Word) setzen Sie die Bearbeitung an dieser Stelle fort.

Wenn Sie jetzt die Berichtsabfrage dennoch jetzt schon speichern möchten, müssen Sie beim Layout Generisches Berichtslayout verwenden auswählen. In diesem Fall laden Sie das fertige Layout nach Erstellung als Berichtslayout (ebenfalls unter Gemeinsame Komponenten) hoch und weisen es anschließend der Berichtsabfrage unter Berichtslayout zu.

Damit die BI Publisher Komponenten in MS Word bereitstehen, muss BI Publisher Desktop auf Ihrem PC installiert sein. Installationshinweise dazu finden Sie im im How To-Dokument "Maßgeschneiderte Layouts mit dem BI Publisher".

Wählen Sie im BI Publisher Menü Daten die Option XML-Daten laden.

XML-Daten in BI Publicher Desktop hochladen

Abbildung 5: XML-Daten in BI Publicher Desktop hochladen

Nach der Meldung Daten erfolgreich geladen können Sie mit der Gestaltung des Layouts beginnen. Navigieren Sie im Menü Einfügen zum Tabellen-Assistent - die Bilder sollen wie auf der Web-Seite in Tabellenform dargestellt werden.

BI Publisher Desktop: Tabellen Assistent

Abbildung 6: BI Publisher Desktop: "Tabellen Assistent"

Wählen Sie die Darstellungsform Tabelle und klicken Sie auf Weiter.

Daten-Set auswählen

Abbildung 7: Daten-Set auswählen

Wählen Sie nun die Wiederholungsstruktur (ROWSET/ROW) im XML-Dokument wie in Abbildung 7 aus.

Spalten für tabellarische Darstellung wählen

Abbildung 8: Spalten für tabellarische Darstellung wählen

Klicken Sie in den Dialogen für Gruppierung und Sortierung einfach auf Weiter. Im letzten Dialog (Abbildung 9) können Sie die Spaltenüberschriften auswählen; nehmen Sie Änderungen nach Wunsch vor und erstellen Sie die Tabelle mit einem Klick auf Beenden.

Spaltenüberschriften festlegen

Abbildung 9: Spaltenüberschriften festlegen

Nun sehen Sie eine Tabelle in Ihrem Word-Dokument (Abbildung 10).

Erstellte Tabelle im Word-Dokument

Abbildung 10: Erstellte Tabelle im Word-Dokument

Speichern Sie dieses Dokument nun mit dem normalen Word-Dialog Speichern unter ab. Speichern Sie es jedoch nicht als .doc-Datei, sondern im Rich Text Format (RTF) an. Anschließend können Sie sich mit Klick auf Vorschau und PDF ansehen, wie das PDF-Dokument mit diesem Layout aussehen wird.

PDF-Vorschau

Abbildung 11: PDF-Vorschau

Dies ist nun noch nicht, was wir wollen: Statt der URL soll das tatsächliche Bild dargestellt werden. Klicken Sie dazu in Word in die Tabellenspalte und entfernen Sie das Feld IMAGE_URL, so dass die Spalte leer ist. Fügen Sie dann mit dem Standard-Word-Dialog ein Bild ein (Abbildung 12: Insert Picture from File)

Bild in Tabellenspalte einfügen

Abbildung 12: Bild in Tabellenspalte einfügen

Dieses Bild dient nur als Platzhalter; sie können also ein beliebiges Bild nehmen; wichtig ist, dass Sie einfache Variante Insert und auf keinen Fall Link to File nehmen (Abbildung 13).

Das Bild dient als Platzhalter - nehmen Sie irgendein Bild

Abbildung 13: Das Bild dient als Platzhalter - nehmen Sie irgendein Bild

Wenn Sie das Bild in der Tabelle sehen, navigieren Sie zu dessen Eigenschaften (Doppelklick). Stellen Sie Höhe und Breite nach Wunsch ein und navigieren Sie dann zum Reiter Web. Tragen Sie dort als Alternative Text die Spalte mit der URL wie folgt ein:

url:{IMAGE_URL}
URL zum Bild als "Alternativen Text" eintragen

Abbildung 14: URL zum Bild als "Alternativen Text" eintragen

Schauen Sie sich die Vorschau nochmals an - Sie sollte nun in etwa wie in Abbildung 15 aussehen.

Vorschau mit eingebetteten Bildern

Abbildung 15: Vorschau mit eingebetteten Bildern

Nun können Sie das Layout noch anpassen, bis es Ihnen gefällt. Speichern Sie dann die RTF-Datei nochmals ab, schließen Sie MS Word und navigieren Sie zurück zum Dialog Berichtslayout in Application Express ... Dort waren Sie vorhin stehengeblieben - Klicken Sie auf Weiter und laden Sie im folgenden Dialog (Abbildung 16) die soeben erzeugte RTF-Datei hoch.

RTF-Datei hochladen

Abbildung 16: RTF-Datei hochladen

Im dann folgenden letzten Dialog können Sie die PDF-Ausgabe nochmals testen. Wenn alles zu Ihrer Zugriedenheit funktioniert, können Sie den gelb markierten Link in die Zwischenablage kopieren, auf Fertig stellen klicken und den kopierten Link schließlich in Ihre Anwendungsseite aufnehmen. (Wichtig: wenn im Link ein "&SESSION_ID." steht, machen Sie daraus ein "&SESSION.")

Fertig: Testen ...

Abbildung 17: Fertig: Testen ...

Navigieren Sie dazu zu der Seite, auf welcher Sie den Link zur PDF-Ausgabe bereitstellen möchten und hinterlegen Sie an geeigneter Stelle (in einer HTML Region oder im Header bzw. Footer einer anderen Region) folgenden HTML-Code:

<a href="f?p=&APP_ID.:0:&SESSION.:PRINT_REPORT=Bilder%20PDF">... als PDF ausgeben</a>

Das Endergebnis sieht dann wie in Abbildung 18 aus

Endergebnis: PDF-Ausgabe mit dynamischen Bildern

Abbildung 18: Endergebnis: PDF-Ausgabe mit dynamischen Bildern

Wenn Sie möchten, können Sie nun in der Berichtsabfrage das hart kodierte Parsing Schema Ihrer Anwendung durch das dynamische #OWNER# ersetzen. Navigieren Sie dazu wieder zu den Gemeinsamen Komponenten, dort zu den Berichtsabfragen, dann zu Ihrer neuen Berichtsabfrage (hier: Bilder PDF) und bearbeiten Sie dort die hinterlegte SQL-Abfrage wie in Abbildung 19 illustriert.

Hart kodiertes Parsing Schema in der Berichtsabfrage durch #OWNER# ersetzen

Abbildung 19: Hart kodiertes Parsing Schema in der Berichtsabfrage durch #OWNER# ersetzen

Fertig - dieses Beispiel lässt sich problemlos auf andere Datenbestände und Anwendungen wie Produktkataloge oder Mitarbeiterverzeichnisse übertragen. Mit dem Oracle BI Publisher können so auch anspruchsvolle Druckausgaben problemlos erledigt werden.

Zurück zur Community-Seite