Last active
January 24, 2020 15:22
-
-
Save s1037989/b289305421fa2b02a455b589a44dfbb3 to your computer and use it in GitHub Desktop.
Multi-page header-repeating table on template PDF
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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