/usr/share/doc/libpdf-api2-perl/examples/pdf-optimize.pl is in libpdf-api2-perl 2.023-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 | #!/usr/bin/perl
use PDF::API2::Basic::PDF::File;
use PDF::API2::Basic::PDF::Utils;
use PDF::API2;
use Scalar::Util qw(blessed);
sub walk_obj {
my ($objs,$spdf,$tpdf,$obj,@keys)=@_;
my $tobj;
if(ref($obj)=~/Objind$/) {
$obj->realise;
}
return($objs->{scalar $obj}) if(defined $objs->{scalar $obj});
die "object already copied" if($obj->{' copied'});
$tobj=$obj->copy($spdf);
$obj->{' copied'}=1;
$tpdf->new_obj($tobj) if($obj->is_obj($spdf) && !$tobj->is_obj($tpdf));
$objs->{scalar $obj}=$tobj;
if(ref($obj)=~/Array$/ || (blessed($obj) && $obj->isa('PDF::API2::Basic::PDF::Array'))) {
$tobj->{' val'}=[];
foreach my $k ($obj->elementsof) {
$k->realise if(ref($k)=~/Objind$/);
$tobj->add_elements(walk_obj($objs,$spdf,$tpdf,$k));
}
} elsif(ref($obj)=~/Dict$/ || (blessed($obj) && $obj->isa('PDF::API2::Basic::PDF::Dict'))) {
@keys=keys(%{$tobj}) if(scalar @keys <1);
foreach my $k (@keys) {
next if($k=~/^ /);
next unless(defined($obj->{$k}));
$tobj->{$k}=walk_obj($objs,$spdf,$tpdf,$obj->{$k});
}
if($obj->{' stream'}) {
if($tobj->{Filter}) {
$tobj->{' nofilt'}=1;
} else {
delete $tobj->{' nofilt'};
$tobj->{Filter}=PDFArray(PDFName('FlateDecode'));
}
$tobj->{' stream'}=$obj->{' stream'};
}
} else {
$obj->realise;
return(walk_obj($objs,$spdf,$tpdf,$obj));
}
delete $tobj->{' streamloc'};
delete $tobj->{' streamsrc'};
return($tobj);
}
if(scalar @ARGV<2) {
print "usage: $0 infile outfile\n";
exit(1);
}
$spdf=PDF::API2::Basic::PDF::File->open($ARGV[0]);
$tpdf=PDF::API2::Basic::PDF::File->_new;
$mycache={};
$tpdf->{Root}=walk_obj($mycache,$spdf,$tpdf,$spdf->{Root});
$tpdf->{Info}=walk_obj($mycache,$spdf,$tpdf,$spdf->{Info}) if $spdf->{Info};
$tpdf->out_file($ARGV[1]);
|