Schrift
[thread]6578[/thread]

Rechnung als PDF in Perl erzeugen (Seite 3)

Leser: 4


<< |< 1 2 3 >| >> 24 Einträge, 3 Seiten
Strat
 2004-12-22 00:04
#50069 #50069
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
ich verwende so gut wie nie den h2xs-rumpf bei eigenen Modulen, bei denen keine Chance besteht, dass sie jemals nach CPAN kommen. Und falls sich ein Modul als fuer CPAN geeignet herausstellt, dann erstelle ich mit h2xs den Modulrumpf, kopiere dann den Code rein und schreibe noch ein paar Tests und Doku
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pq
 2004-12-22 11:42
#50070 #50070
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Crian,21.12.2004, 10:41]Ich fiinde die ganzen zusätzlichen Dateien etc. für normale Module unnütz. Ein "normales" Modul besteht für mich aus einer Datei.[/quote]
ein package zu pflegen finde ich viel sinnvoller. und es ist, hat man mal
den anfang gemacht, auch nicht viel mehr aufwand.
nicht zu vergessen sind die tests!\n\n

<!--EDIT|pq|1103708557-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
root
 2006-01-25 20:31
#50071 #50071
User since
2003-08-15
120 Artikel
BenutzerIn
[default_avatar]
Ich wärm das hier mal wieder auf. Ein Modul habe ich natürlich nicht geschrieben, habe aber eine nachricht bekommen. Jemand will meinen Code :-)
Welch Ehre!

Also ich werf das einfach mal hier so rein...
Hab das Script seit ewig nicht angefasst, hier einfach die (hoffe ich) wichtigen Teile aus dem Programm:

