Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Generieren von PDF-Dokumenten

Geschrieben von: Christian Koller
Kategorie: ASP Tricks

This printed page brought to you by AlphaSierraPapa

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 Dokument

Ein 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 Webserver

ActivePDF 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 Printer

Um die grundlegenden Fähigkeiten von activePDF nützen zu können, empfiehlt sich die Installation der zwei Komponenten activePDF Server und activePDF Printer.

activePDF Server

Die 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).


Bild 1: activePDF Configuration Editor

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 Printer

Die 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 ASP

Zum 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 APPrinter.StartDoc APServer.NewPrinterName.

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 arrZeilen = Split(strText , vbcrlf). Er schreibt jede einzelne Zeile in eine Zelle des Arrays arrZeilen.

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).


Bild 2: Ausgabe des Skripts

Die generierte PDF Datei sieht dann wie folgt aus:


Bild 3: Generierte PDF Datei

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ßbemerkung

Die 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.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20001017.zip

Verwandte Artikel

Generieren von Zeichnungen in PDF-Dokumenten
http:/www.aspheute.com/artikel/20001103.htm

Links zu anderen Sites

Über Adobe PDF
http://www.adobe.de/products/acrobat/adobepdf.html
ActivePDF Portfolio
http://www.activepdf.com/default.asp?PI=4333
activePDF Printer
http://www.activepdf.com/default.asp?PI=4555
ActivePDF Server
http://www.activepdf.com/default.asp?PI=4791
Adobe Acrobat 4.0
http://www.adobe.de/products/acrobat/main.html
Adobe Acrobat Reader 4.0
http://www.adobe.de/products/acrobat/readermain.html
Create Adobe PDF Online
http://cpdf1.adobe.com
HOWTO: Troubleshoot IUSR_machine Permissions Problem
http://support.microsoft.com/support/kb/articles/Q188/7/12.ASP
PDF-Workflow, Einführung in die PDF Technologie
http://www.visionwork.net/vaw-frames-d.htm

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.