This file is indexed.

/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