Koha/labels/label-create-pdf.pl
Galen Charlton 0bbcfeda0e replace syslog with warns
As discussed with Chris Nighswonger on #koha, this patch
removes the calls to syslog and replaces them with warns
so that error messages generated by the labels code
are sent to the Apache error log.  This avoids splitting
this sort of logging across multiple files and is consistent
with current practice in most of the rest of Koha.

Signed-off-by: Galen Charlton <gmcharlt@gmail.com>
2009-09-05 21:43:12 -04:00

225 lines
11 KiB
Perl
Executable file

#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use C4::Debug;
use C4::Labels::Batch 1.000000;
use C4::Labels::Template 1.000000;
use C4::Labels::Layout 1.000000;
use C4::Labels::PDF 1.000000;
use C4::Labels::Label 1.000000;
my $cgi = new CGI;
my $batch_id = $cgi->param('batch_id') if $cgi->param('batch_id');
my $template_id = $cgi->param('template_id') || undef;
my $layout_id = $cgi->param('layout_id') || undef;
my $start_label = $cgi->param('start_label') || 1;
my @label_ids = $cgi->param('label_id') if $cgi->param('label_id');
my @item_numbers = $cgi->param('item_number') if $cgi->param('item_number');
my $items = undef;
my $pdf_file = (@label_ids || @item_numbers ? "label_single_" . scalar(@label_ids || @item_numbers) : "label_batch_$batch_id");
print $cgi->header( -type => 'application/pdf',
-encoding => 'utf-8',
-attachment => "$pdf_file.pdf",
);
my $pdf = C4::Labels::PDF->new(InitVars => 0);
my $batch = C4::Labels::Batch->retrieve(batch_id => $batch_id);
my $template = C4::Labels::Template->retrieve(template_id => $template_id, profile_id => 1);
my $layout = C4::Labels::Layout->retrieve(layout_id => $layout_id);
sub _calc_next_label_pos {
my ($row_count, $col_count, $llx, $lly) = @_;
if ($col_count lt $template->get_attr('cols')) {
$llx = ($llx + $template->get_attr('label_width') + $template->get_attr('col_gap'));
$col_count++;
}
else {
$llx = $template->get_attr('left_margin');
if ($row_count eq $template->get_attr('rows')) {
$pdf->Page();
$lly = ($template->get_attr('page_height') - $template->get_attr('top_margin') - $template->get_attr('label_height'));
$row_count = 1;
}
else {
$lly = ($lly - $template->get_attr('row_gap') - $template->get_attr('label_height'));
$row_count++;
}
$col_count = 1;
}
return ($row_count, $col_count, $llx, $lly);
}
sub _print_text {
my $label_text = shift;
foreach my $text_line (@$label_text) {
my $pdf_font = $pdf->Font($text_line->{'font'});
my $line = "BT /$pdf_font $text_line->{'font_size'} Tf $text_line->{'text_llx'} $text_line->{'text_lly'} Td ($text_line->{'line'}) Tj ET";
$pdf->Add($line);
}
}
$| = 1;
# set the paper size
my $lowerLeftX = 0;
my $lowerLeftY = 0;
my $upperRightX = $template->get_attr('page_width');
my $upperRightY = $template->get_attr('page_height');
$pdf->Compress(1);
$pdf->Mbox($lowerLeftX, $lowerLeftY, $upperRightX, $upperRightY);
my ($row_count, $col_count, $llx, $lly) = $template->get_label_position($start_label);
if (@label_ids) {
my $batch_items = $batch->get_attr('items');
grep {
my $label_id = $_;
push(@{$items}, grep{$_->{'label_id'} == $label_id;} @{$batch_items});
} @label_ids;
}
elsif (@item_numbers) {
grep {
push(@{$items}, {item_number => $_});
} @item_numbers;
}
else {
$items = $batch->get_attr('items');
}
LABEL_ITEMS:
foreach my $item (@{$items}) {
my ($barcode_llx, $barcode_lly, $barcode_width, $barcode_y_scale_factor) = 0,0,0,0;
if ($layout->get_attr('printing_type') eq 'ALT') { # we process the ALT style printing type here because it is not an atomic printing type
my $label_a = C4::Labels::Label->new(
batch_id => $batch_id,
item_number => $item->{'item_number'},
llx => $llx,
lly => $lly,
width => $template->get_attr('label_width'),
height => $template->get_attr('label_height'),
top_text_margin => $template->get_attr('top_text_margin'),
left_text_margin => $template->get_attr('left_text_margin'),
barcode_type => $layout->get_attr('barcode_type'),
printing_type => 'BIB',
guidebox => $layout->get_attr('guidebox'),
font => $layout->get_attr('font'),
font_size => $layout->get_attr('font_size'),
callnum_split => $layout->get_attr('callnum_split'),
justify => $layout->get_attr('text_justify'),
format_string => $layout->get_attr('format_string'),
text_wrap_cols => $layout->get_text_wrap_cols(label_width => $template->get_attr('label_width'), left_text_margin => $template->get_attr('left_text_margin')),
);
my $label_a_text = $label_a->create_label();
_print_text($label_a_text);
($row_count, $col_count, $llx, $lly) = _calc_next_label_pos($row_count, $col_count, $llx, $lly);
my $label_b = C4::Labels::Label->new(
batch_id => $batch_id,
item_number => $item->{'item_number'},
llx => $llx,
lly => $lly,
width => $template->get_attr('label_width'),
height => $template->get_attr('label_height'),
top_text_margin => $template->get_attr('top_text_margin'),
left_text_margin => $template->get_attr('left_text_margin'),
barcode_type => $layout->get_attr('barcode_type'),
printing_type => 'BAR',
guidebox => $layout->get_attr('guidebox'),
font => $layout->get_attr('font'),
font_size => $layout->get_attr('font_size'),
callnum_split => $layout->get_attr('callnum_split'),
justify => $layout->get_attr('text_justify'),
format_string => $layout->get_attr('format_string'),
text_wrap_cols => $layout->get_text_wrap_cols(label_width => $template->get_attr('label_width'), left_text_margin => $template->get_attr('left_text_margin')),
);
my $label_b_text = $label_b->create_label();
($row_count, $col_count, $llx, $lly) = _calc_next_label_pos($row_count, $col_count, $llx, $lly);
next LABEL_ITEMS;
}
else {
}
my $label = C4::Labels::Label->new(
batch_id => $batch_id,
item_number => $item->{'item_number'},
llx => $llx,
lly => $lly,
width => $template->get_attr('label_width'),
height => $template->get_attr('label_height'),
top_text_margin => $template->get_attr('top_text_margin'),
left_text_margin => $template->get_attr('left_text_margin'),
barcode_type => $layout->get_attr('barcode_type'),
printing_type => $layout->get_attr('printing_type'),
guidebox => $layout->get_attr('guidebox'),
font => $layout->get_attr('font'),
font_size => $layout->get_attr('font_size'),
callnum_split => $layout->get_attr('callnum_split'),
justify => $layout->get_attr('text_justify'),
format_string => $layout->get_attr('format_string'),
text_wrap_cols => $layout->get_text_wrap_cols(label_width => $template->get_attr('label_width'), left_text_margin => $template->get_attr('left_text_margin')),
);
my $label_text = $label->create_label();
_print_text($label_text) if $label_text;
($row_count, $col_count, $llx, $lly) = _calc_next_label_pos($row_count, $col_count, $llx, $lly);
next LABEL_ITEMS;
}
$pdf->End();
exit(1);
=head1 NAME
labels/label-create-pdf.pl - A script for creating a pdf export of labels and label batches in Koha
=head1 ABSTRACT
This script provides the means of producing a pdf of labels for items either individually, in groups, or in batches from within Koha.
=head1 USAGE
This script is intended to be called as a cgi script although it could be easily modified to accept command line parameters. The script accepts four single
parameters and two "multiple" parameters as follows:
C<batch_id> A single valid batch id to export.
C<template_id> A single valid template id to be applied to the current export. This parameter is manditory.
C<layout_id> A single valid layout id to be applied to the current export. This parameter is manditory.
C<start_label> The number of the label on which to begin the export. This parameter is optional.
C<lable_ids> A single valid label id to export. Multiple label ids may be submitted to export multiple labels.
C<item_numbers> A single valid item number to export. Multiple item numbers may be submitted to export multiple items.
B<NOTE:> One of the C<batch_id>, C<label_ids>, or C<item_number> parameters is manditory. However, do not pass a combination of them or bad things might result.
example:
http://staff-client.kohadev.org/cgi-bin/koha/labels/label-create-pdf.pl?batch_id=1&template_id=1&layout_id=5&start_label=1
=head1 AUTHOR
Chris Nighswonger <cnighswonger AT foundations DOT edu>
=head1 COPYRIGHT
Copyright 2009 Foundations Bible College.
=head1 LICENSE
This file is part of Koha.
Koha is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later version.
You should have received a copy of the GNU General Public License along with Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
Suite 330, Boston, MA 02111-1307 USA
=head1 DISCLAIMER OF WARRANTY
Koha is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
=cut