#!/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!
"; ### 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 "
\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
\n"; prText($xabstand , $ypos, $zeile); $zeilen_cnt++; $hinweis .= "$zeile "; } $hinweis .= "
\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
\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
\n"; prEnd();