File: PDFGen.pm

package info (click to toggle)
libtext-flow-perl 0.01-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 184 kB
  • sloc: perl: 763; makefile: 2
file content (104 lines) | stat: -r--r--r-- 2,606 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104

package PDFGen;
use Moose;
use MooseX::Params::Validate;

use pdflib_pl;

has 'pdf'          => (is => 'rw');
has 'pdf_filename' => (is => 'rw');
has 'font'         => (is => 'rw');
has 'font_size'    => (is => 'rw', default => 12);
has 'font_height'  => (is => 'rw');

sub BUILD {
    my ($self, $params) = @_;
    my $pdf = pdflib_pl::PDF_new();
    (pdflib_pl::PDF_open_file($pdf, $self->pdf_filename) != -1) 
        || die "cannot open file for PDF document : $!";
        
    my $font = pdflib_pl::PDF_findfont($pdf, 'Helvetica', 'host', 0);
    (defined($font)) 
        || die "Could not load font";        

    $self->font($font);
    $self->pdf($pdf);    
}

sub get_string_width_function {
    my ($self, %params) = validate(\@_, 
        width  => { isa => 'Int' },
    );
    sub {
        pdflib_pl::PDF_stringwidth(
            $self->pdf, 
            $_[0], 
            $self->font, 
            $self->font_size
        ) < $params{width}    
    }
}

sub open_page {
    my ($self, %params) = validate(\@_, 
        width  => { isa => 'Int' },
        height => { isa => 'Int' }                
    );
    pdflib_pl::PDF_begin_page($self->pdf, $params{width}, $params{height});
    pdflib_pl::PDF_setfont($self->pdf, $self->font, $self->font_size);
    $self->font_height(pdflib_pl::PDF_get_value($self->pdf, "leading", 0));    
}

sub draw_line {
    my ($self, %params) = validate(\@_, 
        top    => { isa => 'Int' },
        left   => { isa => 'Int' },
        width  => { isa => 'Int' },
        height => { isa => 'Int', default => 1 }                
    );
    pdflib_pl::PDF_rect($self->pdf, $params{left}, $params{top}, $params{width}, $params{height});
    pdflib_pl::PDF_fill($self->pdf);    
}

sub draw_rect {
    my ($self, %params) = validate(\@_, 
        top    => { isa => 'Int' },
        left   => { isa => 'Int' },
        width  => { isa => 'Int' },
        height => { isa => 'Int' }                
    );
    pdflib_pl::PDF_rect(
        $self->pdf, 
        $params{left}, 
        ($params{top} - $params{height}), 
        $params{width}, 
        $params{height},
    );
    pdflib_pl::PDF_stroke($self->pdf);    
}

sub draw_text {
    my ($self, %params) = validate(\@_, 
        top  => { isa => 'Int' },
        left => { isa => 'Int' },
        text => { isa => 'Str' },
    );
    pdflib_pl::PDF_show_xy(
        $self->pdf, 
        $params{text},
        $params{left},
        $params{top}, 
    );
}

sub close_page {
    pdflib_pl::PDF_end_page((shift)->pdf);
}

sub write_file {
    pdflib_pl::PDF_close((shift)->pdf);    
}

1;

__END__