File Coverage

blib/lib/PDF/Make/Builder/Image.pm
Criterion Covered Total %
statement 37 37 100.0
branch 6 6 100.0
condition 7 9 77.7
subroutine 6 6 100.0
pod 1 1 100.0
total 57 59 96.6


line stmt bran cond sub pod time code
1             package PDF::Make::Builder::Image;
2 42     42   231 use strict;
  42         69  
  42         1380  
3 42     42   140 use warnings;
  42         53  
  42         1633  
4 42     42   179 use Object::Proto;
  42         64  
  42         1937  
5 42     42   14256 use PDF::Make::Image;
  42         99  
  42         1960  
6              
7             BEGIN {
8 42     42   1630 Object::Proto::define('PDF::Make::Builder::Image',
9             'image:Str:required',
10             'mime:Str',
11             'align:Str',
12             'x:Num', 'y:Num', 'w:Num', 'h:Num',
13             );
14 42         10513 Object::Proto::import_accessors('PDF::Make::Builder::Image');
15             }
16              
17             sub add {
18 10     10 1 20 my ($self, $builder) = @_;
19 10         32 my $page = $builder->page;
20 10         32 my $canvas = $page->canvas;
21              
22             # Load the image
23 10         456777 my $img = PDF::Make::Image->from_file($self->image);
24 10         143 my $img_w = $img->width;
25 10         31 my $img_h = $img->height;
26              
27             # Write image XObject to document
28 10         77 my $doc = $builder->doc;
29 10         732 my $obj_num = $img->write_to_doc($doc);
30              
31             # Generate unique resource name
32 10         36 my $res_name = 'Im' . $obj_num;
33 10         128 $page->xs_page->add_image($res_name, $obj_num);
34              
35             # Determine placement dimensions
36 10   66     69 my $draw_w = $self->w // $page->width;
37 10         38 my $draw_h = $self->h;
38              
39             # Maintain aspect ratio if only one dimension given
40 10 100       41 if (!defined $draw_h) {
41 6         18 $draw_h = $draw_w * ($img_h / $img_w);
42             }
43              
44             # Position
45 10   66     92 my $draw_x = $self->x // $page->content_x;
46 10         33 my $draw_y = $self->y;
47              
48 10 100       32 if (!defined $draw_y) {
49 8         29 $draw_y = $page->cursor_y - $draw_h;
50             }
51              
52             # Center alignment
53 10 100 100     57 if ($self->align && $self->align eq 'center') {
54 2         9 $draw_x = $page->content_x + ($page->width - $draw_w) / 2;
55             }
56              
57             # Draw
58 10         145 $canvas->image($res_name, $draw_x, $draw_y, $draw_w, $draw_h);
59              
60             # Advance cursor
61 10         48 $page->advance_y($draw_h + 5);
62              
63 10         799 return $self;
64             }
65              
66             1;
67              
68             __END__