Generieren von PDF-Dokumenten
Geschrieben von: Christian Koller Ein beliebtes Format für downloadbare Dokumente im Internet ist das Adobe Portable Document Format (PDF). Ein PDF Dokument ist unter fast jeder Plattform, sei es nun Windows, Mac OS, Unix, Linux oder OS/2 Warp auslesbar, solange man den Adobe Acrobat Reader benutzt, der gratis erhältlich ist. Bei der Darstellung eines PDF Dokumentes bleiben alle Schriften, Formatierungen, Grafiken und Farben erhalten, egal unter welchem Betriebsystem und mit welcher Software das PDF Dokmuent erstellt wurde. Überlicherweise benutzt man zur Erstellung von PDF Dokumenten die Adobe Acrobat Software, die unter Macintosh und Windows lauffähig und in verschiedenen Sprachen erhältlich ist. Zum Lesen eines PDF Dokuments dient der gratis erhältliche Adobe Acrobat Reader (6.3 MB), der für die folgenden Plattformen und Sprachen erhältlich ist: Plattformen, für die Acrobat Reader verfügbar ist:
Sprachenversionen von Acrobat Reader:
Sollten Sie einmal in die Verlegenheit kommen, unter ASP dynamisch PDF Dokumente erzeugen zu müssen, so könnten Sie für diese Aufgabe die ActivePDF Komponenten der Firma activePDF, Inc. benutzen. Die Preisskala für eine ein einsetzbares activePDF Bundlebeginnt bei etwa $ 560.- und ist je nach Einsatzzweck und Geschwindkeitsbedarf nach oben offen. Aufbau PDF DokumentEin PDF Dokument ist prinzipiell ähnlich wie ein HTML Formular aufgebaut. Es gibt formatierten Text, Links und sogar ein Fomular-Feature für PDF Dokumente, das über einen JavaScript Dialekt angesteuert werden kann. Eine deutschsprachige Einleitung in die PDF Technologie finden Sie zum Beispiel auf der Website von Vision Work. Einsatz von activePDF am WebserverActivePDF Komponenten sind in ASP Seiten und anderen Microsoft Produkten einsetzbar, da Sie alle über COM Interfaces verfügen. Allerdings gilt es bei der Installation der Komponenten, speziell unter Windows 2000, einiges zu beachten. Dazu aber später. Um die PDF-Ergebnisse der Komponente testen zu können, empfiehlt es sich die neueste Version des Adobe Acrobat Readers zu installieren. Download direkt von Adobe Deutschland möglich. Die ActivePDF Software zum Einsatz auf einem Webserver besteht aus mehreren Komponenten, die separat und in einem Bundle geordert werden können:
Daneben ist das activePDF Portfolio Bundle erhältlich, das in der Standard- und Proversion unerschiedliche Einzelkomponenten umfasst. Um PDF Dateien generieren zu können, benötigen Sie mindestens die activePDF Server und die activePDF Printer Komponenten. Installation von activePDF Server und activePDF PrinterUm die grundlegenden Fähigkeiten von activePDF nützen zu können, empfiehlt sich die Installation der zwei Komponenten activePDF Server und activePDF Printer. activePDF ServerDie activePDF Server Komponente stellt die grundlegenden Webserverfunktionen der activePDF Applikation bereit. Um die activePDF Server Komponente zu installieren, schließt man sämtliche Anwendungen und startet die Installationsdatei apsrvr.exe. Für die einwandfreie Funktion der Komponente unter Windows 2000 ist es in der aktuellen Version erforderlich, daß ein Postscript Drucker als lokaler Drucker am Webserver installiert wird. Der Drucker muß aber keineswegs wirklich vorhanden sein. Dies ist ein Kunstgriff, damit die Komponente Zugriff auf Schriften und Layout von Dokumenten über einen PostScript Treiber hat, der (noch) nicht als Stand-Alone Driver für Windows 2000 verfügbar ist. Der Hersteller empfiehlt unter Windows 2000 den "Apple Color LW 12/660 PS" Drucker unter dem Namen "activePDF PostScript Printer" zu installieren (Control Panel, Drucker, Drucker hinzufügen). Eine Schritt-für-Schritt Anweisung in Englisch dazu liegt im Installationsverzeichnis von activePDF Server in der Datei win2K.txt vor. Das Installationsverzeichnis ist standardmäßig C:\Programme\ActivePDF (Deutsches Windows 2000) oder C:\Program Files\ActivePDF (Englisches Windows 2000). Nach der "Installation" des Druckers muß die activePDF Komponente konfiguriert werden, damit Sie auf den Treiber dieses Druckers zugreift. Dies bewerkstelligt man mittels activePDF Configuration Editor, einem Programm das mit der activePDF Server Komponente automatisch installiert wird. Daneben kann man auch direkt bei Benutzung des activePDF Server (APServer) Objektes festlegen, welcher Druckertreiber zum Erstellen des PDF Dokumentes herangezogen wird (DefaultPrinter Property des APServer Objektes). Öffnen Sie also den activePDF Configuration Editor (über das Start Menü, Programme, ActivePDF, Server, Configuration Editor) und stellen Sie den Drucker für die PostScript Emulation auf "activePDF PostScript Printer" (siehe Bild 1).
Nun testen Sie die Komponente auf korrekte Installation. Führen Sie dazu das activePDF Test Utility (Start Button, Programme, ActivePDF, Server) aus. Ist die Komponente korrekt installiert, so erstellt das Test Utility ein PDF Dokument im Verzeichnis C:\WINNT\ActivePDF. Um die Komponente auch aus ASP Seiten heraus benutzen zu können, müßen Sie für das Installationsverzeichnis /WINNT/ActivePDF/ NTFS (NT File System) Lese- und Schreibrechte für den IUSR_MachineName Account definiert haben (siehe auch MSDN Artikel HOWTO: Troubleshoot IUSR_machine Permissions Problem). Nach der Installation der Komponente emfpiehlt sich ein Neustart des Computers. Man kann vor dem Neustart allerdings problemlos noch die activePDF Printer Komponente installieren. activePDF PrinterDie activePDF Printer Komponente benötigt man um PDF Dateien aus ASP Seiten heraus zu erstellen. Diese PDF Dateien werden entweder auf der Festplattte des Servers gespeichert oder mittels activePDF Server Komponente gleich zum Browser gesendet. Die Installation von activePDF Printer startet man durch das Ausführen der Installationsdatei apprntr.exe. Nach der Installation der Komponente muß der Server neu gestartet werden um die Installation abzuschließen. Wie man die activePDF Printer und die activePDF Server Komponenten einsetzt um ein PDF Dokument zu erstellen und zum Webserver zu senden, zeigt das folgende Beispiel. Erstellen von PDF Dokumenten in ASPZum Erstellen und Versenden von PDF Dokumenten kommen im nachfolgenden Beispiel die activePDF Server und activePDF Printer Komponenten zum Einsatz. Beide Komponenten werden unter VBScript (in ASP) wie folgt instanziert: ' activePDF Server Objekt Set APServer = Server.CreateObject("APServer.Object") ' activePDF Printer Objekt Set APPrinter = Server.CreateObject("APPrinter.Object") Nach Verwendung der Objekte ist darauf zu achten, daß die von den Objekten benutzen Resourcen wieder freigegeben werden: ' activePDF Server Objekt loeschen Set APServer = Nothing ' activePDF Printer Objekt loeschen Set APPrinter = Nothing Nun aber zum Beispiel: Das folgende Skript generiert ein PDF Dokument, legt es am Webserver ab und schreibt den Link zum abgelegten PDF Dokument zum Browser: <% Option Explicit %> <% Dim APServer, APPrinter Dim strText, arrZeilen, intI Dim physOutputDirectory, OutputDirectory, lRet Dim physPDFFileName, PDFFileName strText = "Dies ist ein Probetext." & vbcrlf & _ "Sie können diesen Text lesen, also hat es funktioniert!" ' Die Datei wird in das Root Verzeichnis geschrieben: OutputDirectory = "/" physOutputDirectory = Server.MapPath(OutputDirectory) ' Instanziere activePDF Server Objekt Set APServer = Server.CreateObject("APServer.Object") ' Instanziere activePDF Printer Objekt Set APPrinter = Server.CreateObject("APPrinter.Object") ' Ausgabe Verzeichnis zum Schreiben des PDF Dokumentes APServer.OutputDirectory = physOutputDirectory ' Erstellungsvorgang des PDF Dokumentes am Server starten lRet = APServer.StartPrinting() If (lRet <> 0) Then Response.Write "Fehler bei StartPrinting aufgetreten!" Response.End End If ' Erstellen des Dokumentes beginnen: ' APServer.NewPrinterName liefert den Namen ' fuer die temporaere Spooling Datei APPrinter.StartDoc APServer.NewPrinterName ' Font und Schriftgroesse festlegen APPrinter.FontName = "Arial" APPrinter.FontSize = 24 ' Text zum PDF Dokument schreiben arrZeilen = Split(strText , vbcrlf) For intI = 0 to UBound(arrZeilen) APPrinter.PrintText arrZeilen(intI), 0 Next ' Erstellen des Dokumentes ist beendet APPrinter.EndDoc ' Warten bis der PDF Job beendet ist. lRet = APServer.Wait(3) ' Maximale Wartezeit: 3 Sekunden If (lRet <> 0) then APServer.StopPrinting Response.Write "Es ist ein Fehler aufgetreten!" Set APPrinter = Nothing Set APServer = Nothing Response.End End If ' Erstellungsvorgang des PDF Dokumentes am Server ist fertig APServer.StopPrinting ' PDF Datei mit phsyikalischem und virtuellem Pfad: physPDFFileName = APServer.OutputDirectory & "\" & _ APServer.NewUniqueID & ".PDF" PDFFileName = OutputDirectory & APServer.NewUniqueID & ".PDF" ' Nachricht zum Browser schreiben ' Nachricht zum Browser schreiben Response.Write "Das PDF Dokument<br><b>" & physPDFFileName & _ "</b><br>wurde erzeugt und steht unter <br><b>" & _ "<a href=""" & PDFFileName & """>" & PDFFileName & "</a></b>" & _ "<br>zum Download bereit." ' WICHTIG: Resourcen der Objekte wieder freigeben Set APPrinter = Nothing Set APServer = Nothing %> Das Skript speichert einen zweizeiligen Text in der Variablen strText ab. Das Verzeichnis, in dem das generierte PDF Dokument zu speichern ist, wird in den Variablen OutputDirectory (virtueller Pfad) und physOutputDirectory (physikalischer Pfad) festgelegt. Danach werden die activePDF Server und Printer Objekte instanziert und in den Variablen APServer und APPrinter gespeichert. Das Ausgabeverzeichnis, in dem das PDF Dokument erstellt wird, wird mittels OutputDirectory Eigenschaft des activePDF Server Objektes festgelegt: ' Ausgabe Verzeichnis zum Schreiben des PDF Dokumentes APServer.OutputDirectory = physOutputDirectory Der Erstellungsvorgang für das PDF Dokument wird durch den Aufruf der StartPrinting Methode des activePDF ServerObjektes eingeleitet. Die Erstellung des eigentlichen PDF Dokumentes beginnt mit dem Ausführen des
Befehles Der Syntax für die StartDoc Methode des Printer Objektes lautet dabei wie folgt: APPrinter.StartDoc strPrinterName Der Parameter strPrinterName beinhaltet dabei den Namen des Druckers, dessen PostScript Treiber für die Erstellung des PDF Dokumentes verwendet wird. Wenn Sie im Configuration Editor der activePDF Server Komponente einen Drucker spezifiziert haben, so ist der Name dieses Druckers mittels APServer.NewPrinterName auslesebar. Daher macht der Befehl APPrinter.StartDoc APServer.NewPrinterName nichts anderes als den im Configuration Editor eingestellten Drucker als denjenigen festzulegen, dessen PostScript Treiber zur Erstellung des PDF Dokumentes benutzt wird. Schriftart und -größe werden über die FontName und FontSize Eigenschaften des Printer Objektes festgelegt. Eine Textzeile wird mit dem folgenden Befehl zum PDF Dokument hinzugefügt: APPrinter.PrintText strText, 0 Um den mehrzeiligen Text, der in der Variable strText gespeichert ist,
zum PDF Dokument zu schreiben, ist es leider notwendig, die einzelnen Zeilen des Textes
zu separieren. Genau dies macht der Befehl
Die im Array arrZeilen gespeicherten Textzeilen werden in der For..Next Schleife in das PDF Dokument geschrieben. Nachdem das Erstellen des PDF Dokumentes beendet ist, ruft man APPrinter.EndDoc auf um das PDF Dokument auf die Festplatte zu schreiben. Der Befehl APServer.StopPrinting schließlich beendet den Erstellungsprozeß des PDF Dokumentes. So schreibt das Skript noch den physikalischen und virtuellen Pfad des fertigen PDF Dokumentes zum Browser (siehe Bild 2).
Die generierte PDF Datei sieht dann wie folgt aus:
Dieses Skript zeigt nur die Grundfunktionen von activePDF auf. Die verfügbare Funktionalität ist schier überwältigend. So erlaubt das activePDF Printer Objekt das on-the-fly generieren von Zeichenobjekten (Linien, Kreise, Ellipsen, Radio Buttons, Textfelder) in PDF Dateien, das Importieren von Grafiken in den Formaten OLEPicture, BMP, JPG, TGA, PCX, DCX, und noch vieles mehr. SchlußbemerkungDie activePDF Produktfamilie mit Ihren Komponenten erlaubt das Generieren von PDF Dokumenten direkt aus ASP heraus. Neben dem Importieren aller möglichen Dokumente und Grafiken wird auch das direkte Schreiben von formatiertem Text und das Zeichnen von Grafikobjekten unterstützt. Das activePDF Server Objekt ist der Dreh- und Angelpunkt zur Manipulation von PDF Dokumenten am Server. Diese Objekt ist nicht nur für den eigentlichen Generierungsprozeß des PDF Dokumentes zuständig, das activePDF Server Objekt erlaubt auch das direkte Downloaden von generierten PDF Dokumenten zum Browser. Dieses Beispiel und einige andere Tricks werde ich, bei entsprechendem Interesse, in einer Fortsetzung dieses Artikels vorstellen. Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
Generieren von Zeichnungen in PDF-Dokumenten Links zu anderen Sites
Über Adobe PDF Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |