#!/usr/bin/perl # Copyright 2014 ByWater Solutions # # 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 3 of the License, or # (at your option) any later version. # # 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. # # You should have received a copy of the GNU General Public License # along with Koha; if not, see . use Modern::Perl; use CGI qw(header); use GD::Barcode; use C4::Auth qw(check_cookie_auth); =head1 NAME /cgi-bin/koha/svc/barcode =head1 SYNOPSIS This service generates a PNG barcode image for the requested barcode. =head2 PARAMETERS =over =item I I is the desired barcode. It should be called like: =item I I is the desired barcode type. Possible values are Code39 UPCE UPCA QRcode NW7 Matrix2of5 ITF Industrial2of5 IATA2of5 EAN8 EAN13 COOP2of5 If ommited,it defaults to Code39. =item I Unless I is specified in the parameter list, the value of the barcode will included as text below the scannable barcode. =back =head2 EXAMPLES =over =item /cgi-bin/koha/svc/barcode?barcode=123456789 Returns a Code39 barcode image for barcode 123456789 =item /cgi-bin/koha/svc/barcode?barcode=123456789&type=UPCE Returns a UPCE barcode image for barcode 123456789 =item /cgi-bin/koha/svc/barcode?barcode=123456789¬ext=1 Returns a Code39 barcode image for barcode 123456789 which does not include the human readable text '123456789' below the scannable barcode. =back =cut my %type_mapping = ( Code39 => 1, UPCE => 1, UPCA => 1, QRcode => 1, NW7 => 1, Matrix2of5 => 1, ITF => 1, Industrial2of5 => 1, IATA2of5 => 1, EAN8 => 1, EAN13 => 1, COOP2of5 => 1, ); my $input = CGI->new; my ( $auth_status ) = check_cookie_auth( $input->cookie('CGISESSID'), { catalogue => '*' } ); if ( $auth_status ne "ok" ) { exit 0; } binmode(STDOUT); my $type = $input->param('type') || ''; my $barcode = $input->param('barcode'); my $notext = $input->param('notext') ? 1 : 0; my $height = $input->param('height') || 50; my $qrcode_modulesize = $input->param('modulesize') || "5"; # 1+ my $image; # Validate the barcode type. Default to Code39 if no type or unsupported type sent. if ( !$type_mapping{$type} ) { $type = 'Code39'; } if ( $type eq 'Code39' ) { $barcode = '*' . $barcode unless $barcode =~ /^\*/; $barcode = $barcode . '*' unless $barcode =~ /\*$/; } eval { if( $type eq "QRcode" ){ $image = GD::Barcode->new('QRcode', $barcode, { Ecc => "M", ModuleSize => $qrcode_modulesize } )->plot->png(); } else { # BZ 37464 - $type must be validated as GD::Barcode unsafely passes this argument directly to an eval{} block $image = GD::Barcode->new( $type, $barcode )->plot( NoText => $notext, Height => $height )->png(); } }; if ( $@ ) { # problem creating image print header( -status => 500 ); } else { print header('image/png'); print $image; } exit 0; =head1 AUTHOR Kyle M Hall =cut