Perl Code - PDF Inhalt ersetzen - Output leer

GlockMane88

Lt. Commander
Registriert
Aug. 2008
Beiträge
1.244
Hi Leute,

habe ein Perl Script gefunden, welches in einer PDF Datei Text ersetzt (ähnlich dem öffnen der PDF mit einem Texteditor und manuellem Ersetzen eines bestimmten Textes).

Leider ist der Output eine leere PDF Datei.. Kann man anhand vom Code sagen, warum das passiert? Habe Perl Strawberry installiert..

Perl:
#!/usr/bin/env perl

$/ = "\n";
$\ = "";
$, = "";

open(FH_IN,  "<in.pdf");
open(FH_OUT, ">out.pdf");
binmode(FH_IN);
binmode(FH_OUT);

my $buffer              = '';
my $pattern_start       = qr/^\d+\s+\d+\s+obj/;
my $pattern_end         = qr/endobj\b/;
my $pattern_filter      = qr/(?:\/C\s+\/Windows)/;

my $try_to_decompress   = ($ARGV[0] eq '--unzip') ? 1 : 0;
my $can_decompress      = 0;
my $pattern_compressed;

if ($try_to_decompress) {
  eval "use zlib;";
  $can_decompress       = ($@) ? 0 : 1;

  if ($can_decompress) {
    $pattern_compressed = qr/\/FlateDecode[\w\W]*>>[\w\W]*stream[\r\n]*([\w\W]*?)[\r\n]*endstream/;
  }
  else {
    print 'WARNING: --unzip is not supported' . "\n" . 'perl module not found: "Compress::Raw::Zlib"' . "\n\n";
  }
}

my $debug = 0;
my $data;

while (my $line = <FH_IN>) {
  if ($buffer){
    $buffer = $buffer . $line;

    if ($line =~ m/$pattern_end/){

      if ($can_decompress && $buffer =~ m/$pattern_compressed/) {
        $data  = $1;
        $data  = zlib::decompress(\$data);  # pass data by reference

        if ( $data =~ m/$pattern_filter/ ){
          $buffer  = '';
        }

        if ($debug) {
          $buffer = '-'x40 . '<data>' . "\n" . ($buffer ? $data : 'matching pattern removed') . "\n" . '-'x40 . '</data>' . "\n";
        }

      }

      if ( $buffer =~ m/$pattern_filter/ ){
        $buffer = '';
      } else {
        print FH_OUT $buffer;
        $buffer = '';
      }

    }
  }

  else {

    if ( $line =~ m/$pattern_start/ ){
      $buffer = $line;
    } else {
      print FH_OUT $line;
    }

  }

}

if ($buffer){
  print FH_OUT $buffer;
  $buffer = '';
}

close (FH_IN);
close (FH_OUT);
 
Ohne mir den Code genauer angeschaut zu haben (geschweige denn, dass ich mich gut mit Perl auskenne): Dein PDF enthält auch Text und besteht nicht nur aus gescannten Seiten?
Wo hast du den Code gefunden?
Setz $debug mal auf 1
 
  • Gefällt mir
Reaktionen: GTrash81
Ja, die PDF ist nicht gescannt.. Debug hatte ich bereits auf 1, hat aber keine weiteren Infos geliefert, jedenfalls habe ich nichts gesehen..
 
Zurück
Oben