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; }