Gewusst wie: Perl benutzen Sie ein PDF-Doc

March 27

Gewusst wie: Perl benutzen Sie ein PDF-Doc

Perl-Skripte \"crawl\" über das Web, Sichtung durch den Ozean von HTML-Seiten Informationen und zwangsläufig begegnen einige der Millionen von Adobe Acrobat PDF-Dateien über das Internet verstreut. Obwohl sie druckbereit und attraktiv, aus der Sicht von einem Webcrawler sind, sind PDF-Dateien eine etwas härtere Nuss zu knacken als einfache, textbasierte HTML-Seiten. Zum Glück, wie bei vielen Web-Aufgaben gibt es ein Perl-Modul, das Leben erleichtern helfen kann: CAM::PDF. Diese Programmierschnittstelle, hat aber meist erstellen und Bearbeiten von PDF-Dateien sollen einige Hilfsprogramme, die Skripte ihren Inhalt durchsuchen ermöglicht.

Anweisungen

1 Installieren Sie CAM::PDF. Das Cpan-Dienstprogramm bietet die einfachste Möglichkeit hierfür--Start Cpan in der Befehlszeile ein und Prompt Typ \"install CAM::PDF\" (ohne Anführungszeichen).

2 Öffnen Sie einen Editor und starten Sie das Skript folgenden Zeilen für den Perl-Interpreter zu starten und die notwendigen Importmodul eingeben:

! / Usr/bin/Perl Verwenden von CAM::PDFGEHEN

Fügen Sie die nächsten zwei Zeilen, um die Befehlszeilenargumente verarbeiten, denen der Benutzer übergeben werden:

mein $file = ShiftGEHENMein $search = ShiftGEHEN

Das erste Argument an das Skript übergeben werden der Name der PDF-Datei und die zweite, die zu suchende Zeichenfolge.

3 Erstellen Sie ein neues CAM::PDF-Objekt, indem Sie das Skript die folgende Zeile hinzufügen:

Mein $doc = CAM::PDF -> new($file)GEHEN

Verwenden die importierten Modul NumPages-Methode definieren die Obergrenze, erstellen Sie eine Schleife um jede Seite des Dokuments zu verarbeiten:

Foreach meine $p ((1.. $doc -> numPages())){

4 Innerhalb der Schleife fügen Sie diese Zeile, um jede Seite der Text aus der PDF-Datei zu erhalten:

Mein $str = $doc -> getPageText($p)GEHEN

Fügen Sie die nächste Skriptanweisung aus, um die Seite Text in ein Array von separaten Zeilen aufgeteilt:

@lines = Split (/ \n /, $str)GEHEN

Beenden Sie die Schleifenanweisung durch eine schließende Klammer eingeben:

}

5 Fügen Sie abschließend eine weitere Schleife, um das Skript zu jeder Zeile auf der Seite zu verarbeiten und suchen eine Übereinstimmung des Benutzers Suchzeichenfolge als regulären Ausdruck. Wenn der reguläre Ausdruck eine Übereinstimmung zurückgegeben wird, wird im Beispiel die Linie und die Seitenzahl auf Stdout. Anstelle dieser print-Anweisungen implementieren Sie Code, um die Ergebnisse zu verarbeiten, wie gebraucht.

mein $i = 0GEHENForeach $line (@lines){

++$i

GEHEN

if($line =~ /$search/) { print \"\\\"$search\\\" found in line $i of page $p\\n\"

GEHEN

print \"$line\\n\\n\" }

}

Tipps & Warnungen

  • Da Text in PDF-Dateien wie die von HTML-Dateien nicht hierarchisch organisiert ist, musst du wahrscheinlich entwerfen Sie Skripts, um bestimmte Arten von PDF-Dateien (z. B. Formulare, Bulletins, Zeitpläne) zu suchen. Es möglicherweise nicht möglich, eine robuste Perl-Skript zu schreiben, die effektiv jede Art von PDF-Datei durchsuchen können.