Thread Ausgabe von PDF::Create in Variable (7 answers)
Opened by bianca at 2009-12-26 17:10

rosti
 2011-10-23 19:46
#153470 #153470
User since
2011-03-19
3492 Artikel
BenutzerIn
[Homepage]
user image
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!

View full thread Ausgabe von PDF::Create in Variable