PDF Generator

Wie bekomme ich aus meinen Notes Ansichten, Masken und Richtextfeldern ein vernünftiges Dokument, das man ohne Probleme drucken und auch "Nicht-Notes-Usern" zugänglich machen kann? Vor diesem Problem steht man des Öfteren.

Die Basis

Aus diesem Gedanken heraus ist das PDF-Framework entstanden. Es basiert auf dem Package "com.etymon.pj" der Firma Etymon Systems. Dieses Package ist Open-Source und wird nach GNU General Public License vertrieben. Es bietet die Möglichkeit, vorhandene PDF-Dokumente als Vorlage zu öffnen und zu erweitern. Leider benötigt man, um mit diesem Tool zu arbeiten, einen tiefen Einblick in den Aufbau von PDF-Dokumenten.

Die Idee

Da dies für den "alltäglichen Gebrauch" zuviel Aufwand bedeuten würde, kam die Idee, eine weitere Abstraktionsschicht zu erzeugen, in der es keine "Td"- und "Tj"-Tags mehr gibt und der Text auch am Zeilenende automatisch umgebrochen oder auf einer neuen Seite fortgesetzt wird. Eine Umgebung, in der man Tabellen und Listen generieren, Bilder einfügen kann, ähnlich wie man es aus HTML oder Word und Co. kennt.

Warum PDF?

Sicherlich gibt es in der Notesumgebung auch die Möglichkeit, über OLE auf Word-Dokumente zuzugreifen und in diese zu schreiben. Was passiert aber, wenn der Nutzer kein Word zur Verfügung hat, er auf einer anderen Plattform oder aber nur vom Browser aus in einer Web-Application arbeitet?

Sicherlich braucht man zur Anzeige des Dokumentes immer noch den Acrobat-Reader von Adobe, aber dieser ist schließlich kostenlos und überall erhältlich.

Was macht denn nun eigentlich dieses Framework?

Das PDF-Framework ist ein Package von Java-Klassen, das man z.B. in einem Notes-Java-Agent einbinden kann. Es stellt dem Agent eine einfach anzusteuernde Schnittstelle zur Verfügung, über die der Agent z.B. den Inhalt eines Notes-Dokumentes in ein PDF-Dokument schreibt. Man hat somit die Möglichkeit, mit (theoretisch) fünf Zeilen Code ein PDF-File mit Inhalt zu erzeugen.

Weiterhin haben wir dazu einen HTML-Parser gebaut, der in der Lage ist, eingelesenen HTML-Code mit Hilfe des Frameworks in das PDF-Format umzusetzen.

Und wo kommen die PDF-Dateien dann hin?

Nachdem der Agent ein PDF erzeugt hat, muß dieses natürlich irgendwo abgelegt oder angezeigt werden.
Wenn es für spätere Verwendung noch gebraucht wird, ist es natürlich sinnvoll, die PDF-Datei einem Notes-Dokument anzuhängen. Hat es aber nur temporäre Bedeutung und wir arbeiten in einer Web-Applikation, so bietet das Framework die Möglichkeit, die PDF-Datei direkt an den Browser zu senden, über den der Aufruf an den Agenten abgesetzt wurde.


Download

Hier können Sie sich eine Demo-Datenbank herunterladen, in der das PDF-Framework eingebaut ist. Probieren sie doch einfach mal aus, wie man z.B. über Java-Agents Dokumente zum Drucken erzeugen kann.

Download "PdfDemoWeb.nsf"

Wie wird das Framework denn eingesetzt?

Das Tool besteht aus einer Anzahl von Klassen, die dem Programm (Agent) bekanntgemacht werden müssen, d.h. sie müssen zum einen dem Agent hinzugefügt werden (aus dem Filesystem oder aus einer Script-Ressource) und im Kopf des Agents über

import com.jnotes.PDF.*;

dem Rest bekannt gegeben werden. Neben den Klassen aus dem Package com.jnotes.PDF muß auch noch das jar-Archiv pj.jar eingebunden werden. Das ist die Basis, auf der das Framework basiert. Wenn das geschehen ist, kann es schon losgehen.

So baut man zum Beispiel ein "Hello World"-PDF.

      // anlegen eines neuen Objektes der Klasse "ULCPdf"
      // Optional ist die Übergabe eines Strings möglich,
      // der Pfad und Name eines Vorlage Dokumentes angibt.
      ULCPdf pdf = new ULCPdf();

      // Schriftart im PDF anlegen
      int fontStyle = pdf.addFontStyle("Helvetica", "PLAIN", 8);

      // Einen neuen Abschnitt erzeugen
      // addParagraph( int x, int y, int alignment, int page)
      int para = pdf.addParagraph(0,0,0,1);
      // ...und jetzt können wir schon in das PDF reinschreiben...
      pdf.addText("Hello World", para, fontStyle);
      // Na mal schaun, was passiert:
      pdf.writePdf("c:\\test.pdf");
 
   /*
      oder aber, wenn das PDF über einen WebAgent zum Browser soll:
      PrintWriter out = getAgentOutput();
      pdf.writeToWeb(out);
      Einbinden von java.io.PrintWriter nicht vergessen...
   */

O.K. hier noch das Package zum selber ausprobieren: Download "PDF.jar"


Fragen, Kritik, Anmerkungen? Dann nutzen Sie doch unser Kontaktformular!

Viel Spass!