Revision 49f0957f
Von Moritz Bunkus vor mehr als 17 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.'));
|
bin/mozilla/report_generator.pl | ||
---|---|---|
#
|
||
######################################################################
|
||
|
||
use List::Util qw(max);
|
||
|
||
use SL::Form;
|
||
use SL::Common;
|
||
use SL::MoreCommon;
|
||
... | ... | |
$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;
|
||
}
|
||
... | ... | |
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();
|
||
}
|
locale/de/all | ||
---|---|---|
'Print' => 'Drucken',
|
||
'Print and Post' => 'Drucken und Buchen',
|
||
'Print dunnings' => 'Mahnungen drucken',
|
||
'Print list' => 'Liste ausdrucken',
|
||
'Print options' => 'Druckoptionen',
|
||
'Printer' => 'Drucker',
|
||
'Printer Command' => 'Druckbefehl',
|
templates/webpages/report_generator/pdf_export_options_de.html | ||
---|---|---|
<td valign="top">
|
||
<input type="checkbox" name="report_generator_pdf_options_number" value="1" checked>
|
||
Seiten nummerieren
|
||
<TMPL_IF SHOW_PRINTERS>
|
||
<br>
|
||
<input type="checkbox" name="report_generator_pdf_options_print" value="1">
|
||
Liste ausdrucken
|
||
</TMPL_IF>
|
||
</td>
|
||
</tr>
|
||
|
||
|
||
<TMPL_IF SHOW_PRINTERS>
|
||
<tr>
|
||
<td align="right">Drucker</td>
|
||
<td>
|
||
<select name="report_generator_pdf_options_printer_id">
|
||
<TMPL_LOOP ALL_PRINTERS><option value="<TMPL_VAR id ESCAPE=HTML>"<TMPL_IF selected> selected</TMPL_IF>><TMPL_VAR printer_description ESCAPE=HTML></option></TMPL_LOOP>
|
||
</select>
|
||
</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td align="right">Kopien</td>
|
||
<td><input name="report_generator_pdf_options_copies" size="4" value="<TMPL_VAR copies ESCAPE=HTML>"></td>
|
||
</tr>
|
||
</TMPL_IF>
|
||
</table>
|
||
|
||
<p>
|
templates/webpages/report_generator/pdf_export_options_master.html | ||
---|---|---|
<td valign="top">
|
||
<input type="checkbox" name="report_generator_pdf_options_number" value="1" checked>
|
||
<translate>Number pages</translate>
|
||
<TMPL_IF SHOW_PRINTERS>
|
||
<br>
|
||
<input type="checkbox" name="report_generator_pdf_options_print" value="1">
|
||
<translate>Print list</translate>
|
||
</TMPL_IF>
|
||
</td>
|
||
</tr>
|
||
|
||
|
||
<TMPL_IF SHOW_PRINTERS>
|
||
<tr>
|
||
<td align="right"><translate>Printer</translate></td>
|
||
<td>
|
||
<select name="report_generator_pdf_options_printer_id">
|
||
<TMPL_LOOP ALL_PRINTERS><option value="<TMPL_VAR id ESCAPE=HTML>"<TMPL_IF selected> selected</TMPL_IF>><TMPL_VAR printer_description ESCAPE=HTML></option></TMPL_LOOP>
|
||
</select>
|
||
</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td align="right"><translate>Copies</translate></td>
|
||
<td><input name="report_generator_pdf_options_copies" size="4" value="<TMPL_VAR copies ESCAPE=HTML>"></td>
|
||
</tr>
|
||
</TMPL_IF>
|
||
</table>
|
||
|
||
<p>
|
Auch abrufbar als: Unified diff
Reportgenerator: Beim Listenexport als PDF kann das PDF auch direkt ausgedruckt werden.