/usr/bin/deillustrate is in libcam-pdf-perl 1.60-1.
This file is owned by root:root, with mode 0o755.
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 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 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | #!/usr/bin/perl -w
eval 'exec /usr/bin/perl -w -S $0 ${1+"$@"}'
if 0; # not running under some shell
package main;
use warnings;
use strict;
use CAM::PDF;
use Getopt::Long;
use Pod::Usage;
our $VERSION = '1.60';
my %opts = (
verbose => 0,
order => 0,
help => 0,
version => 0,
);
Getopt::Long::Configure('bundling');
GetOptions('v|verbose' => \$opts{verbose},
'o|order' => \$opts{order},
'h|help' => \$opts{help},
'V|version' => \$opts{version},
) or pod2usage(1);
if ($opts{help})
{
pod2usage(-exitstatus => 0, -verbose => 2);
}
if ($opts{version})
{
print "CAM::PDF v$CAM::PDF::VERSION\n";
exit 0;
}
if (@ARGV < 1)
{
pod2usage(1);
}
my $infile = shift;
my $outfile = shift || q{-};
my $doc = CAM::PDF->new($infile) || die "$CAM::PDF::errstr\n";
if (!$doc->canModify())
{
die "This PDF forbids modification\n";
}
foreach my $objnum (keys %{$doc->{xref}})
{
my $objnode = $doc->dereference($objnum);
my $val = $objnode->{value};
if ($val->{type} eq 'dictionary')
{
my $dict = $val->{value};
my $changed = 0;
foreach my $key (qw(Metadata
PieceInfo
LastModified
Thumb))
{
if (exists $dict->{$key})
{
delete $dict->{$key};
$changed = 1;
}
}
if ($changed)
{
$doc->{changes}->{$objnum} = 1;
}
}
}
$doc->cleanse();
if ($opts{order})
{
$doc->preserveOrder();
}
$doc->cleanoutput($outfile);
__END__
=for stopwords deillustrate.pl
=head1 NAME
deillustrate.pl - Remove Adobe Illustrator metadata from a PDF file
=head1 SYNOPSIS
deillustrate.pl [options] infile.pdf [outfile.pdf]\n";
Options:
-o --order preserve the internal PDF ordering for output
-v --verbose print diagnostic messages
-h --help verbose help message
-V --version print CAM::PDF version
=head1 DESCRIPTION
Adobe Illustrator has a very handy feature that allows an author to
embed special metadata in a PDF that allows Illustrator to reopen the
file fully editable. However, this extra data does increase the size
of the PDF unnecessarily if no further editing is expected, as is the
case for most PDFs that will be distributed on the web. Depending on
the PDF, this can dramatically reduce the file size.
This program uses a few heuristics to find and delete the
Illustrator-specific data. This program also removes embedded
thumbnail representations of the PDF for further byte savings.
=head1 SEE ALSO
CAM::PDF
=head1 AUTHOR
See L<CAM::PDF>
=cut
|