column_props => [ { justify => 'center' } ],
####
if($col_props->[$j]->{justify} eq 'right')
{
$space = $calc_column_widths->[$j] -($txt->advancewidth($record->[$j]) + $pad_right);
}
####
if($col_props->[$j]->{justify} eq 'right')
{
$space = $calc_column_widths->[$j] -($txt->advancewidth($record->[$j]) + $pad_right);
} elsif ($col_props->[$j]->{justify} eq 'center')
{
$space = ($calc_column_widths->[$j] -$txt->advancewidth($record->[$j])) / 2;
}
####
sub newpage {
my $page = $pdf->page;
$page->mediabox(792,612);
header($page);
footer($page);
page_nr($page, $page_num++);
return $page;
}
####
header_props => { repeat => 1 },
####
$page->gfx->textlabel( # PDF::API2 method
760, 15, # x, y
$pdf->corefont("Helvetica"), 11, # font, size
"Page $num", # text
-color => '#808080',
-align => 'right',
);
####
#!/usr/bin/perl
use strict;
use warnings;
use PDF::API2;
use PDF::Table;
my $pdftable = new PDF::Table;
my $pdf = new PDF::API2(-file => "pdf_test.pdf");
$pdf->preferences(
-thumbs => 1,
);
my $page_num = 1;
# some data to layout
my $some_data =[
["Header 1",
"Header 2",
"Header 3",
"Header 4",
"Header 5"
],
# content, 50 rows x 5 columns
map {
my $row = $_;
[ map "Content [$row, $_]", 1..5 ]
} 1..50,
];
main_table($pdf, $some_data);
$pdf->saveas();
##############
sub main_table {
my $pdf = shift;
my $data = shift;
my $page = newpage(); # first page
# build the table layout
$pdftable->table(
# required params
$pdf,
$page,
$data,
x => 70,
w => 650,
start_y => 527, # 550
next_y => 527,
start_h => 500,
next_h => 500,
# some optional params
padding => 5,
padding_right => 10,
background_color_odd => "gray",
background_color_even => "lightblue", #cell background color for even rows
new_page_func => \&newpage, # as defined above
cell_render_hook => sub { # this is our newly introduced callback function
my ($page, $row, $col, $x, $y, $w, $h) = @_;
if ($col == 0) { # do nothing except for first column
my $url = "http://www.anywhere.com?row=$row";
my $annot = $page->annotation();
$annot->url(
$url,
-rect => [$x, $y, $x+$w, $y+$h],
-border => [1,1,1]
);
}
},
header_props => { repeat => 1 },
);
}
sub newpage {
my $page = $pdf->page;
$page->mediabox(792,612);
header($page);
footer($page);
page_nr($page, $page_num++);
return $page;
}
sub header {
my $page = shift; # we need a page to place ourselves on
my $head_data =[
["My Company Name",],
["List of Users",],
["Welcome User 1",]
];
$pdftable->table(
# required params
$pdf,
$page,
$head_data,
x => 20,
w => 750,
start_y => 594, # top od doc on page - 594
next_y => 594,
start_h => 100,
next_h => 100,
#OPTIONAL PARAMS BELOW
#max_word_length=> 20, # add a space after every 20th symbol in long words like serial numbers
padding => 2, # cell padding
#padding_top => 1, # top cell padding, overides padding
padding_right => 10, # right cell padding, overides padding
#padding_left => 5, # left cell padding, overides padding
#padding_bottom => 5, # bottom padding, overides -padding
border => 0, # border width, default 1, use 0 for no border
border_color => 'navy', # default black
#font => $pdf->corefont("Helvetica", -encoding => "utf8"), # default font
#font_size => 10,
#font_color_odd => 'black',
#font_color_even=> 'black',
#background_color_odd => "#ffffff",
#background_color_even => "#ffffff", #cell background color for even rows
#header_props => $hdr_props,
column_props => [ { justify => 'center' } ],
);
}
sub footer {
my $page = shift; # we need a page to place ourselves on
my $footer_data =[
[ get_date() ]
];
$pdftable->table(
# required params
$pdf,
$page,
$footer_data,
x => 20,
w => 750,
start_y => 30, # top od doc on page
next_y => 30,
start_h => 30,
next_h => 30,
#OPTIONAL PARAMS BELOW
#max_word_length=> 20, # add a space after every 20th symbol in long words like serial numbers
padding => 5, # cell padding
border => 0, # border width, default 1, use 0 for no border
border_color => 'red', # default black
font => $pdf->corefont("Helvetica", -encoding => "utf8"), # default font
font_size => 9,
#header_props => $hdr_props,
column_props => [ { justify => 'center' } ],
);
}
sub page_nr {
my $page = shift;
my $num = shift;
$page->gfx->textlabel( # PDF::API2 method
760, 15, # x, y
$pdf->corefont("Helvetica"), 11, # font, size
"Page $num", # text
-color => '#808080',
-align => 'right',
);
}
sub get_date {
my ($mon, $mday, $year) = (localtime)[4,3,5];
return sprintf '%02d-%02d-%04d', $mon+1, $mday, $year+1900;
}