CAM-PDF
view release on metacpan or search on metacpan
bin/rewritepdf.pl view on Meta::CPAN
decode => 0,
cleanse => 0,
clearannots => 0,
filters => [],
newprefs => 0,
prefs => [],
newpass => 0,
pass => [],
decrypt => 0,
newversion => 0,
verbose => 0,
order => 0,
help => 0,
version => 0,
# temporary variables
looking => q{},
state => 0,
otherargs => [],
);
Getopt::Long::Configure('bundling');
GetOptions('1|2|3|4|5|6|7|8|9' => sub {$opts{newversion} = '1'.$_[0]},
'c|cleanse' => \$opts{cleanse},
'd|decode' => \$opts{decode},
'f|filter=s' => \@{$opts{filters}},
'C|clearannots' => \$opts{clearannots},
'X|decrypt' => \$opts{decrypt},
'p|pass' => sub { @{$opts{pass}}=(); $opts{looking}='pass'; $opts{state}=2; $opts{newpass}=1; },
'P|prefs' => sub { @{$opts{prefs}}=(); $opts{looking}='prefs'; $opts{state}=4; $opts{newprefs}=1; },
'v|verbose' => \$opts{verbose},
'o|order' => \$opts{order},
'h|help' => \$opts{help},
'V|version' => \$opts{version},
'<>' => sub {
if ($opts{looking})
{
push @{$opts{$opts{looking}}}, $_[0];
if (--$opts{state} == 0)
{
$opts{looking} = q{};
}
}
else
{
push @{$opts{otherargs}}, $_[0];
}
},
) or pod2usage(1);
if ($opts{help})
{
pod2usage(-exitstatus => 0, -verbose => 2);
}
if ($opts{version})
{
print "CAM::PDF v$CAM::PDF::VERSION\n";
exit 0;
}
local @ARGV = @{$opts{otherargs}};
if (@ARGV < 1)
{
pod2usage(1);
}
my $infile = shift;
my $outfile = shift || q{-};
my $opass = shift;
my $upass = shift || $opass;
my $doc = CAM::PDF->new($infile, $opass, $upass) || die "$CAM::PDF::errstr\n";
if (!$doc->canModify())
{
die "This PDF forbids modification\n";
}
if ($opts{newversion})
{
$doc->{pdfversion} = $opts{newversion};
}
if ($opts{decode} || @{$opts{filters}} > 0)
{
foreach my $objnode (keys %{$doc->{xref}})
{
if ($opts{decode})
{
$doc->decodeObject($objnode);
}
foreach my $filtername (@{$opts{filters}})
{
$doc->encodeObject($objnode, $filtername);
}
}
}
if ($opts{newprefs} || $opts{newpass})
{
my @p = $doc->getPrefs();
if ($opts{newpass})
{
$p[0] = $opts{pass}->[0];
$p[1] = $opts{pass}->[1];
}
if ($opts{newprefs})
{
$p[2] = $opts{prefs}->[0];
$p[3] = $opts{prefs}->[1];
$p[4] = $opts{prefs}->[2];
$p[5] = $opts{prefs}->[3];
}
$doc->setPrefs(@p);
}
if ($opts{decrypt})
{
$doc->cacheObjects();
$doc->{crypt}->{noop} = 1;
if ($doc->{crypt}->{EncryptBlock})
{
( run in 0.879 second using v1.01-cache-2.11-cpan-5735350b133 )