in reply to Making PDF Tables
It's quite ugly but PDF::Table is actually consuming the contents of $some_data by shifting each element out of it for display. This means that when you call table the second time you're passing in an empty data set which causes a divide by zero error. You'll have to make a copy of the data before passing it in.
As an aside, you'll want to record the third parameter returned from the first table call. This is the last y value used in creating the table. Subtract a few from what you get back (origin is the bottom of the page, not the top) and use it as the starting position of the second table.
use PDF::API2;
use PDF::Table;
my $pdftable = new PDF::Table;
my $pdf = new PDF::API2(-file => "table_of_lorem.pdf");
my $page = $pdf->page;
my $some_data = [
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
];
my $left_edge_of_table = 50;
my @tmp = @$some_data;
my (undef, undef, $boty) = $pdftable->table(
$pdf,
$page,
\@tmp,
x => $left_edge_of_table,
w => 495,
start_y => 750,
next_y => 700,
start_h => 300,
next_h => 500,
padding => 5,
padding_right => 10,
background_color_odd => "gray",
background_color_even => "lightblue",
);
@tmp = @$some_data;
$pdftable->table(
$pdf,
$page,
\@tmp,
x => $left_edge_of_table,
w => 500,
start_y => $boty - 10,
next_y => 705,
start_h => 305,
next_h => 505,
padding => 5,
padding_right => 10,
background_color_odd => "navy",
background_color_even => "red", #cell background color for even r
+ows
);
$pdf->saveas();
Re^2: Making PDF Tables
by Anonymous Monk on Oct 27, 2014 at 18:57 UTC
|
That works, but the problem is when the data for the first table grows like in this situation:
my $some_data = [
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
];
my $more_data = [
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
];
...
#@tmp = @$some_data;
@tmp = @$more_data;
...
It will overlap the second table. | [reply] [d/l] |
|
Increase the gap between the tables, 70 seems about right
start_y => $boty - 70,
Update : If that doesn't work, try increasing the start_h, next_h parameters and use $nextpage for the second table.
my ($nextpage, undef, $boty) = $pdftable->table(
$pdf,
$page,
$some_data,
x => $left_edge_of_table,
w => 495,
start_y => 750,
next_y => 750,
start_h => 750,
next_h => 750,
padding => 5,
padding_right => 10,
background_color_odd => "gray",
background_color_even => "lightblue",
);
$pdftable->table(
$pdf,
$nextpage,
$more_data,
x => $left_edge_of_table,
w => 500,
start_y => $boty - 10,
next_y => 750,
start_h => $boty - 10,
next_h => 750,
padding => 5,
padding_right => 10,
background_color_odd => "navy",
background_color_even => "red", #cell background color for even r
+ows
);
poj | [reply] [d/l] [select] |
|
Great example, here it is, this works, based in your code:
use PDF::API2;
use PDF::Table;
my $pdftable = new PDF::Table;
my $pdf = new PDF::API2(-file => "table_of_lorem.pdf");
my $page = $pdf->page;
my $some_data = [
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
];
my $more_data = [
["X Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["X Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["X Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["X Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["X Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
];
my $more_extra_data = [
["Y Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis.", "Header", "Header", "Header"],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+.", "Header", "Header", "Header"],
["Y Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis.", "Header", "Header", "Header"],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+.", "Header", "Header", "Header"],
["Y Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis.", "Header", "Header", "Header"],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+.", "Header", "Header", "Header"],
["Y Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis.", "Header", "Header", "Header"],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+.", "Header", "Header", "Header"],
["Y Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis.", "Header", "Header", "Header"],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+.", "Header", "Header", "Header"],
];
my $more_last_data = [
["Last Lorem ipsum dolor", "Donec odio neque, faucibus vel", "conse
+quat quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["Last Lorem ipsum dolor", "Donec odio neque, faucibus vel", "conse
+quat quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["Last Lorem ipsum dolor", "Donec odio neque, faucibus vel", "conse
+quat quis, tincidunt vel, felis."],
];
my @tmp = @$some_data;
my $left_edge_of_table = 50;
my ($nextpage1, undef, $boty) = $pdftable->table(
$pdf,
$page,
$some_data,
x => $left_edge_of_table,
w => 495,
start_y => 750,
next_y => 750,
start_h => 750,
next_h => 750,
padding => 5,
padding_right => 10,
background_color_odd => "gray",
background_color_even => "lightblue",
);
my ($nextpage2, undef, $boty) = $pdftable->table(
$pdf,
$nextpage1,
$more_data,
x => $left_edge_of_table,
w => 500,
start_y => $boty - 10,
next_y => 750,
start_h => $boty - 10,
next_h => 750,
padding => 5,
padding_right => 10,
background_color_odd => "navy",
background_color_even => "red", #cell background color for even r
+ows
);
my ($nextpage3, undef, $boty) = $pdftable->table(
$pdf,
$nextpage2,
$more_extra_data,
x => $left_edge_of_table,
w => 500,
start_y => $boty - 10,
next_y => 750,
start_h => $boty - 10,
next_h => 750,
padding => 5,
padding_right => 10,
background_color_odd => "yellow",
background_color_even => "green", #cell background color for even
+ rows
);
my ($nextpage4, undef, $boty) = $pdftable->table(
$pdf,
$nextpage3,
$more_last_data,
x => $left_edge_of_table,
w => 500,
start_y => $boty - 10,
next_y => 750,
start_h => $boty - 10,
next_h => 750,
padding => 5,
padding_right => 10,
background_color_odd => "blue",
background_color_even => "#ffffff", #cell background color for ev
+en rows
);
$pdf->saveas();
| [reply] [d/l] |
|
Hi, I don’t if you are still there, I have this almost working, I just can't figured why I am loosing all the settings in the last pdf page for the last table. Any thoughts?
#!/usr/bin/perl
use strict;
use warnings;
use PDF::API2;
use PDF::Table;
use Data::Dumper;
my $pdftable = new PDF::Table;
my $pdf = new PDF::API2(-file => "loren.pdf");
my $page_num = 1;
my $some_data = [
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["1 Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["LAST Lorem ipsum dolor", "Donec odio neque, faucibus vel", "conse
+quat quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+. LAST"],
];
my $more_data = [
["X Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["X Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["X Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["X Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
["X Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis."],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+."],
];
my $more_extra_data = [
["Y Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis.", "Header", "Header", "Header"],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+.", "Header", "Header", "Header"],
["Y Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis.", "Header", "Header", "Header"],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+.", "Header", "Header", "Header"],
["Y Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis.", "Header", "Header", "Header"],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+.", "Header", "Header", "Header"],
["Y Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis.", "Header", "Header", "Header"],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+.", "Header", "Header", "Header"],
["Y Lorem ipsum dolor", "Donec odio neque, faucibus vel", "consequa
+t quis, tincidunt vel, felis.", "Header", "Header", "Header"],
["Nulla euismod sem eget neque.", "Donec odio neque", "Sed eu velit
+.", "Header", "Header", "Header"],
];
my $more_last_data = [
['xLast Lorem ipsum dolor', 'Donec odio neque, faucibus vel', 'cons
+equat quis, tincidunt vel, felis.',],
['Nulla euismod sem eget neque.', 'Donec odio neque', 'Sed eu velit
+.',],
['Last Lorem ipsum dolor', 'Donec odio neque, faucibus vel', 'conse
+quat quis, tincidunt vel, felis.',],
['Nulla euismod sem eget neque.', 'Donec odio neque', 'Sed eu velit
+.',],
['Last Lorem ipsum dolor', 'Donec odio neque, faucibus vel', 'conse
+quat quis, tincidunt vel, felis.',],
]
;
main_table( $pdf );
$pdf->saveas();
sub main_table {
my $got_pdf = shift;
my $left_edge_of_table = 70; # 50
my $page = newpage(); # first page
my ($nextpage1, undef, $boty) = $pdftable->table(
$got_pdf,
$page,
$some_data,
x => $left_edge_of_table, # center main table on the page
w => 650, # 495 width of main table on the page
start_y => 500, # 750 height position of main table on the page
next_y => 520, # 750
start_h => 500, # 750
next_h => 500, # 750
new_page_func => \&newpage, # it brigs header to other pages
padding => 5,
padding_right => 10,
border => 0,
background_color_odd => "gray",
background_color_even => "lightblue",
#column_props => [ map{{justify => 'center' }}1..3, ],
);
my ($nextpage2, undef, $boty2) = $pdftable->table(
$got_pdf,
$nextpage1,
$more_data,
x => $left_edge_of_table,
w => 655, # 500
start_y => $boty - 10,
next_y => 500, # 750
start_h => $boty - 10,
next_h => 500, # 750
padding => 5, # 5
padding_right => 10, # 10
background_color_odd => "navy",
background_color_even => "red", #cell background color for even r
+ows
);
my ($nextpage3, undef, $boty3) = $pdftable->table(
$got_pdf,
$nextpage2,
$more_extra_data,
x => $left_edge_of_table,
w => 655, # 500
start_y => $boty2 - 10,
next_y => 500, # 750
start_h => $boty2 - 20,
next_h => 500, # 750
padding => 5,
padding_right => 10,
background_color_odd => "yellow",
background_color_even => "green", #cell background color for even
+ rows
);
$pdftable->table(
$got_pdf,
$nextpage3,
$more_last_data,
x => $left_edge_of_table,
w => 655, # 500
start_y => $boty3 - 10,
next_y => 500, # 750
start_h => $boty3 - 10,
next_h => 500, # 750
padding => 5,
padding_right => 10,
background_color_odd => "blue",
background_color_even => "#ffffff", #cell background color for ev
+en rows
);
}
sub newpage {
my $page = $pdf->page;
my $logo = "logo.jpg";
my $image = $pdf->image_jpeg($logo, 122, 35);
my $gfx = $page->gfx;
$gfx->image($image, 5, 550, 230, 57); # logo position and size on
+page
$page->mediabox(782,605);
##add stuff
report_title($page);
month_report($page);
info($page);
page_nr($page, $page_num++);
return $page;
}
sub report_title {
my $page = shift;
$page->gfx->textlabel( # PDF::API2 method
416, 593, # x, y
$pdf->corefont("Helvetica-Bold"), 11, # font, size
"Accoount Report", # text
-color => '#000000',
-align => 'center',
);
$page->gfx->textlabel( # PDF::API2 method
416, 577, # x, y
$pdf->corefont("Helvetica"), 10, # font, size
"XY Company, Inc.", # text
-color => '#000000',
-align => 'center',
);
$page->gfx->textlabel( # PDF::API2 method
416, 565, # x, y
$pdf->corefont("Helvetica"), 9, # font, size
"100 Main Street", # text
-color => '#000000',
-align => 'center',
);
}
sub month_report {
my $page = shift;
my $date = get_date();
$page->gfx->textlabel( # PDF::API2 method
740, 595, # x, y
$pdf->corefont("Helvetica"), 8, # font, size
"Month: ", # text
-color => '#000000',
-align => 'right',
);
$page->gfx->textlabel( # PDF::API2 method
777, 595, # x, y
$pdf->corefont("Helvetica-Bold"), 8, # font, size
"$date", # text
-color => '#000000',
-align => 'right',
);
$page->gfx->textlabel( # PDF::API2 method
740, 555, # x, y
$pdf->corefont("Helvetica"), 8, # font, size
"Account: ", # text
-color => '#000000',
-align => 'right',
);
$page->gfx->textlabel( # PDF::API2 method
770, 555, # x, y
$pdf->corefont("Helvetica-Bold"), 8, # font, size
"0000007", # text
-color => '#000000',
-align => 'right',
);
}
sub info {
my $page = shift;
$page->gfx->textlabel( # PDF::API2 method
416, 538, # first less move to left - second less move d
+own # x, y
$pdf->corefont("Helvetica-Bold"), 9, # font, size
"My Company", # text
-color => '#000000',
-align => 'center',
);
$page->gfx->textlabel( # PDF::API2 method
116, 538, # first less move to left - second less move d
+own # x, y
$pdf->corefont("Helvetica-Bold"), 9, # font, size
"Number: wy000", # text
-color => '#000000',
-align => 'center',
);
}
sub page_nr {
my $page = shift;
my $num = shift;
$page->gfx->textlabel( # PDF::API2 method
760, 15, # x, y
$pdf->corefont("Helvetica"), 8, # 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;
}
Thanks for the Help! | [reply] [d/l] |
|
|
|
|
|