Code: (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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#!/usr/bin/perl -w

#################################
# #
# von root mit hilfe #
# der perl-community.de #
# vollbracht! #
# #
# gerne zur freien Verfügung! #
# #
################################


use CGI::Carp 'fatalsToBrowser';
use CGI qw/:standard/;
use DBI;
use strict;
use Time::localtime;
use MIME::Lite;
use Time::HiRes qw(gettimeofday tv_interval usleep);
use PDF::Reuse;


# [..]


# Rechnung als PDF schreiben
my $stoppuhr_pdf = [gettimeofday];

my $rechnungsverz = '../customercare/rechnungen/'.$vertraege[$pArray]{'vertrag_id'};
unless(-e $rechnungsverz){
mkdir $rechnungsverz;
}
my $rechnungsdatei = 'rechnung'.$year.$rechnungsanzahl;
my $rechnungspath = $rechnungsverz."/".$rechnungsdatei.".pdf";
#$hinweis .= "Ich schreibe eine PDF-Rechnung!<br>";



### Beginne PDF zu generieren ###

# Zielfile bestimmen
prFile($rechnungspath);
# Vorlage laden
prForm( { file => '../templates/briefpapier.pdf',
'first' => 1,
'last' => 1 });
### TEXTE ### -------------------------------------------------------------------------------
my $abs = "root Software Engineering :-)";
my @adressfeld = split "<br>\n", $template{'empfaengeradresse'};

my @gruss = ("Wir bedanken uns für Ihren Auftrag.",
"Diese Rechnung ist sofort ohne weitere Mahnung fällig.",
"Bitte überweisen Sie den zu zahlenden Betrag innerhalb von 10 Tagen.",
"Die Rechnung wurde automatisch erstellt und ist ohne Unterschrift gültig."
);
#------------------------------------------------------------------------------------------
-----

### ADRESSEFELD ###
my $xabstand = 60;
my $yabstand = 680;
my $textsize = 10;
my $font = "Helvetica";
#------------------
my $zeilenabstand = 3;
prFontSize($textsize-4);
prText($xabstand, $yabstand, $abs);
$yabstand -= $zeilenabstand*3;
prFontSize($textsize);
my $zeilen_cnt=1;
foreach my $zeile (@adressfeld){
my $ypos =$yabstand - ($textsize+$zeilenabstand)*$zeilen_cnt;
#print "schreibe Adresse '$zeile' mit x:$xabstand y:$ypos <br>\n";
prText($xabstand , $ypos, $zeile);
$zeilen_cnt++;
$hinweis .= "$zeile ";
}
$hinweis .= "<br>\n";

### BETREFF ###
prFontSize($textsize);
prFont($font.'-Bold');
prText($xabstand, 555, $template{'betreff'});
prFont($font);

### R-DATEN ###
prFontSize($textsize);
prText($xabstand, 510, "Rechnungsnummer: ".$rechnungsnummer);
prText($xabstand, 500, "Vertragsnummer: ".$vertragnummer);
prText($xabstand, 490, "Projektname: ".$projektname);

### DATUM ###
# für rechtsbündig
my $xsize = prStrWidth($rechnungsdatum, $font, $textsize);
prFontSize($textsize);
prText($xabstand+440-$xsize, 480, $rechnungsdatum );

### RECHNUNGSTABELLE ###
prFontSize($textsize);
$yabstand = 450;
$zeilen_cnt=1;
my $ypossummen = 0;
foreach(@pdf_rechnungsposition){
if($zeilen_cnt>1){
# Eurozeichen
$pdf_rechnungsposition[($zeilen_cnt-1)][2] .=" ¤";
$pdf_rechnungsposition[($zeilen_cnt-1)][3] .=" ¤";
}
$ypossummen =$yabstand - ($textsize+$zeilenabstand)*$zeilen_cnt;
prText($xabstand , $ypossummen, $pdf_rechnungsposition[($zeilen_cnt-1)][0]);
# für rechtsbündig
my $xsize = prStrWidth($pdf_rechnungsposition[($zeilen_cnt-1)][1], $font, $textsize);
prText($xabstand-$xsize+285, $ypossummen, $pdf_rechnungsposition[($zeilen_cnt-1)][1]);
$xsize = prStrWidth($pdf_rechnungsposition[($zeilen_cnt-1)][2], $font, $textsize);
prText($xabstand-$xsize+365, $ypossummen, $pdf_rechnungsposition[($zeilen_cnt-1)][2]);
$xsize = prStrWidth($pdf_rechnungsposition[($zeilen_cnt-1)][3], $font, $textsize);
prText($xabstand-$xsize+440, $ypossummen, $pdf_rechnungsposition[($zeilen_cnt-1)][3]);
if($zeilen_cnt==1){
# Linie
&pdf_linie($xabstand, $xabstand+440, $ypossummen-3);
}
$zeilen_cnt++;
}
# Linie
&pdf_linie($xabstand, $xabstand+440, $ypossummen-3);

$zeilen_cnt=1;
# Summen
$ypossummen -= 3; # Lücke lassen
my $ypos;


foreach(@pdf_rechnungs_summen){
$script_laufzeit = tv_interval($script_start, [gettimeofday]);
print LOGFILE "Summe:$pdf_rechnungs_summen[($.)][1] T:$script_laufzeit V:$vertraege[$pArray]{'vertrag_id'}\n";
}
foreach(@pdf_rechnungs_summen){
$script_laufzeit = tv_interval($script_start, [gettimeofday]);
print LOGFILE "T: schreibe Summe $pdf_rechnungs_summen[($zeilen_cnt-1)][1] T:$script_laufzeit V:$vertraege[$pArray]{'vertrag_id'}\n";
$ypos =$ypossummen - ($textsize+$zeilenabstand)*$zeilen_cnt;
# für rechtsbündig
$xsize = prStrWidth($pdf_rechnungs_summen[($zeilen_cnt-1)][0], $font, $textsize);
my $linien_x_start = $xabstand-$xsize+390;
prText($linien_x_start, $ypos, $pdf_rechnungs_summen[($zeilen_cnt-1)][0]);
$xsize = prStrWidth($pdf_rechnungs_summen[($zeilen_cnt-1)][1], $font, $textsize);
prText($xabstand-$xsize+440 , $ypos, $pdf_rechnungs_summen[($zeilen_cnt-1)][1]);
if($pdf_rechnungs_summen[($zeilen_cnt-1)][2] eq 'black'){
# Linie
&pdf_linie($xabstand-$xsize+440, $xabstand+440, $ypos-3);
}
last if($. > 100);#?
$zeilen_cnt++;
}
&pdf_linie(355, $xabstand+440, $ypos-3);
&pdf_linie(355, $xabstand+440, $ypos-4.5);


### GRUSS ###
$yabstand = 200;
$textsize = 10;
$zeilenabstand = 3;
#------------------
prFontSize($textsize);
$zeilen_cnt=1;
foreach my $zeile (@gruss){
my $ypos =$yabstand - ($textsize+$zeilenabstand)*$zeilen_cnt;
#print "schreibe Gruss '$zeile' mit x:$xabstand y:$ypos <br>\n";
prText($xabstand , $ypos, $zeile);
$zeilen_cnt++;
}

my $pdf_prozesszeit = tv_interval($stoppuhr_pdf, [gettimeofday]);
#die("Prozeszeit zu lang") if ($pdf_prozesszeit >0.5);
#$hinweis .= "PDF für $vertraege[$pArray]{'bezeichnung'} ($vertraege[$pArray]{'vertrag_id'}) schreiben dauerte ".$pdf_prozesszeit."Sekunden<br>\n";


prEnd();
Crian
 2006-01-26 16:23
#50072 #50072
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
danke, das könnte irgendwann mal nützlich sein
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< |< 1 2 3 >| >> 24 Einträge, 3 Seiten



View all threads created 2004-12-16 22:59.