in reply to Re^7: Making PDF Tables
in thread Making PDF Tables
#!/usr/bin/perl use strict; use warnings; use PDF::API2; use PDF::Table; use Data::Dumper; # #A4 Landscape my $width = 842; my $height = 595; my $pdftable = new PDF::Table; my $pdf = new PDF::API2(-file => "tables_side_by_side_test.pdf"); $pdf->mediabox($width, $height); my $font_HB = $pdf->corefont('Helvetica-Bold'); my $font_H = $pdf->corefont("Helvetica"); my $page_num; # Font settings my %font = ( Helvetica => { Bold => $pdf->corefont( 'Helvetica-Bold' +, -encoding => 'utf8' ), Roman => $pdf->corefont( 'Helvetica', + -encoding => 'utf8' ), Italic => $pdf->corefont( 'Helvetica-Obliq +ue', -encoding => 'utf8' ), }, ); my ($principal, $principal_a ,$principal_b) = _get_data(); main_table( $pdf ); $pdf->saveas(); sub main_table { my $got_pdf = shift; my $left_edge_of_table = 50; # 50 my $page = _page(); my ($x,$y) = ($left_edge_of_table,490); my $page_height = 500; # create new page if caption too low if ($y < 100){ $page = _page(); $y = 500; } # add caption for table 1 my $caption = $page->text(); $caption->font($font_HB, 10); $caption->translate($x,$y); #$caption->text("Caption for table 1 \$t"); $caption->text("The First Table"); # create table my $col_numbers_tb1 = 4; my ($nextpage,$new_y) = _table( $pdf, $page, $y, _ob_disc(), $left_ed +ge_of_table, $col_numbers_tb1 ); $page = $nextpage; # gap to next table $y = $new_y - 20; # add caption for table 2 $caption = $page->text(); $caption->font($font_HB, 10); $caption->translate($x,$y); $caption->text("The Second Table"); my $col_numbers_tb2 = 11; my ($nextpage2,$new_y2) = _table( $pdf, $page, $y, _excluded(), $left +_edge_of_table, $col_numbers_tb2 ); $page = $nextpage2; # gap to next table $y = $new_y2 - 20; # add caption for table 3 $caption = $page->text(); $caption->font($font_HB, 10); $caption->translate($x,$y); $caption->text("Block Tables Start"); while (@$principal) { my ($data_princ_acc, $data_princ_a, $data_princ_b) = _send_data_to_p +df(); my $col_numbers_tb3 = 4; my ($nextpage3,$new_y3) = _table( $pdf, $page, $y, $data_princ_acc, +$left_edge_of_table, $col_numbers_tb3 ); $page = $nextpage3; # gap to next table $y = $new_y3 - 20; # I tried setting up here a new value here for this table #my $xy = $y - 19; # add caption for table 4 $caption = $page->text(); $caption->font($font_HB, 10); $caption->translate($x,$y); $caption->text("Table A: + Table B:"); my $col_numbers_tb4 = 3; my ($nextpage4,$new_y4) = _table_a( $pdf, $page, $y, $data_princ_a, +$left_edge_of_table, $col_numbers_tb4 ); $page = $nextpage4; # gap to next table $y = $new_y4 - 20; my $col_numbers_tb5 = 8; my ($nextpage5,$new_y5) = _table_b( $pdf, $page, $y, $data_princ_b, +$left_edge_of_table, $col_numbers_tb5 ); $page = $nextpage5; # gap to next table $y = $new_y5 - 20; } } # create table main sub _table { my ($pdf,$page,$boty,$data,$left_edge,$col_numbers_tb) = @_; my $pdftable = new PDF::Table; my ($next_page, undef, $new_y) = $pdftable->table( $pdf, $page, $data, x => $left_edge, # center main table on the page w => 650, # 495 width of main table on the page start_y => $boty-10, next_y => 500, start_h => $boty-10, next_h => 500, new_page_func => \&_page, # it brings header to other pages padding => 2, padding_right => 10, border => 0, background_color_odd => "#E0E0E0", background_color_even => "#FFFFFF", header_props => { # This param could be a pdf core font or user specified TTF. # See PDF::API2 FONT METHODS for more information font => $pdf->corefont("Helvetica-Bold", -encoding => "utf8" +), font_size => 10, font_color => '#000000', bg_color => '#FFFFFF', repeat => 1, # 1/0 eq On/Off if the header row should be r +epeated to every new page justify => 'center', }, column_props => [ map{ { justify => 'center', font => $font{'Helvetica'}{'Roman'}, font_size => 9, } }1..$col_numbers_tb, ], ); return ($next_page,$new_y); }; sub _table_a { my ($pdf,$page,$boty,$data,$left_edge,$col_numbers_tb) = @_; my $pdftable = new PDF::Table; my ($next_page, undef, $new_y) = $pdftable->table( $pdf, $page, $data, x => $left_edge, # center main table on the page w => 180, # 495 width of main table on the page start_y => $boty-10, next_y => 500, start_h => $boty-10, next_h => 500, new_page_func => \&_page, # it brings header to other pages padding => 2, padding_right => 10, border => 0, background_color_odd => "#E0E0E0", background_color_even => "#FFFFFF", header_props => { # This param could be a pdf core font or user specified TTF. # See PDF::API2 FONT METHODS for more information font => $pdf->corefont("Helvetica-Bold", -encoding => "utf8" +), font_size => 10, font_color => '#000000', bg_color => '#FFFFFF', repeat => 1, # 1/0 eq On/Off if the header row should be r +epeated to every new page justify => 'center', }, column_props => [ map{ { justify => 'center', font => $font{'Helvetica'}{'Roman'}, font_size => 9, } }1..$col_numbers_tb, ], ); return ($next_page,$new_y); }; sub _table_b { my ($pdf,$page,$boty,$data,$left_edge,$col_numbers_tb) = @_; my $pdftable = new PDF::Table; my ($next_page, undef, $new_y) = $pdftable->table( $pdf, $page, $data, x => 260, # center main table on the page w => 440, # 495 width of main table on the page start_y => $boty+10, next_y => 500, start_h => $boty+10, next_h => 500, new_page_func => \&_page, # it brings header to other pages padding => 2, padding_right => 10, border => 0, background_color_odd => "#E0E0E0", background_color_even => "#FFFFFF", header_props => { # This param could be a pdf core font or user specified TTF. # See PDF::API2 FONT METHODS for more information font => $pdf->corefont("Helvetica-Bold", -encoding => "utf8" +), font_size => 10, font_color => '#000000', bg_color => '#FFFFFF', repeat => 1, # 1/0 eq On/Off if the header row should be r +epeated to every new page justify => 'center', }, column_props => [ map{ { justify => 'center', font => $font{'Helvetica'}{'Roman'}, font_size => 9, } }1..$col_numbers_tb, ], ); return ($next_page,$new_y); }; # create new page sub _page { ++$page_num; my $page = $pdf->page; ##add stuff add_title($page); # horiz line my $g = $page->gfx(); $g->linewidth(1); $g->move(20,510); $g->line($width-20,510); $g->stroke; # page num $g->textlabel(760,15,$font_H,8,"Page $page_num", -color => '#808080', -align => 'right', ); return $page; }; sub _ob_disc { my $disc; # This is simulating random rows of data coming from the database $disc = [ ["A Number", "Name", "Date", "Reference"], ["23456", "Aname Another", "01/11/2014", "00007"], ["23456", "jhjhj ssaaa", "01/11/2014", "00007"], ["23456", "Loren asddf", "01/11/2014", "00007"], ["23456", "Serrt jahft", "01/11/2014", "00007"], ["23456", "Ojshfg treiu", "01/11/2014", "00007"], ["23456", "Rssskjj tehrrr", "01/11/2014", "00007"], ["23456", "Maru Smith", "01/11/2014", "00007"], ["23456", "Joe A Smith", "01/11/2014", "00007"], ["23456", "Marck Del", "01/11/2014", "00007"], ["23456", "Gujjnn Theeee", "01/11/2014", "00007"], ["23456", "Mary Lou", "01/11/2014", "00007"], ["23456", "Jackob Joen", "01/11/2014", "00007"], ["23456", "Marcouys De Larent", "01/11/2014", "00007"], ["23456", "Once Uon Time", "01/11/2014", "00007"], ["23456", "Nelson Mkkjhtt", "01/11/2014", "00007"], ]; return $disc }; sub _excluded { my $exc; # This is simulating random rows of data coming from the database push @$exc, ["Acc #", "Date", "Name", "Name #", "Others", "SSW", +"XXXS", "#1", "#2" , "#3","#4",], ["12345", "11/01/2014", "consequat quis", "3", "Joe Doe", "03/07/20 +14", "0", "O", "E" , "P","",], ["12345", "11/01/2014", "consequat quis", "3", "Joe Doe", "03/07/20 +14", "0", "O", "E" , "P","",], ["12345", "11/01/2014", "consequat quis", "3", "Joe Doe", "03/07/20 +14", "0", "O", "E" , "P","",], ["12345", "11/01/2014", "consequat quis", "3", "Joe Doe", "03/07/20 +14", "0", "O", "E" , "P","",], ["12345", "11/01/2014", "consequat quis", "3", "Joe Doe", "03/07/20 +14", "0", "O", "E" , "P","",], ["12345", "11/01/2014", "consequat quis", "3", "Joe Doe", "03/07/20 +14", "0", "O", "E" , "P","",], ["12345", "11/01/2014", "consequat quis", "3", "Joe Doe", "03/07/20 +14", "0", "O", "E" , "P","",], ["12345", "11/01/2014", "consequat quis", "3", "Joe Doe", "03/07/20 +14", "0", "O", "E" , "P","",], ["12345", "11/01/2014", "consequat quis", "3", "Joe Doe", "03/07/20 +14", "0", "O", "E" , "P","",], ["12345", "11/01/2014", "consequat quis", "3", "Joe Doe", "03/07 +/2014", "0", "O", "E" , "P","",], ["12345", "11/01/2014", "consequat quis", "3", "Joe Doe", "03/07/20 +14", "0", "O", "E" , "P","",], ["12345", "11/01/2014", "consequat quis", "3", "Joe Doe", "03/07/20 +14", "0", "O", "E" , "P","",], ["12345", "11/01/2014", "consequat quis", "3", "Joe Doe", "03/07/20 +14", "0", "O", "E" , "P","",], ["12345", "11/01/2014", "consequat quis", "3", "Joe Doe", "03/07/20 +14", "0", "O", "E" , "P","",], ["12345", "11/01/2014", "consequat quis", "3", "Joe Doe", "03/07/20 +14", "0", "O", "E" , "P","",], ; return $exc; }; sub _send_data_to_pdf { return shift @$principal, shift @$principal_a , shift @$principal_b; }; sub _get_data{ my ($q_principal, $q_principal_b ,$q_principal_c); my $h_principal = ["Acc #", "Name", "OB Date", "Number",],; # This is simulating random rows of data coming from the database $q_principal = [ [ ["12345", "Carl Sea", "03/13/2014", "4",], ], [ ["764539", "Deon gomes", "11/07/2013", "2",], ] ] ; unshift @{$_},$h_principal foreach @{$q_principal}; my $h_principal_v = ["Tie #", "Year", "MOdel",], # This is simulating random rows of data coming from the database $q_principal_b = [ [ ["1", "2000", "OLD",], ["2", "2001", "OLD",], ["3", "2002", "OLD",], ["4", "2003", "OLD",], ["5", "2004", "OLD",], ["6", "2005", "OLD",], ["6", "2011", "NEW",], ], [ ["A", "2000", "OLD",], ["B", "2001", "OLD",], ["C", "2002", "OLD",], ["D", "2003", "OLD",], ["E", "2004", "OLD",], ["F", "2005", "OLD",], ["G", "2011", "NEW",], ], ] ; unshift @{$_},$h_principal_v foreach @{$q_principal_b}; my $header_principal_o = ["NAme #","All", "DXS", "Delst","A #1","B #2" +, "C #3", "D #4",],; # This is simulating random rows of data coming from the database $q_principal_c = [ [ ["1","Stephen King", "5/5/1930", "N","O","P", "-", "-",], ["2","Charles Xing", "6/28/1550", "N","P","O", "-", "-",], ["3","Dnieal Cruz", "07/25/1988", "N","O","E", "-", "-",], ["4","Dnieal Cruz", "07/25/1988", "N","O","E", "-", "-",], ["5","Dnieal Cruz", "07/25/1988", "N","O","E", "-", "-",], ["6","Dnieal Cruz", "07/25/1988", "N","O","E", "-", "-",], ["7","Dnieal Cruz", "07/25/1988", "N","O","E", "-", "-",], ["8","Dnieal Cruz", "07/25/1988", "N","O","E", "-", "-",], ], [ ["A","Maru Louey", "5/5/1950", "N","O","P", "-", "-",], ["B","Gome Thing", "6/28/1950", "N","P","O", "-", "-",], ["C","Dnieal Cruz", "07/25/1988", "N","O","E", "-", "-",], ["D","Dnieal Cruz", "07/25/1988", "N","O","E", "-", "-",], ["E","Dnieal Cruz", "07/25/1988", "N","O","E", "-", "-",], ["F","Dnieal Cruz", "07/25/1988", "N","O","E", "-", "-",], ["G","Dnieal Cruz", "07/25/1988", "N","O","E", "-", "-",], ["H","Dnieal Cruz", "07/25/1988", "N","O","E", "-", "-",], ], ]; unshift @{$_},$header_principal_o foreach @{$q_principal_c}; return $q_principal, $q_principal_b ,$q_principal_c; } sub add_title { my $page = shift; $page->gfx->textlabel( # PDF::API2 method 416, 566, # x, y $pdf->corefont("Helvetica-Bold"), 11, # font, size "Test Tables PDF", # text -color => '#000000', -align => 'center', ); }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^9: Making PDF Tables
by poj (Abbot) on Nov 07, 2014 at 13:03 UTC | |
|
Re^9: Making PDF Tables
by Anonymous Monk on Nov 07, 2014 at 18:49 UTC | |
by poj (Abbot) on Nov 08, 2014 at 13:54 UTC | |
by Anonymous Monk on Nov 11, 2014 at 14:21 UTC |