use Algorithm::CheckDigits;
use Text::CSV_XS;
use Data::Dumper;
+use Library::CallNumber::LC;
use C4::Context;
use C4::Debug;
sub _guide_box {
my ( $llx, $lly, $width, $height ) = @_;
+ return unless ( defined $llx and defined $lly and
+ defined $width and defined $height );
my $obj_stream = "q\n"; # save the graphic state
$obj_stream .= "0.5 w\n"; # border line width
$obj_stream .= "1.0 0.0 0.0 RG\n"; # border color red
my ($lccn) = @_;
$_ = $lccn;
# lccn examples: 'HE8700.7 .P6T44 1983', 'BS2545.E8 H39 1996';
- my (@parts) = m/
- ^([a-zA-Z]+) # HE # BS
- (\d+(?:\.\d)*) # 8700.7 # 2545
- \s*
- (\.*\D+\d*) # .P6 # .E8
- \s*
- (.*) # T44 1983 # H39 1996 # everything else (except any bracketing spaces)
- \s*
- /x;
- unless (scalar @parts) {
+ my @parts = Library::CallNumber::LC->new($lccn)->components();
+ unless (scalar @parts && defined $parts[0]) {
warn sprintf('regexp failed to match string: %s', $_);
- push @parts, $_; # if no match, just push the whole string.
+ @parts = $_; # if no match, just use the whole string.
}
push @parts, split /\s+/, pop @parts; # split the last piece into an arbitrary number of pieces at spaces
$debug and warn "split_lccn array: ", join(" | ", @parts), "\n";
else {
$field->{'data'} = _get_barcode_data($field->{'code'},$item,$record);
}
+ #FIXME: We should not force the title to oblique; this should be selectible in the layout configuration
($field->{'code'} eq 'title') ? (($font =~ /T/) ? ($font = 'TI') : ($font = ($font . 'O'))) : ($font = $font);
my $field_data = $field->{'data'};
if ($field_data) {
LABEL_LINES: # generate lines of label text for current field
foreach my $line (@label_lines) {
next LABEL_LINES if $line eq '';
- my $string_width = C4::Creators::PDF->StrWidth($line, $font, $self->{'font_size'});
+ my $fontName = C4::Creators::PDF->Font($font);
+ my $string_width = C4::Creators::PDF->StrWidth($line, $fontName, $self->{'font_size'});
if ($self->{'justify'} eq 'R') {
$text_llx = $params{'llx'} + $self->{'width'} - ($self->{'left_text_margin'} + $string_width);
}
warn sprintf('Barcode generation failed for item %s with this error: %s', $self->{'item_number'}, $@);
}
}
+ elsif ($params{'barcode_type'} eq 'EAN13') {
+ $bar_length = 4; # FIXME
+ $num_of_bars = 13;
+ $tot_bar_length = ($bar_length * $num_of_bars) + ($guard_length * 2);
+ $x_scale_factor = ($params{'width'} / $tot_bar_length) * 0.9;
+ eval {
+ PDF::Reuse::Barcode::EAN13(
+ x => $params{'llx'},
+ y => $params{'lly'},
+ value => sprintf('%013d',$params{barcode_data}),
+# xSize => $x_scale_factor,
+# ySize => $params{'y_scale_factor'},
+ mode => 'graphic',
+ );
+ };
+ if ($@) {
+ warn sprintf('Barcode generation failed for item %s with this error: %s', $self->{'item_number'}, $@);
+ }
+ }
+ else {
+ warn "unknown barcode_type: $params{barcode_type}";
+ }
}
sub csv_data {
=item .
INDUSTRIAL2OF5 = The standard 2 of 5 barcode (a binary level bar code developed by Identicon Corp. and Computer Identics Corp. in 1970)
+=item .
+ EAN13 = The standard EAN-13 barcode
+
=back
C<printing_type> Defines the general layout to be used on labels. NOTE: At present there are only five printing types supported in the label creator code: