Revision 49f0957f
Von Moritz Bunkus vor etwa 18 Jahren hinzugefügt
SL/ReportGenerator.pm | ||
---|---|---|
package SL::ReportGenerator;
|
||
|
||
use IO::Wrap;
|
||
use List::Util qw(max);
|
||
use Text::CSV_XS;
|
||
|
||
use SL::Form;
|
||
... | ... | |
'margin_bottom' => 1.5,
|
||
'margin_right' => 1.5,
|
||
'number' => 1,
|
||
'print' => 0,
|
||
'printer_id' => 0,
|
||
'copies' => 1,
|
||
},
|
||
'csv_export' => {
|
||
'quote_char' => '"',
|
||
... | ... | |
};
|
||
}
|
||
|
||
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};
|
||
... | ... | |
$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 {
|
||
... | ... | |
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.'));
|
||
|
||
... | ... | |
|
||
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.'));
|
Auch abrufbar als: Unified diff
Reportgenerator: Beim Listenexport als PDF kann das PDF auch direkt ausgedruckt werden.