PDF-Generierung mit Perl


Aus Wirthi's Wiki

Wechseln zu: Navigation, Suche

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


Persönliche Werkzeuge