Skip to content

Instantly share code, notes, and snippets.

@s1037989
Last active January 24, 2020 15:22
Show Gist options
  • Select an option

  • Save s1037989/b289305421fa2b02a455b589a44dfbb3 to your computer and use it in GitHub Desktop.

Select an option

Save s1037989/b289305421fa2b02a455b589a44dfbb3 to your computer and use it in GitHub Desktop.
Multi-page header-repeating table on template PDF
use Mojo::Base -strict;
use Mojo::Collection;
use Mojo::PDF;
use Mojo::Util 'dumper';
use PDF::API2;
use PDF::Table;
die "Usage: $0 template.pdf output.pdf" unless $ARGV[0] && $ARGV[1];
Mojo::PDF->new($ARGV[1], page_size => [792, 612])
->mixin($ARGV[0], 1)
->font('Times-Bold')->size(24)->color(0, 0, .7)
->text('Mojo loves PDFs', 792/2, 400, 'center')
->size(24)->color('#353C8C')
->text('Weeee', 792/2, 250, 'center' )
->text('Started a new line!', 792/2, undef, 'center' )
->page
->mixin($ARGV[0], 2)
->page
->mixin($ARGV[0], 3)
->end;
my $pdf = PDF::API2->open($ARGV[1]);
$pdf->mediabox(792, 612);
my $page = $pdf->openpage(3);
my $pdftable = PDF::Table->new;
my $cell_props = [];
$cell_props->[2][1] = {
background_color => '#000000',
font_color => 'blue',
justify => 'left'
};
$cell_props->[4][1] = {
background_color => '#000000',
font_color => 'red',
justify => 'center'
};
$cell_props->[6][1] = {
background_color => '#000000',
font_color => 'yellow',
justify => 'right'
};
$pdftable->table(
# required params
$pdf,
$page,
data(),
x => 50, # left edge of table
w => 692,
start_y => 220,
start_h => 200,
# some optional params
next_y => 580,
next_h => 540,
padding => 5,
padding_right => 10,
background_color_odd => 'gray',
background_color_even => 'lightblue', # cell background color for even rows
header_props => {bg_color => 'silver', font_size => 20, font_color => '#006600', repeat => 1},
cell_props => $cell_props,
);
# do other stuff with $pdf
$pdf->saveas($ARGV[1]);
sub data {
my $data = [];
push @$data, [split /\t/, $_] foreach grep { $_ } <DATA>;
return $data;
}
__DATA__
Header Row Test
1 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
2 Lorem ipsum dolor Donec super long text goes here to provoke a text block consequat quis, tincidunt vel, felis.
3 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
4 Lorem ipsum dolor Donec super long text goes here to provoke a text block consequat quis, tincidunt vel, felis.
5 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
6 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
7 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
8 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
9 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
2 Lorem ipsum dolor Donec super long text goes here to provoke a text block consequat quis, tincidunt vel, felis.
3 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
4 Lorem ipsum dolor Donec super long text goes here to provoke a text block consequat quis, tincidunt vel, felis.
5 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
6 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
7 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
8 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
9 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
2 Lorem ipsum dolor Donec super long text goes here to provoke a text block consequat quis, tincidunt vel, felis.
3 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
4 Lorem ipsum dolor Donec super long text goes here to provoke a text block consequat quis, tincidunt vel, felis.
5 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
6 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
7 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
8 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
9 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
2 Lorem ipsum dolor Donec super long text goes here to provoke a text block consequat quis, tincidunt vel, felis.
3 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
4 Lorem ipsum dolor Donec super long text goes here to provoke a text block consequat quis, tincidunt vel, felis.
5 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
6 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
7 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
8 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
9 Lorem ipsum dolor Donec consequat quis, tincidunt vel, felis.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment