603 lines
8.8 KiB
Perl
603 lines
8.8 KiB
Perl
package C4::Creators::PDF;
|
|
|
|
# Copyright 2009 Foundations Bible College.
|
|
#
|
|
# 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 <https://www.gnu.org/licenses>.
|
|
|
|
use strict;
|
|
use warnings;
|
|
use PDF::Reuse qw(
|
|
prAdd
|
|
prAltJpeg
|
|
prBookmark
|
|
prCompress
|
|
prDoc
|
|
prDocDir
|
|
prDocForm
|
|
prEnd
|
|
prExtract
|
|
prField
|
|
prFile
|
|
prFont
|
|
prFontSize
|
|
prForm
|
|
prGetLogBuffer
|
|
prGraphState
|
|
prImage
|
|
prInit
|
|
prInitVars
|
|
prJpeg
|
|
prJs
|
|
prLink
|
|
prLog
|
|
prLogDir
|
|
prMbox
|
|
prPage
|
|
prSinglePage
|
|
prStrWidth
|
|
prText
|
|
prTTFont
|
|
);
|
|
use PDF::Reuse::Barcode;
|
|
use File::Temp;
|
|
use List::Util qw( first );
|
|
|
|
sub _InitVars {
|
|
my $self = shift;
|
|
my $param = shift;
|
|
prInitVars($param);
|
|
}
|
|
|
|
=head1 Functions
|
|
|
|
=cut
|
|
|
|
=head2 new
|
|
|
|
Missing POD for new.
|
|
|
|
=cut
|
|
|
|
sub new {
|
|
my $invocant = shift;
|
|
my $type = ref($invocant) || $invocant;
|
|
my %opts = @_;
|
|
my $self = {};
|
|
_InitVars() if ( $opts{InitVars} == 0 );
|
|
_InitVars( $opts{InitVars} ) if ( $opts{InitVars} > 0 );
|
|
delete( $opts{InitVars} );
|
|
prDocDir( $opts{'DocDir'} ) if $opts{'DocDir'};
|
|
delete( $opts{'DocDir'} );
|
|
|
|
my $fh = File::Temp->new( UNLINK => 0, SUFFIX => '.pdf' );
|
|
$opts{Name} = $self->{filename} = "$fh"; # filename
|
|
close $fh; # we need just filename
|
|
|
|
prFile( \%opts );
|
|
bless( $self, $type );
|
|
return $self;
|
|
}
|
|
|
|
=head2 End
|
|
|
|
Missing POD for End.
|
|
|
|
=cut
|
|
|
|
sub End {
|
|
my $self = shift;
|
|
|
|
prEnd();
|
|
|
|
# slurp temporary filename and print it out for plack to pick up
|
|
local $/ = undef;
|
|
open( my $fh, '<', $self->{filename} ) || die "$self->{filename}: $!";
|
|
print <$fh>;
|
|
close $fh;
|
|
unlink $self->{filename};
|
|
}
|
|
|
|
=head2 Add
|
|
|
|
Missing POD for Add.
|
|
|
|
=cut
|
|
|
|
sub Add {
|
|
my $self = shift;
|
|
my $string = shift;
|
|
prAdd($string);
|
|
}
|
|
|
|
=head2 Bookmark
|
|
|
|
Missing POD for Bookmark.
|
|
|
|
=cut
|
|
|
|
sub Bookmark {
|
|
my $self = shift;
|
|
my $reference = shift;
|
|
prBookmark($reference);
|
|
}
|
|
|
|
=head2 Compress
|
|
|
|
Missing POD for Compress.
|
|
|
|
=cut
|
|
|
|
sub Compress {
|
|
my $self = shift;
|
|
my $directive = shift;
|
|
prCompress($directive);
|
|
}
|
|
|
|
=head2 Doc
|
|
|
|
Missing POD for Doc.
|
|
|
|
=cut
|
|
|
|
sub Doc {
|
|
my $self = shift;
|
|
my %params = @_;
|
|
prDoc(%params);
|
|
}
|
|
|
|
=head2 DocForm
|
|
|
|
Missing POD for DocForm.
|
|
|
|
=cut
|
|
|
|
sub DocForm {
|
|
my $self = shift;
|
|
my %params = @_;
|
|
return prDocForm(%params);
|
|
}
|
|
|
|
=head2 Extract
|
|
|
|
Missing POD for Extract.
|
|
|
|
=cut
|
|
|
|
sub Extract {
|
|
my $self = shift;
|
|
my ( $pdfFile, $pageNo, $oldInternalName ) = @_;
|
|
return prExtract( $pdfFile, $pageNo, $oldInternalName );
|
|
}
|
|
|
|
=head2 Field
|
|
|
|
Missing POD for Field.
|
|
|
|
=cut
|
|
|
|
sub Field {
|
|
my $self = shift;
|
|
my ( $fieldName, $value ) = @_;
|
|
prField( $fieldName, $value );
|
|
}
|
|
|
|
=head2 Font
|
|
|
|
Missing POD for Font.
|
|
|
|
=cut
|
|
|
|
sub Font {
|
|
my $self = shift;
|
|
my $fontName = shift;
|
|
|
|
my $ttf = C4::Context->config('ttf');
|
|
|
|
if ($ttf) {
|
|
my $ttf_path = first { $_->{type} eq $fontName } @{ $ttf->{font} };
|
|
if ( -e $ttf_path->{content} ) {
|
|
return prTTFont( $ttf_path->{content} );
|
|
} else {
|
|
warn "ERROR in koha-conf.xml -- missing <font type=\"$fontName\">/path/to/font.ttf</font>";
|
|
}
|
|
}
|
|
return prFont($fontName);
|
|
}
|
|
|
|
=head2 FontSize
|
|
|
|
Missing POD for FontSize.
|
|
|
|
=cut
|
|
|
|
sub FontSize {
|
|
my $self = shift;
|
|
my $size = shift;
|
|
return prFontSize($size);
|
|
}
|
|
|
|
=head2 Form
|
|
|
|
Missing POD for Form.
|
|
|
|
=cut
|
|
|
|
sub Form {
|
|
my $self = shift;
|
|
my %params = @_;
|
|
return prForm(%params);
|
|
}
|
|
|
|
=head2 GetLogBuffer
|
|
|
|
Missing POD for GetLogBuffer.
|
|
|
|
=cut
|
|
|
|
sub GetLogBuffer {
|
|
my $self = shift;
|
|
return prGetLogBuffer();
|
|
}
|
|
|
|
=head2 GraphState
|
|
|
|
Missing POD for GraphState.
|
|
|
|
=cut
|
|
|
|
sub GraphState {
|
|
my $self = shift;
|
|
my $string = shift;
|
|
prGraphState($string);
|
|
}
|
|
|
|
=head2 Image
|
|
|
|
Missing POD for Image.
|
|
|
|
=cut
|
|
|
|
sub Image {
|
|
my $self = shift;
|
|
my %params = @_;
|
|
return prImage(%params);
|
|
}
|
|
|
|
=head2 Init
|
|
|
|
Missing POD for Init.
|
|
|
|
=cut
|
|
|
|
sub Init {
|
|
my $self = shift;
|
|
my ( $string, $duplicateCode ) = @_;
|
|
prInit( $string, $duplicateCode );
|
|
}
|
|
|
|
=head2 AltJpeg
|
|
|
|
Missing POD for AltJpeg.
|
|
|
|
=cut
|
|
|
|
sub AltJpeg {
|
|
my $self = shift;
|
|
my ( $imageData, $width, $height, $imageFormat, $altImageData, $altImageWidth, $altImageHeight, $altImageFormat ) =
|
|
@_;
|
|
return prAltJpeg(
|
|
$imageData, $width, $height, $imageFormat, $altImageData, $altImageWidth, $altImageHeight,
|
|
$altImageFormat
|
|
);
|
|
}
|
|
|
|
=head2 Jpeg
|
|
|
|
Missing POD for Jpeg.
|
|
|
|
=cut
|
|
|
|
sub Jpeg {
|
|
my $self = shift;
|
|
my ( $imageData, $width, $height, $imageFormat ) = @_;
|
|
return prJpeg( $imageData, $width, $height, $imageFormat );
|
|
}
|
|
|
|
=head2 Js
|
|
|
|
Missing POD for Js.
|
|
|
|
=cut
|
|
|
|
sub Js {
|
|
my $self = shift;
|
|
my $string_or_fileName = shift;
|
|
prJs($string_or_fileName);
|
|
}
|
|
|
|
=head2 Link
|
|
|
|
Missing POD for Link.
|
|
|
|
=cut
|
|
|
|
sub Link {
|
|
my $self = shift;
|
|
my %params = @_;
|
|
prLink(%params);
|
|
}
|
|
|
|
=head2 Log
|
|
|
|
Missing POD for Log.
|
|
|
|
=cut
|
|
|
|
sub Log {
|
|
my $self = shift;
|
|
my $string = shift;
|
|
prLog($string);
|
|
}
|
|
|
|
=head2 LogDir
|
|
|
|
Missing POD for LogDir.
|
|
|
|
=cut
|
|
|
|
sub LogDir {
|
|
my $self = shift;
|
|
my $directory = shift;
|
|
prLogDir($directory);
|
|
}
|
|
|
|
=head2 Mbox
|
|
|
|
Missing POD for Mbox.
|
|
|
|
=cut
|
|
|
|
sub Mbox {
|
|
my $self = shift;
|
|
my ( $lowerLeftX, $lowerLeftY, $upperRightX, $upperRightY ) = @_;
|
|
prMbox( $lowerLeftX, $lowerLeftY, $upperRightX, $upperRightY );
|
|
}
|
|
|
|
=head2 Page
|
|
|
|
Missing POD for Page.
|
|
|
|
=cut
|
|
|
|
sub Page {
|
|
my $self = shift;
|
|
my $noLog = shift;
|
|
prPage($noLog);
|
|
}
|
|
|
|
=head2 SinglePage
|
|
|
|
Missing POD for SinglePage.
|
|
|
|
=cut
|
|
|
|
sub SinglePage {
|
|
my $self = shift;
|
|
my ( $file, $pageNumber ) = @_;
|
|
return prSinglePage( $file, $pageNumber );
|
|
}
|
|
|
|
=head2 StrWidth
|
|
|
|
Missing POD for StrWidth.
|
|
|
|
=cut
|
|
|
|
sub StrWidth {
|
|
my $self = shift;
|
|
my ( $string, $font, $fontSize ) = @_;
|
|
|
|
# replace font code with correct internal font
|
|
$font = C4::Creators::PDF->Font($font);
|
|
|
|
return prStrWidth( $string, $font, $fontSize );
|
|
}
|
|
|
|
=head2 Text
|
|
|
|
Missing POD for Text.
|
|
|
|
=cut
|
|
|
|
sub Text {
|
|
my $self = shift;
|
|
my ( $x, $y, $string, $align, $rotation ) = @_;
|
|
return prText( $x, $y, $string, $align, $rotation );
|
|
}
|
|
|
|
=head2 TTFont
|
|
|
|
Missing POD for TTFont.
|
|
|
|
=cut
|
|
|
|
sub TTFont {
|
|
my $self = shift;
|
|
my $path = shift;
|
|
return prTTFont($path);
|
|
}
|
|
|
|
=head2 Code128
|
|
|
|
Missing POD for Code128.
|
|
|
|
=cut
|
|
|
|
sub Code128 {
|
|
my $self = shift;
|
|
my %opts = @_;
|
|
PDF::Reuse::Barcode::Code128(%opts);
|
|
}
|
|
|
|
=head2 Code39
|
|
|
|
Missing POD for Code39.
|
|
|
|
=cut
|
|
|
|
sub Code39 {
|
|
my $self = shift;
|
|
my %opts = @_;
|
|
PDF::Reuse::Barcode::Code39(%opts);
|
|
}
|
|
|
|
=head2 COOP2of5
|
|
|
|
Missing POD for COOP2of5.
|
|
|
|
=cut
|
|
|
|
sub COOP2of5 {
|
|
my $self = shift;
|
|
my %opts = @_;
|
|
PDF::Reuse::Barcode::COOP2of5(%opts);
|
|
}
|
|
|
|
=head2 EAN13
|
|
|
|
Missing POD for EAN13.
|
|
|
|
=cut
|
|
|
|
sub EAN13 {
|
|
my $self = shift;
|
|
my %opts = @_;
|
|
PDF::Reuse::Barcode::EAN13(%opts);
|
|
}
|
|
|
|
=head2 EAN8
|
|
|
|
Missing POD for EAN8.
|
|
|
|
=cut
|
|
|
|
sub EAN8 {
|
|
my $self = shift;
|
|
my %opts = @_;
|
|
PDF::Reuse::Barcode::EAN8(%opts);
|
|
}
|
|
|
|
=head2 IATA2of5
|
|
|
|
Missing POD for IATA2of5.
|
|
|
|
=cut
|
|
|
|
sub IATA2of5 {
|
|
my $self = shift;
|
|
my %opts = @_;
|
|
PDF::Reuse::Barcode::IATA2of5(%opts);
|
|
}
|
|
|
|
=head2 Industrial2of5
|
|
|
|
Missing POD for Industrial2of5.
|
|
|
|
=cut
|
|
|
|
sub Industrial2of5 {
|
|
my $self = shift;
|
|
my %opts = @_;
|
|
PDF::Reuse::Barcode::Industrial2of5(%opts);
|
|
}
|
|
|
|
=head2 ITF
|
|
|
|
Missing POD for ITF.
|
|
|
|
=cut
|
|
|
|
sub ITF {
|
|
my $self = shift;
|
|
my %opts = @_;
|
|
PDF::Reuse::Barcode::ITF(%opts);
|
|
}
|
|
|
|
=head2 Matrix2of5
|
|
|
|
Missing POD for Matrix2of5.
|
|
|
|
=cut
|
|
|
|
sub Matrix2of5 {
|
|
my $self = shift;
|
|
my %opts = @_;
|
|
PDF::Reuse::Barcode::Matrix2of5(%opts);
|
|
}
|
|
|
|
=head2 NW7
|
|
|
|
Missing POD for NW7.
|
|
|
|
=cut
|
|
|
|
sub NW7 {
|
|
my $self = shift;
|
|
my %opts = @_;
|
|
PDF::Reuse::Barcode::NW7(%opts);
|
|
}
|
|
|
|
=head2 UPCA
|
|
|
|
Missing POD for UPCA.
|
|
|
|
=cut
|
|
|
|
sub UPCA {
|
|
my $self = shift;
|
|
my %opts = @_;
|
|
PDF::Reuse::Barcode::UPCA(%opts);
|
|
}
|
|
|
|
=head2 UPCE
|
|
|
|
Missing POD for UPCE.
|
|
|
|
=cut
|
|
|
|
sub UPCE {
|
|
my $self = shift;
|
|
my %opts = @_;
|
|
PDF::Reuse::Barcode::UPCE(%opts);
|
|
}
|
|
|
|
1;
|
|
__END__
|
|
|
|
|
|
=head1 NAME
|
|
|
|
C4::Creators::PDF - A class wrapper for PDF::Reuse and PDF::Reuse::Barcode to allow usage as a pseudo-object. For usage see
|
|
PDF::Reuse documentation and C4::Creators::PDF code.
|
|
|
|
=cut
|
|
|
|
=head1 AUTHOR
|
|
|
|
Chris Nighswonger <cnighswonger AT foundations DOT edu>
|
|
|
|
=cut
|