So erstellen Sie ein PDF einer Seite

Dieser Artikel beschreibt, wie Sie von einer Seite über FOP ein PDF generieren.

Ähnlich der Druckansicht einer Seite können Sie auch ein PDF aus einer Seite generieren. Weblication® CMS stellt Ihnen entsprechende Framework-Funktionen zur Verfügung, die auf allgemeinen Techniken (FOP, XSLFO) aufsetzen.

Hinweis

Mittlerweile bieten viele Provider auf Ihren Webservern aus Sicherheitsgründen Java nicht mehr an.
In solchen Fällen können Sie auf andere Tools zum Erstellen von PDF-Dateien aus einer Webseite zurückgreifen, z.B.:

Voraussetzungen

Zusätzlich zu den Weblication® CMS Voraussetzungen sind folgende Komponenten zur Erstellung von PDF-Dateien erforderlich:

Die Installation bzw. das Ablegen von Apache FOP wird nachfolgend beschrieben.
Ob Ihr Webserver Java Runtime Environment in seiner Umgebung bereithält, klären Sie bitte mit dem Provider bzw. Serveradmin.

Schritt 1: Installation von Apache FOP

Installieren Sie die Bibliotheken von Apache FOP. Laden Sie sich hierzu die Binary Version von den Apache.org-Seiten herunter (siehe weiterführende Links unten).

Das ZIP-Archiv (z.B. /fop-2.6-bin.zip) enthält ein fop-Verzeichnis. Entpacken Sie dieses Verzeichnis in folgendes Verzeichnis:
/weblication/grid5/appsExtern

Sofern das Verzeichnis noch nicht besteht, legen Sie dies entsprechend an.
Auf Unix/Linux-System vergeben Sie der Datei .../fop/fop (ohne Dateiendung) Ausführenrechte (z.B. chmod 755).

Schritt 2: Pfad für Java Home eintragen (Java Runtime Environment)

Für die Erstellung von PDF-Dateien über Apache FOP erfordert diese externe Anwendung eine Java Runtime Umgebung. Erfragen Sie bei Ihrem Provider, über welchen Pfad Java auf dem Webserver genutzt werden kann. Den Pfad zu Java Home tragen Sie manuell in der Konfigurationsdatei von Weblication® ein. Für die Angabe in der Weblication® CMS Konfiguration ist die Angabe eines Pfades erforderlich (java alleine als Angabe ist nicht ausreichend).

Am Beispiel von Domainfactory wird dies nachfolgend angeführt. Beachten Sie, dass es bei Domainfactory zusätzlich erforderlich ist, die fop-Datei (/weblication/grid5/appsExtern/fop/fop) anzupassen. Im Kommandoaufruf "fop_exec_command" ist ein weiterer Parameter wegen Speichernutzung erforderlich (-Xmx200m).

Beispiel: Auszug aus der /weblication/grid5/conf/default.wConf.php zu Java

<wConf version="15">
  ...
  <!-- sofern PDFs aus Seiten generiert werden sollen, ist JAVA erforderlich: -->
  <!--
    Attribute:
    home: Pfad zu Java
      Beispielpfad zu Java Home bei Domainfactory:
      lt. Kundenmenü (Punkt Auftragsinformationen - Häufig benutzte Kommandozeilenprogramme):
      Java Runtime Environment (JRE)  /opt/openjdk8/jre/bin  Version 1.8.0_191
      home="/opt/openjdk8/jre/bin"
      !! Mit Java-Version 1.8 waren die Tests leider erfolglos !!
      Lokal z.B.: home="C:\Program Files\Java\jre6"
    ldLibraryPath: Umgebungsvariable LD_LIBRARY_PATH
      (ab Version 006.002.054.000 verfügbar)
      evtl. bei Domainfactory erforderlich, z.B.: ldLibraryPath="/opt/jdk1.6/jre/lib/i386/jli/"
    call: Aufruf von Java aktivieren/deaktivieren (1|0)
  -->
  <!--<java home="/opt/jdk1.8.0_20/jre/" ldLibraryPath="" call="1"/>-->
  <java home="/opt/openjdk8/jre/bin" ldLibraryPath="" call="1"/>
  ...
