Thread PDF::Create und UTF-8
(17 answers)
Opened by rosti at 2011-10-22 17:48
Mein Traum wäre das auch, aber im Moment träumen die Kinder in meinem Büro, wo mein PC steht ;)
Im Prinzip muss für jede Spalte eine $pdf->string oder $pdf->stringr Methode gerufen werden, je nach Ausrichtung und x,y-Position und das über jede Zeile. Wenn Du dafür einen universellen Wrapper schreiben möchtest: da sind sehr viele Parameter zu übergeben, welche auch noch voneinander abhängig sind. Im Wrapper kommt z.B.jeder Record als Hashreferenz (Ergebnismenge: Liste mit solchen Referenzen oder Callback über die DB-Class) Code (perl): (dl
)
{artnr => 'SH-001', anz => 2, price => 3.99} Das Template gibt z.B. vor, dass artnr mit $pdf->string und anz, price jeweils mit $pdf->stringr zu rufen ist wegen Schriftart, Schriftgröße, x-Pos, y-Pos und Ausrichtung. Letztere könnte auch als Parameter in die string()-Method gegeben werden. Pro Record sind dann 3 Templates zu befüllen, weil es 3 Spalten sind. Im Zuge der weiteren Programmstrukturierung brauchen wir eine Record-Funktion, die aus o.g. Hashreferenz je Datenfeld ein Array erzeugt, womit dann $pdf->string($font, @params) gefüttert wird. Über die Ergenismenge ist dann zu iteriern (Variante ohne Templates): Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 my $linepos = 700; # y Startposition foreach my $rec(@$recordset){ my $params = record_hilfs_funktion($rec, $linepos); # Hasref $pdf->string($font, @{$params->{artnr}}); $pdf->string($font, @{$params->{anz}}); $pdf->string($font, @{$params->{price}}); $linepos -= 20; # Schriftgröße beachten } # ohne Gewähr auf syntaktische Richtigkeit Das schreibe ich nachher mal ins Reine, das sieht schon ganz gut aus ;) Sowas in einer universell verwertbaren Funktion wird sehr schnell unübersichtlich, vorerst wird es bei mir nur einen PDF-Generator geben, der auf eine spezielle Aufgabenstellung zugeschnitten ist. Edit/getestet (gehört normalerweise in den anderen Fred), außer Protokoll: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 # Tabelle mit der Bestellung, Bestellnummer nicht vergessen my $linepos = 520; my $cols = recParams( { artnr => 'Artikelnummer', arttitle => 'Artikelbezeichnung', anz => 'Anzahl', preis => 'Einzelpreis', xpreis => 'Summenpreis', }, $linepos ); # nun alles in einer Schleife über die 4 Spalten foreach my $col(1,2,3,4){ $page->string($f1, @{$cols->{$col}}); } # damit ist ersteinmal der Tabellenheader erzeugt # Record-Hilfsfunktion sub recParams{ my $rec = shift; # {artnr, arttitle, anz, preis, xpreis} my $ypos = shift; # Hashref für den Return, Parameter für die Spalten my $params = { 1 => [10, 40, $ypos, "$rec->{arttitle}/$rec->{artnr}"], 2 => [10, 310, $ypos, $rec->{anz}, 'r'], 3 => [10, 400, $ypos, $rec->{preis}, 'r'], 4 => [10, 490, $ypos, $rec->{xpreis}, 'r'], }; return $params; } Last edited: 2011-10-23 13:24:40 +0200 (CEST) |