line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package CAM::PDF::Annot::Parsed; |
2
|
|
|
|
|
|
|
|
3
|
1
|
|
|
1
|
|
66783
|
use 5.010000; |
|
1
|
|
|
|
|
11
|
|
4
|
1
|
|
|
1
|
|
5
|
use strict; |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
18
|
|
5
|
1
|
|
|
1
|
|
4
|
use warnings; |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
61
|
|
6
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
our $VERSION = '0.10'; |
8
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
=head1 NAME |
10
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
CAM::PDF::Annot::Parsed - Perl extension for pluggable parsing for PDF Annotations |
12
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
=head1 SYNOPSIS |
14
|
|
|
|
|
|
|
|
15
|
|
|
|
|
|
|
# Define a parsing interface for the annotations |
16
|
|
|
|
|
|
|
package MyYAMLTinyParser; |
17
|
|
|
|
|
|
|
use base qw(YAML::Tiny); |
18
|
|
|
|
|
|
|
# MUST DEFINE parse METHOD!! it takes as input the string contents |
19
|
|
|
|
|
|
|
# of the pdf annotations and must spit out the inflated version of it |
20
|
|
|
|
|
|
|
sub parse { return shift->read_string( shift )->[0] } |
21
|
|
|
|
|
|
|
1; |
22
|
|
|
|
|
|
|
|
23
|
|
|
|
|
|
|
package main; |
24
|
|
|
|
|
|
|
my $pdf = CAM::PDF::Annot::Parsed->( 'file.pdf', 'MyYAMLTinyParser' ); |
25
|
|
|
|
|
|
|
|
26
|
|
|
|
|
|
|
for my $parsed_annot ( @{$pdf->getParsedAnnots} ) { |
27
|
|
|
|
|
|
|
# Since I am using YAML::Tiny to parse it, each $parsed_annot |
28
|
|
|
|
|
|
|
# is a YAML::Tiny object |
29
|
|
|
|
|
|
|
# if document has annotations with the mask: |
30
|
|
|
|
|
|
|
|
31
|
|
|
|
|
|
|
#author: |
32
|
|
|
|
|
|
|
# name: Donato Azevedo |
33
|
|
|
|
|
|
|
# |
34
|
|
|
|
|
|
|
|
35
|
|
|
|
|
|
|
print $parsed_annot->[0]{author}{name}, "\n"; |
36
|
|
|
|
|
|
|
} |
37
|
|
|
|
|
|
|
|
38
|
|
|
|
|
|
|
=head1 DESCRIPTION |
39
|
|
|
|
|
|
|
|
40
|
|
|
|
|
|
|
This module provides a way to use a pluggable parser to process |
41
|
|
|
|
|
|
|
comments on annotations of PDF documents. Annotations are free |
42
|
|
|
|
|
|
|
text strings generally contained in pop ups for drawing markups |
43
|
|
|
|
|
|
|
of PDF documents. |
44
|
|
|
|
|
|
|
|
45
|
|
|
|
|
|
|
=cut |
46
|
|
|
|
|
|
|
|
47
|
1
|
|
|
1
|
|
13
|
use base qw( CAM::PDF::Annot ); |
|
1
|
|
|
|
|
3
|
|
|
1
|
|
|
|
|
480
|
|
48
|
|
|
|
|
|
|
|
49
|
|
|
|
|
|
|
=item |
50
|
|
|
|
|
|
|
|
51
|
|
|
|
|
|
|
Constructor |
52
|
|
|
|
|
|
|
|
53
|
|
|
|
|
|
|
my $p = CAM::PDF::Annot::Parsed->new($file, $parser); |
54
|
|
|
|
|
|
|
|
55
|
|
|
|
|
|
|
Creates an instance of the object |
56
|
|
|
|
|
|
|
|
57
|
|
|
|
|
|
|
=cut |
58
|
|
|
|
|
|
|
|
59
|
|
|
|
|
|
|
sub new { |
60
|
1
|
|
|
1
|
1
|
94
|
my ($class, $file, $parser) = @_; |
61
|
1
|
|
|
|
|
14
|
my $self = $class->SUPER::new($file); |
62
|
1
|
|
|
|
|
4029
|
$self->{_parser} = $parser; |
63
|
1
|
|
|
|
|
4
|
bless $self, $class; |
64
|
|
|
|
|
|
|
} |
65
|
|
|
|
|
|
|
|
66
|
|
|
|
|
|
|
=item |
67
|
|
|
|
|
|
|
|
68
|
|
|
|
|
|
|
my $arrRef = $p->getParsedAnnots( $page ); |
69
|
|
|
|
|
|
|
|
70
|
|
|
|
|
|
|
Returns a reference to an array containing the objects parsed by $parser (as |
71
|
|
|
|
|
|
|
passed to the constructor). |
72
|
|
|
|
|
|
|
|
73
|
|
|
|
|
|
|
=cut |
74
|
|
|
|
|
|
|
|
75
|
|
|
|
|
|
|
sub getParsedAnnots { |
76
|
1
|
|
|
1
|
0
|
445
|
my ($self, $page) = @_; |
77
|
1
|
|
|
|
|
3
|
my $annots = []; |
78
|
1
|
|
|
|
|
26
|
for my $annot ( @{$self->getAnnotations($page)} ) { |
|
1
|
|
|
|
|
8
|
|
79
|
2
|
|
|
|
|
1914
|
my $annotVal = $self->getValue( $annot ); |
80
|
2
|
100
|
|
|
|
3552
|
if ( exists $annotVal->{Contents} ) { |
81
|
1
|
|
|
|
|
3
|
( my $parse_str = $self->getValue( $annotVal->{Contents} ) ) =~ s/\r\n/\n/g; |
82
|
1
|
50
|
|
|
|
23
|
if ( my $parsed = $self->{_parser}->parse( $parse_str ) ) { |
83
|
1
|
|
|
|
|
1685
|
push @$annots, $parsed; |
84
|
|
|
|
|
|
|
} |
85
|
|
|
|
|
|
|
} |
86
|
|
|
|
|
|
|
} |
87
|
1
|
|
|
|
|
4
|
return $annots; |
88
|
|
|
|
|
|
|
} |
89
|
|
|
|
|
|
|
|
90
|
|
|
|
|
|
|
1; |
91
|
|
|
|
|
|
|
__END__ |