Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 49f0957f

Von Moritz Bunkus vor mehr als 17 Jahren hinzugefügt

  • ID 49f0957f2d464a13f5cf46566333bc2293cf106b
  • Vorgänger 23b02fbf
  • Nachfolger 81891b0c

Reportgenerator: Beim Listenexport als PDF kann das PDF auch direkt ausgedruckt werden.

Unterschiede anzeigen:

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