Thread PDF::Create und UTF-8 (17 answers)
Opened by rosti at 2011-10-22 17:48

rosti
 2011-10-23 11:42
#153429 #153429
User since
2011-03-19
3194 Artikel
BenutzerIn
[Homepage]
user image
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)

View full thread PDF::Create und UTF-8