view release on metacpan or search on metacpan
lib/CAM/PDF.pm view on Meta::CPAN
{
my $self = shift;
return $self->getValue($self->getRootDict()->{Pages});
}
=item $doc->parseObj($string)
Use parseAny() instead of this, if possible.
Given a fragment of PDF page content, parse it and return an object
Node. This can be called as a class method in most circumstances, but
is intended as an instance method.
=cut
sub parseObj
{
my $self = shift;
my $c = shift;
lib/CAM/PDF.pm view on Meta::CPAN
return CAM::PDF::Node->new('object', $objnode, $objnum, $gennum);
}
=item $doc->parseInlineImage($string)
=item $doc->parseInlineImage($string, $objnum)
=item $doc->parseInlineImage($string, $objnum, $gennum)
Given a fragment of PDF page content, parse it and return an object
Node. This can be called as a class method in some cases, but
is intended as an instance method.
=cut
sub parseInlineImage
{
my $self = shift;
my $c = shift;
my $objnum = shift;
lib/CAM/PDF.pm view on Meta::CPAN
$str =~ s/ \A << /BI /xms;
$str =~ s/ >> \z / ID/xms;
$str .= "\n" . $stream . "\nEI";
return $str;
}
=item $doc->parseStream($string, $objnum, $gennum, $dictnode)
This should only be used by parseObj(), or other specialized cases.
Given a fragment of PDF page content, parse it and return a stream
Node. This can be called as a class method in most circumstances, but
is intended as an instance method.
The dictionary Node argument is typically the body of the object Node
that precedes this stream.
=cut
sub parseStream
{
lib/CAM/PDF.pm view on Meta::CPAN
}
=item $doc->parseDict($string)
=item $doc->parseDict($string, $objnum)
=item $doc->parseDict($string, $objnum, $gennum)
Use parseAny() instead of this, if possible.
Given a fragment of PDF page content, parse it and return an dictionary
Node. This can be called as a class method in most circumstances, but
is intended as an instance method.
=cut
sub parseDict
{
my $pkg_or_doc = shift;
my $c = shift;
my $objnum = shift;
lib/CAM/PDF.pm view on Meta::CPAN
}
=item $doc->parseArray($string)
=item $doc->parseArray($string, $objnum)
=item $doc->parseArray($string, $objnum, $gennum)
Use parseAny() instead of this, if possible.
Given a fragment of PDF page content, parse it and return an array
Node. This can be called as a class or instance method.
=cut
sub parseArray
{
my $pkg_or_doc = shift;
my $c = shift;
my $objnum = shift;
my $gennum = shift;
lib/CAM/PDF.pm view on Meta::CPAN
}
=item $doc->parseLabel($string)
=item $doc->parseLabel($string, $objnum)
=item $doc->parseLabel($string, $objnum, $gennum)
Use parseAny() instead of this, if possible.
Given a fragment of PDF page content, parse it and return a label
Node. This can be called as a class or instance method.
=cut
sub parseLabel
{
my $pkg_or_doc = shift;
my $c = shift;
my $objnum = shift;
my $gennum = shift;
lib/CAM/PDF.pm view on Meta::CPAN
}
=item $doc->parseRef($string)
=item $doc->parseRef($string, $objnum)
=item $doc->parseRef($string, $objnum, $gennum)
Use parseAny() instead of this, if possible.
Given a fragment of PDF page content, parse it and return a reference
Node. This can be called as a class or instance method.
=cut
sub parseRef
{
my $pkg_or_doc = shift;
my $c = shift;
my $objnum = shift;
my $gennum = shift;
lib/CAM/PDF.pm view on Meta::CPAN
}
=item $doc->parseNum($string)
=item $doc->parseNum($string, $objnum)
=item $doc->parseNum($string, $objnum, $gennum)
Use parseAny() instead of this, if possible.
Given a fragment of PDF page content, parse it and return a number
Node. This can be called as a class or instance method.
=cut
sub parseNum
{
my $pkg_or_doc = shift;
my $c = shift;
my $objnum = shift;
my $gennum = shift;
lib/CAM/PDF.pm view on Meta::CPAN
}
=item $doc->parseString($string)
=item $doc->parseString($string, $objnum)
=item $doc->parseString($string, $objnum, $gennum)
Use parseAny() instead of this, if possible.
Given a fragment of PDF page content, parse it and return a string
Node. This can be called as a class or instance method.
=cut
sub parseString
{
my $pkg_or_doc = shift;
my $c = shift;
my $objnum = shift;
my $gennum = shift;
lib/CAM/PDF.pm view on Meta::CPAN
}
=item $doc->parseHexString($string)
=item $doc->parseHexString($string, $objnum)
=item $doc->parseHexString($string, $objnum, $gennum)
Use parseAny() instead of this, if possible.
Given a fragment of PDF page content, parse it and return a hex string
Node. This can be called as a class or instance method.
=cut
sub parseHexString
{
my $pkg_or_doc = shift;
my $c = shift;
my $objnum = shift;
my $gennum = shift;
lib/CAM/PDF.pm view on Meta::CPAN
}
=item $doc->parseBoolean($string)
=item $doc->parseBoolean($string, $objnum)
=item $doc->parseBoolean($string, $objnum, $gennum)
Use parseAny() instead of this, if possible.
Given a fragment of PDF page content, parse it and return a boolean
Node. This can be called as a class or instance method.
=cut
sub parseBoolean
{
my $pkg_or_doc = shift;
my $c = shift;
my $objnum = shift;
my $gennum = shift;
lib/CAM/PDF.pm view on Meta::CPAN
}
=item $doc->parseNull($string)
=item $doc->parseNull($string, $objnum)
=item $doc->parseNull($string, $objnum, $gennum)
Use parseAny() instead of this, if possible.
Given a fragment of PDF page content, parse it and return a null
Node. This can be called as a class or instance method.
=cut
sub parseNull
{
my $pkg_or_doc = shift;
my $c = shift;
my $objnum = shift;
my $gennum = shift;
lib/CAM/PDF.pm view on Meta::CPAN
return CAM::PDF::Node->new('null', $val, $objnum, $gennum);
}
=item $doc->parseAny($string)
=item $doc->parseAny($string, $objnum)
=item $doc->parseAny($string, $objnum, $gennum)
Given a fragment of PDF page content, parse it and return a Node of
the appropriate type. This can be called as a class or instance
method.
=cut
sub parseAny
{
my $p = shift; # pkg or doc
my $c = shift;
my $objnum = shift;
lib/CAM/PDF.pm view on Meta::CPAN
#print "Filling cache for obj \#$key...\n";
my $pos = $self->{xref}->{$key};
if (!$pos)
{
warn "Bad request for object $key at position 0 in the file\n";
return;
}
my $content_fragment;
if (ref $pos)
{
$content_fragment = substr $pos->{objstream}->{stream}, $pos->{start}, $pos->{end};
$content_fragment = "$key 0 obj\n$content_fragment\nendobj\n";
}
else
{
# This is fastest and safest
if (!exists $self->{endxref})
{
$self->_buildendxref();
}
my $endpos = $self->{endxref}->{$key};
if (!defined $endpos || $endpos < $pos)
{
# really slow, but a totally safe fallback
$endpos = $self->{contentlength};
}
$content_fragment = substr $self->{content}, $pos, $endpos - $pos;
}
$self->{objcache}->{$key} = $self->parseObj(\$content_fragment, $key);
}
return $self->{objcache}->{$key};
}
=item $doc->getPropertyNames($pagenum)
=item $doc->getProperty($pagenum, $propertyname)
lib/CAM/PDF.pm view on Meta::CPAN
sub writeString
{
my $pkg_or_doc = shift;
my $string = shift;
# Divide the string into manageable pieces, which will be
# re-concatenated with "\" continuation characters at the end of
# their lines
# -- This code used to do concatenation by juxtaposing multiple
# -- "(<fragment>)" compenents, but this breaks many PDF
# -- implementations (incl Acrobat5 and XPDF)
# Break the string into pieces of length $maxstr. Note that an
# artifact of this usage of split returns empty strings between
# the fragments, so grep them out
my $maxstr = (ref $pkg_or_doc) ? $pkg_or_doc->{maxstr} : $CAM::PDF::MAX_STRING;
my @strs = grep {$_ ne q{}} split /(.{$maxstr}})/xms, $string;
for (@strs)
{
s/ \\ /\\\\/gxms; # escape escapes -- this line must come first!
s/ ([()]) /\\$1/gxms; # escape parens
s/ \n /\\n/gxms;
s/ \r /\\r/gxms;
s/ \t /\\t/gxms;