#!/usr/bin/env perl use warnings; use strict; use diagnostics; use PDF::Table; # ------------- my ($PDFpref, $rcA, $rcB); # which is available? my $prefFile = "./PDFpref"; my $prefDefault = "B"; # PDF::Builder default if no prefFile, or both installed if (-f $prefFile && -r $prefFile) { open my $FH, '<', $prefFile or die "error opening $prefFile: $!\n"; $PDFpref = <$FH>; if ($PDFpref =~ m/^A/i) { # something starting with A, assume want PDF::API2 $PDFpref = 'A'; } elsif ($PDFpref =~ m/^B/i) { # something starting with B, assume want PDF::Builder $PDFpref = 'B'; } elsif ($PDFpref =~ m/^PDF:{1,2}A/i) { # something starting with PDF:A or PDF::A, assume want PDF::API2 $PDFpref = 'A'; } elsif ($PDFpref =~ m/^PDF:{1,2}B/i) { # something starting with PDF:B or PDF::B, assume want PDF::Builder $PDFpref = 'B'; } else { print STDERR "Don't see A... or B..., default to $prefDefault\n"; $PDFpref = $prefDefault; } close $FH; } else { # no preference expressed, default to PDF::Builder print STDERR "No preference file found, so default to $prefDefault\n"; $PDFpref = $prefDefault; } foreach (1 .. 2) { if ($PDFpref eq 'A') { # A(PI2) preferred $rcA = eval { require PDF::API2; 1; }; if (!defined $rcA) { $rcA = 0; } # else is 1; if ($rcA) { $rcB = 0; last; } $PDFpref = 'B'; } if ($PDFpref eq 'B') { # B(uilder) preferred $rcB = eval { require PDF::Builder; 1; }; if (!defined $rcB) { $rcB = 0; } # else is 1; if ($rcB) { $rcA = 0; last; } $PDFpref = 'A'; } } if (!$rcA && !$rcB) { die "Neither PDF::API2 nor PDF::Builder is installed!\n"; } # ------------- our $VERSION = '0.12'; # VERSION my $LAST_UPDATE = '0.12'; # manually update whenever code is changed my $outfile = $0; if ($outfile =~ m#[\\/]([^\\/]+)$#) { $outfile = $1; } $outfile =~ s/\.pl$/.pdf/; my $pdftable = PDF::Table->new(); # ------------- my $pdf; if ($rcA) { print STDERR "Using PDF::API2 library\n"; $pdf = PDF::API2->new( -file => $outfile ); } else { print STDERR "Using PDF::Builder library\n"; $pdf = PDF::Builder->new( -file => $outfile ); } # ------------- my $page = $pdf->page(); $pdf->mediabox('A4'); # A4 as defined by PDF::API2 is h=842 w=545 for portrait my $data = []; # some data to layout foreach my $num ( 1 .. 25 ) { push( @$data, [ 'foo' . $num, 'bar' . $num ] ); } # build the table layout $pdftable->table( # required params $pdf, $page, $data, x => 10, w => 150, start_y => 750, next_y => 700, start_h => 200, next_h => 500, # some optional params border => 1, font_size => 10, max_word_length => 15, padding => 5, row_height => 30, ); $pdf->saveas();