From: Moritz Bunkus Date: Thu, 14 Jun 2007 13:28:57 +0000 (+0000) Subject: Reportgenerator: Beim Listenexport als PDF kann das PDF auch direkt ausgedruckt werden. X-Git-Tag: release-2.4.3^2~126 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=49f0957f2d464a13f5cf46566333bc2293cf106b;p=kivitendo-erp.git Reportgenerator: Beim Listenexport als PDF kann das PDF auch direkt ausgedruckt werden. --- diff --git a/SL/ReportGenerator.pm b/SL/ReportGenerator.pm index 306236fb2..dbdbf72c9 100644 --- a/SL/ReportGenerator.pm +++ b/SL/ReportGenerator.pm @@ -1,6 +1,7 @@ package SL::ReportGenerator; use IO::Wrap; +use List::Util qw(max); use Text::CSV_XS; use SL::Form; @@ -28,6 +29,9 @@ sub new { 'margin_bottom' => 1.5, 'margin_right' => 1.5, 'number' => 1, + 'print' => 0, + 'printer_id' => 0, + 'copies' => 1, }, 'csv_export' => { 'quote_char' => '"', @@ -154,28 +158,6 @@ sub set_export_options { }; } -sub generate_content { - my $self = shift; - my $format = lc $self->{options}->{output_format}; - - if (!$self->{columns}) { - $self->{form}->error('Incorrect usage -- no columns specified'); - } - - if ($format eq 'html') { - return $self->generate_html_content(); - - } elsif ($format eq 'csv') { - return $self->generate_csv_content(); - - } elsif ($format eq 'pdf') { - return $self->generate_pdf_content(); - - } else { - $self->{form}->error('Incorrect usage -- unknown format (supported are HTML, CSV, PDF)'); - } -} - sub generate_with_headers { my $self = shift; my $format = lc $self->{options}->{output_format}; @@ -199,8 +181,6 @@ sub generate_with_headers { $self->generate_csv_content(); } elsif ($format eq 'pdf') { - print qq|content-type: application/pdf\n|; - print qq|content-disposition: attachment; filename=${filename}.pdf\n\n|; $self->generate_pdf_content(); } else { @@ -368,6 +348,13 @@ BODY { END ; + my $printer_command; + if ($opt->{print} && $opt->{printer_id}) { + $form->{printer_id} = $opt->{printer_id}; + $form->get_printer_code($myconfig); + $printer_command = $form->{printer_command}; + } + my $cfg_file_name = Common::tmpname() . '-html2ps-config'; my $cfg_file = IO::File->new($cfg_file_name, 'w') || $form->error($locale->text('Could not write the html2ps config file.')); @@ -391,12 +378,38 @@ END my $gs = IO::File->new("${cmdline} |"); if ($gs) { - while (my $line = <$gs>) { - print $line; + my $content; + + if (!$printer_command) { + print qq|content-type: application/pdf\n|; + print qq|content-disposition: attachment; filename=${filename}.pdf\n\n|; + + while (my $line = <$gs>) { + print $line; + } + + } else { + while (my $line = <$gs>) { + $content .= $line; + } } + $gs->close(); unlink $cfg_file_name, $html_file_name; + if ($printer_command && $content) { + foreach my $i (1 .. max $opt->{copies}, 1) { + my $printer = IO::File->new("| ${printer_command}"); + if (!$printer) { + $form->error($locale->text('Could not spawn the printer command.')); + } + $printer->print($content); + $printer->close(); + } + + $form->{report_generator_printed} = 1; + } + } else { unlink $cfg_file_name, $html_file_name; $form->error($locale->text('Could not spawn html2ps or GhostScript.')); diff --git a/bin/mozilla/report_generator.pl b/bin/mozilla/report_generator.pl index db65eb0db..112116d69 100644 --- a/bin/mozilla/report_generator.pl +++ b/bin/mozilla/report_generator.pl @@ -9,6 +9,8 @@ # ###################################################################### +use List::Util qw(max); + use SL::Form; use SL::Common; use SL::MoreCommon; @@ -18,7 +20,16 @@ sub report_generator_export_as_pdf { $lxdebug->enter_sub(); if ($form->{report_generator_pdf_options_set}) { + my $saved_form = save_form(); + report_generator_do('PDF'); + + if ($form->{report_generator_printed}) { + restore_form($saved_form); + $form->{MESSAGE} = $locale->text('The list has been printed.'); + report_generator_do('HTML'); + } + $lxdebug->leave_sub(); return; } @@ -26,11 +37,18 @@ sub report_generator_export_as_pdf { my @form_values; map { push @form_values, { 'key' => $_, 'value' => $form->{$_} } } keys %{ $form }; + $form->get_lists('printers' => 'ALL_PRINTERS'); + map { $_->{selected} = $myconfig{default_printer_id} == $_->{id} } @{ $form->{ALL_PRINTERS} }; + + $form->{copies} = max $myconfig{copies} * 1, 1; + $form->{title} = $locale->text('PDF export -- options'); $form->header(); print $form->parse_html_template('report_generator/pdf_export_options', { 'HIDDEN' => \@form_values, - 'default_margin' => $form->format_amount(\%myconfig, 1.5) }); + 'default_margin' => $form->format_amount(\%myconfig, 1.5), + 'SHOW_PRINTERS' => scalar @{ $form->{ALL_PRINTERS} }, + }); $lxdebug->leave_sub(); } diff --git a/locale/de/all b/locale/de/all index 67b846286..13182a589 100644 --- a/locale/de/all +++ b/locale/de/all @@ -874,6 +874,7 @@ aktualisieren wollen?', 'Print' => 'Drucken', 'Print and Post' => 'Drucken und Buchen', 'Print dunnings' => 'Mahnungen drucken', + 'Print list' => 'Liste ausdrucken', 'Print options' => 'Druckoptionen', 'Printer' => 'Drucker', 'Printer Command' => 'Druckbefehl', diff --git a/templates/webpages/report_generator/pdf_export_options_de.html b/templates/webpages/report_generator/pdf_export_options_de.html index 6c30322a8..3febc0899 100644 --- a/templates/webpages/report_generator/pdf_export_options_de.html +++ b/templates/webpages/report_generator/pdf_export_options_de.html @@ -72,10 +72,29 @@ Seiten nummerieren + +
+ + Liste ausdrucken +
- + + + Drucker + + + + + + + Kopien + + +

diff --git a/templates/webpages/report_generator/pdf_export_options_master.html b/templates/webpages/report_generator/pdf_export_options_master.html index 066e4d76a..481a0cd34 100644 --- a/templates/webpages/report_generator/pdf_export_options_master.html +++ b/templates/webpages/report_generator/pdf_export_options_master.html @@ -72,10 +72,29 @@ Number pages + +
+ + Print list +
- + + + Printer + + + + + + + Copies + + +