25.02.2014 Aufrufe

Linux-Magazin In Zockerhänden (Vorschau)

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Perl-Snapshot 05/2011<br />

Programmieren<br />

www.linux-magazin.de<br />

103<br />

Abbildung 1: Laser-taugliche Etiketten, 30 pro Blatt, 4200 pro Karton. Der<br />

einzelne Aufkleber ist billig und dabei praktisch.<br />

Abbildung 2: Im Open Office Writer öffnet der Labels-Eintrag aus dem »Datei |<br />

Neu«-Menü eine reiche Auswahl von Aufkleber-Formaten.<br />

So zeigt sich in Abbildung 5, dass im<br />

Dokument unter dem Tag »office:body«<br />

ein Tag namens »office:text« hängt, das<br />

nach einigen Sequence-Deklarationen<br />

wiederum einen Textabsatz vom Typ<br />

»text:p« (Paragraph) enthält. Dieser<br />

stellt sich als eine Tabellenzeile mit drei<br />

Spalten heraus, für deren Rahmen jeweils<br />

Elemente vom Typ »draw:frame«<br />

verantwortlich zeichnen, die wiederum<br />

ein »draw:text-box«-Element mit einem<br />

»text:p«-Element mitbringen, in denen<br />

sich endlich die eingegebenen Test-Texte<br />

(»test1«, …) wiederfinden.<br />

Somit fördert ein Xpath-Query vom Format<br />

//office:body/office:text/text:p<br />

alle Tabellenzeilen zutage (die ihrerseits<br />

wieder Spaltenrahmen enthalten),<br />

während sich die Tabellenelemente (drei<br />

in jeder Zeile) relativ dazu unter ».../<br />

draw:frame/drawtext-box/text:p« finden.<br />

Das Skript in Listing 2 bedient sich des<br />

ersten Xpath-Query, um zunächst das<br />

Dokument um so viele Tabellenzeilen zu<br />

erweitern, wie nötig sind, damit alle auszudruckenden<br />

Adressdaten darin Platz<br />

finden. Mit dem zweiten Query stöbert<br />

es durch alle Labels und stopft jeweils die<br />

dafür bestimmten Textdaten hinein.<br />

Zum Öffnen der ODT-Datei bedient es<br />

sich wieder des Konstruktors »ooDocument()«,<br />

der auf die Datei »ready.odt«<br />

zugreift, die ihrerseits zuvor die Funktion<br />

»cp« aus dem Modul Sysadm::<strong>In</strong>stall in<br />

Zeile 21 aus dem Template »template.odt«<br />

erzeugt hat.<br />

Die gegenwärtige Version von OpenOffice::OODoc<br />

weist einen Bug auf, der sie<br />

UTF-8-kodierte Daten inkorrekt verarbeiten<br />

lässt, falls diese Umlaute enthalten.<br />

Abbildung 3: Der User tippt Beispieltexte in die Tabellenfelder des Open-Office-Dokuments ein.<br />

Die gewählte Einstellung »local_encoding<br />

=>»"""« behebt das Problem vorläufig,<br />

sollte aber eigentlich auf den Wert »utf8«<br />

gesetzt sein.<br />

Adressbuch einpflegen<br />

Die Rohdaten legt der User in der Datei<br />

»address-book.csv« (Abbildung 6)<br />

ab, von wo sie das Skript aus Listing<br />

2 mit dem CPAN-Modul Text::CSV_XS<br />

zeilenweise mit »getline()« ausliest. Die<br />

ab Zeile 60 definierte Funktion »addresses_scan«<br />

öffnet dazu die Datei mit dem<br />

Pragma »:encoding(utf8)«, damit Perl<br />

dort stehende und in UTF-8 kodierte Umlaute<br />

auch korrekt einliest und gleichzeitig<br />

intern in den dafür vorgesehenen<br />

Datenstrukturen das UTF-8-Flag setzt. E<br />

Listing 1: »oo-dumper«<br />

01 #!/usr/local/bin/perl ‐w<br />

02 use strict;<br />

03 use OpenOffice::OODoc;<br />

04<br />

05 (my $file) = @ARGV;<br />

06<br />

07 die "usage: $0 file" unless defined $file;<br />

08<br />

09 my $doc = ooDocument(<br />

10 file => $file,<br />

11 member => "content",<br />

12 );<br />

13<br />

14 (my $element) = $doc‐>selectElements(<br />

15 '//office:body');<br />

16<br />

17 print $element‐>_dump();

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!