PDF-Generierung mit Perl
Aus Wirthi's Wiki
Mit dem Paket PDF::Reuse lassen sich unter Perl relativ einfach PDF-Dateien generieren. Besonders geeignet ist das Tool dafür, bestehende PDFs als Vorlagen zu übernehmen und zu vervollständigen.
Inhaltsverzeichnis |
[bearbeiten] PDF::Reuse
Das Paket PDF::Reuse ist im CPAN enthalten und kann von dort heruntergeladen werden. Die aktuelle Adresse ist http://search.cpan.org/dist/PDF-Reuse/. Eine ausführliche Hilfe auf Englisch ist unter http://search.cpan.org/~larslund/PDF-Reuse-0.33/Reuse.pm zu finden.
[bearbeiten] Programmrumpf
In einem typischen PDF::Reuse-Programm wird folgender Programmrumpf vorkommen:
use PDF::Reuse;
prFile('ausgabe.pdf');
#Befehle zur Generierung des Inhalts
prEnd();
Mittels prFile(DATEINAME) wird eine PDF-Datei zum Schreiben geöffnet (oder angelegt, wenn sie noch nicht existiert). prEnd schließt die Datei. Zwischen diesen Befehlen können nun die Befehle zur Generierung des eigentlichen Inhalts eingefügt werden.
[bearbeiten] Befehle
Hier werden nur einige wichtige Befehle vorgestellt. Die gesamte Liste der zur Verfügung stehenden Befehle kann in der offiziellen Dokumentation nachgelesen werden; ein Link befindet sich ganz unten bei den Weblinks.
[bearbeiten] prText
prText ( $x, $y, $string, $align, $rotation )
Mit diesem Befehl wird Text ausgegeben.
- die ersten beiden Parameter geben die Position des ersten Zeichens an, wobei (0/0) links unten liegt
- der dritte Parameter ist die auszugebende Zeichenkette
- der vierte Parameter beschreibt die Ausrichtung; mögliche Werte sind left, right und center
- mit dem fünften Parameter kann eine Drehung des Textes erreicht werden; die Wertangabe erfolgt in Grad.
[bearbeiten] prFont
prFont ( $fontName )
Mit dem Befehl prFont kann die Schriftart der folgenden prText-Befehle eingestellt werden. Als Parameter wird der Name der zu verwendenden Schriftart übergeben. Vordefiniert für PDF-Dokumente sind folgende Schriftarten: Times-Roman, Times-Bold, Times-Italic, Times-BoldItalic, Courier, Courier-Bold, Courier-Oblique, Courier-BoldOblique, Helvetica, Helvetica-Bold, Helvetica-Oblique, Helvetica-BoldOblique. Aus Vorlagen eingefügte Schriftarten können ebenso verwendet werden.
[bearbeiten] prFontSize
prFontSize ( $size )
Mit diesem Befehl lässt sich die Schriftgröße der folgenden prText-Befehle einstellen.
[bearbeiten] prImage
prImage ( $pdfFile, [$page, $imageNo, $effect, $adjust, $x, $y, $degree, $size, $xsize, $ysize] )
Dieser etwas komplexere Befehl erlaubt die trotzdem einfache Übernahme von Bildern aus einer anderen PDF-Datei (Vorlage). Die Parameter können entweder in der hier angegebenen Reihenfolge übergeben werden oder per Hashtable. Alle Parameter außer der Quelldatei sind optional.
Wichtige Parameter sind:
- pdfFile: beschreibt den Pfad der Quell-PDF-Datei
- page: die Seite im Quell-PDF, auf der sich das Bild befindet
- imageNo: die fortlaufende Nummer (Index) des Bildes auf der Quell-Seite
- x: X-Koordinate der linken untern Ecke des Bildes im Zieldokument
- y: X-Koordinate der linken untern Ecke des Bildes im Zieldokument
- size: Stecken des Bildes auf beiden Achsen. Als Faktor angegeben, "1" entspricht der Größe des Quell-Bildes (zu beachten ist, dass das Bild im Quell-Dokument ebenfalls bereits gestreckt sein kann; der Faktor bezieht sich auf das Bild selber, nicht dessen Darstellung in der Quelle).
- xsize: Streckung des Bildes um einen Faktor horizontal; siehe auch
size - ysize: Streckung des Bildes um einen Faktor vertikal; siehe auch
size
Beispiel:
prImage({ file => 'gutscheinvorlage.pdf',
x => 370,
y => 700,
imageNo => 1,
size => 0.5 } );
[bearbeiten] Probleme
Sonderzeichen des deutschen Alphabets (etwa öÖäÄüÜß) können normalerweise zwar korrekt dargestellt werden, werden allerdings teilweise falsch behandelt. So können Texte, die derartige Zeichen enthalten, nicht (korrekt) zentriert oder rechtsbündig dargestellt werden. Problem scheint dabei zu sein, dass die Textlängen-Erkennung (Funktion prStrWidth) nicht korrekt arbeitet. Man kann sich hier mit angenäherten Korrekturfaktoren abhelfen. Sollte jemand eine bessere Lösung kennen, bitte mir mitteilen.
[bearbeiten] Weblinks
- Paket-Homepage (engl.)
- Dokumentation (engl.)
