Thread Ausgabe von PDF::Create in Variable
(7 answers)
Opened by bianca at 2009-12-26 17:10
Idee von heute morgen:
untenstehende Funktion erzeugt die Parameterliste für die PDF::Create::string()-Method: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 # 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 => [9, 40, $ypos, "$rec->{arttitle}/$rec->{artnr}"], 2 => [9, 310, $ypos, $rec->{anz}, 'r'], 3 => [9, 400, $ypos, $rec->{preis}, 'r'], 4 => [9, 490, $ypos, $rec->{xpreis}, 'r'], }; return $params; } Im Beispiel gibt es 4 Spalten mit entsprechenden Positionen und Ausrichtung. Zum Erzeugen einer Tabellenzeile ist dann eine Schleife über diese 4 Spalten zu legen: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # Tabelle mit der Bestellung, Table header my $linepos = 550; my $cols = recParams( { artnr => 'Artikelnummer', arttitle => 'Artikelbezeichnung', anz => 'Anzahl', preis => 'Einzelpreis '.pack("C", 128), # EURO xpreis => 'Summenpreis '.pack("C", 128), }, $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 Erzeugen der einzelnen Zeilen, Beispiel: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 # Tabelle der Rechnung erstellen foreach my $ord(@$order){ my $xpreis = $ord->{anz} * $ord->{preis}; $ord->{xpreis} = $xpreis; my $cols = recParams($ord, $linepos); # nun alles in einer Schleife über die 4 Spalten foreach my $col(1,2,3,4){ $page->string($f1, @{$cols->{$col}}); } $linepos -= 12; $sumpreis += $xpreis; } Anstelle der For-Schleife ist hier möglicherweise eine Callbackfunktion geschickter, sofern die Records bereits in der Datenquelle über eine Schleife gelesen werden (DB-Abfrage, fetchrow_hashref). Das hängt jedoch vom Gesamtprogramm ab, ob eine Callbackfunktion gerufen oder ein Array übergeben wird In der For-Schleife bzw. Callbackfunktion musst Du nur noch die $linepos abfragen, wenn die einen bestimmten Wert erreicht hat, wird eine neue A4-Seite erzeugt. Einen Table-Footer erzeugst Du zum Schluss ganz ähnlich.... Also: Meine PDF-Lieferscheine habe ich fertig ;) Viele Grüße! |