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)
{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):
my $linepos = 700;
foreach my $rec(@$recordset){
my $params = record_hilfs_funktion($rec, $linepos);
$pdf->string($font, @{$params->{artnr}});
$pdf->string($font, @{$params->{anz}});
$pdf->string($font, @{$params->{price}});
$linepos -= 20;
}
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:
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
my $linepos = 520;
my $cols = recParams(
{
artnr => 'Artikelnummer',
arttitle => 'Artikelbezeichnung',
anz => 'Anzahl',
preis => 'Einzelpreis',
xpreis => 'Summenpreis',
},
$linepos
);
foreach my $col(1,2,3,4){
$page->string($f1, @{$cols->{$col}});
}
sub recParams{
my $rec = shift;
my $ypos = shift;
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)