</wConf>

Beispiel: Auszug aus der fop-Datei zum Kommandoaufruf (bei Domainfactory)

...
fop_exec_command="exec "$JAVACMD" -Xmx200m $LOGCHOICE $LOGLEVEL 
-classpath "$LOCALCLASSPATH" $FOP_OPTS org.apache.fop.cli.Main 
$fop_exec_args"
...

Schritt 3: Erstellung von PDF-Dateien über die pre.php aktivieren

Das aktuelle Beispielprojekt ist hinsichtlich der Erstellung von PDF-Dateien bereits standardmässig hierfür umgesetzt. Die Funktion ist bei Auslieferung deaktiviert, da zuvor die FOP-Bibliotheken installiert werden müssen (siehe Schritt 1).

Aktivieren Sie die Einstellung über die pre.php Datei des globalen Projektes. Setzen Sie hierzu die Variable $preVars['allowPDF'] auf true (siehe nachfolgendes Quelltextbeispiel).

Etwas weiter unten im Quelltext der pre.php ist definiert, wo das PDF temporär abgelegt wird. Dies können Sie bei Bedarf optional anpassen.

Beispiel: Auszug aus /wGlobalProject/wGlobal/scripts/pre.php des Beispielprojektes

...
// Falls die Anzeige als PDF erlaubt sein soll
$preVars['allowPDF'] = true; // Standard: false
...
...
if(
$preVars['allowPDF'] && $preVars['viewMode'] == 'pdf'){
$pathPDF = '/weblication/grid5/tmpHTTP/'.md5($_SERVER['PHP_SELF']).'.pdf';
$xslFoStr = wPDF::createXSLFOFromXHTML(wProjectCur::getPathLayout().'/wGlobal/layout/templates/fop/standard.wDocument.php', $preResult);
//print $xslFoStr;exit;
wPDF::createPDFFromXSLFO($pathPDF, $xslFoStr);
//print '<iframe style="width:100%;height:800px" src="'.$pathPDF.'"></iframe>';
wResponse::redirect($pathPDF);
}
...

Schritt 4: Ausgabe-Template anpassen

Sie verfügen auf Grundlage des Beispielprojektes bereits über die Funktion zum Erstellen einer PDF-Datei aus einer Inhaltsseite.

Die Ausgabe können Sie nun entsprechend Ihren Vorstellungen anpassen.

Das Ausgabe-Template wird mit dem Beispielprojekt unter folgendem Pfad mitgeliefert:

/Ihr-Globales-Project/wGlobal/layout/templates/fop/standard.wDocument.php

Dieses Template hat bereits die grundlegenden Bereiche umgesetzt und kann entsprechend von Ihnen angepasst und erweitert werden. Hierfür sind XSLFO-Kenntnisse erforderlich! Über die weiterführenden Links finden Sie einen Auszug aus entsprechenden Dokumentationen.

Je nach zugrundeliegender Seite muß das fo-Template um die entsprechenden Elemente erweitert werden, um die aus der generierten XHTML-Seite vorhandenen HTML-Elemente (Text, Tabelle, Link, etc.) im PDF generieren zu können. Je nach Seite kann es ansonstein beim Generieren des PDF-Dokumentes zu einem 404 Fehler kommen.

Schritt 5: Seite zur PDF-Erstellung aufrufen

Um eine Seite als PDF-Datei zu generieren, hängen Sie der URL den Parameter "viewmode=pdf" an, also z.B.: http://domain.dd/de/index.php?viewmode=pdf . Innerhalb eines Projektes können Sie z.B. eine Schaltfläche anbieten, die diesen Parameter automatisch der aktuellen URL anfügt.

Wichtige Hinweise

Beachten Sie bitte, dass die Umsetzung zur Erstellung von PDF-Dateien über FOP eine Zusatzfunktionalität darstellt, die nicht über den regulären CMS-Support abgewickelt werden kann. Gerne helfen wir Ihnen bei Problemen über eine Projektdienstleistung weiter, was Sie bitte über den Support reingeben.