Wie suche ich eine PDF-Datei über die Befehlszeile?

26

Ich überprüfe die Referenzen eines Papiers und möchte die Positionen im Hauptteil ermitteln, auf die in der Referenzliste verwiesen wird. Gibt es einen PDF-Editor, der die Suche über Bash unterstützt und den Kontext einer Position extrahiert? Ich habe versucht, PDF in Text umzuwandeln, aber kein gutes Ergebnis erzielt.

David
quelle

Antworten:

22

Um die obige Antwort zu ergänzen, können Sie insbesondere ein Befehlszeilentool von xpdf-utils namens pdftotext verwenden und dann das von diesem Tool erstellte Textdokument mit grep durchsuchen.

Das könnte ungefähr so ​​aussehen:

pdftotext document.pdf - | grep -C5 -n -i "search term"

Weitere Informationen finden Sie im Handbuch. Der einzige Nachteil von pdftotext ist, dass Sie nicht in der Lage sind, mehrere Dateien gleichzeitig zu transformieren. Dieses Problem kann mit einem kleinen Bash-Skript behoben werden:

for f in pdf_directory; do echo $f; pdftotext $f - | grep -i "search_term"; done

Wenn Sie Probleme beim Erstellen eines Textdokuments aus einem PDF-Dokument haben, beispielsweise aufgrund einer inkompatiblen PDF-Datei, ist dies ein weiteres Problem.

Ich denke, im Allgemeinen enthalten PDF-Editoren keine Befehlszeilen, da sie grafisch sind. Wenn Sie bash (oder vielleicht zsh!) Verwenden möchten, müssen Sie möglicherweise eine Terminal-Shell verwenden.

Viel Glück!

Joe
quelle
20

Poppler-Utensilien

Hinweis: xpdf-utils ist ein Übergangspaket für poppler-utils.

Sie können Poppler-Utils verwenden. poppler-utils ist eine Suite von Tools für PDF-Dateien (Portable Document Format).

Um es zu installieren, können Sie das Ubuntu Software Center verwenden oder auf Folgendes klicken:

Installieren Sie Poppler-Utils

pdfgrep

pdfgrepkann rekursiv in Verzeichnisbäumen nach einer Zeichenfolge oder einem Muster in PDF-Dateien suchen, Übereinstimmungen zählen oder für jede Übereinstimmung einen bestimmten Kontext drucken. Um beispielsweise rekursiv keywordin /some directoryGroß- und Kleinschreibung zu suchen , gehen Sie wie folgt vor:

pdfgrep -Ri keyword /some/directory

Pdfgrep ist ein Tool zum Suchen von Text in PDF-Dateien. Es funktioniert ähnlich wie grep.

Eigenschaften:

  • Suche nach regulären Ausdrücken.
  • Unterstützung für einige wichtige grep-Optionen, einschließlich: + Dateinamenausgabe. + Seitenzahlausgabe. + optionale Groß- / Kleinschreibung. +
    Vorkommen zählen .
  • und das wichtigste Merkmal: Farbausgabe!

Installieren Sie pdfgrep

1 Quelle: Ubuntu Apps-Verzeichnis

Mitch
quelle
6

So suchen Sie mit pdfgrep in mehreren PDF-Dateien nach einem regulären Ausdruck:

find /path -iname '*.pdf' -exec pdfgrep -H 'pattern' {} \;

Wobei der Pfad der Speicherort für Ihre PDF-Dateien ist.

entzünden
quelle
0

Der Grund pdftotext ohne Erfolg war sein könnte , dass die PDF gescannte Bilder sind , und Sie müssen OCR ihnen, schrieb ich einen schnellen Weg , um alle suchen pdfs , die nicht sein kann greped und OCR ihnen.

Ich habe festgestellt, dass eine pdfDatei, die keine Schriftart enthält, normalerweise nicht durchsucht werden kann. Wenn wir das wissen, können wir es nutzen pdffonts.

Die ersten pdffontsbeiden Zeilen des sind die Tabellenüberschriften. Wenn also eine Datei durchsucht werden kann, werden mehr als zwei Zeilen ausgegeben, da wir wissen, dass wir Folgendes erstellen können:

gedit check_pdf_searchable.sh

Fügen Sie dies ein

#!/bin/bash 
#set -vx
if ((`pdffonts "$1" | wc -l` < 3 )); then
echo $1
ocrmypdf "$1" "$1"_ocr.pdf
fi

dann mach es ausführbar

chmod +x check_pdf_searchable.sh

Listen Sie dann alle nicht durchsuchbaren PDFs im Verzeichnis auf:

ls -1 ./*.pdf | xargs -L1 -I {} ./check_pdf_searchable.sh {}

oder im Verzeichnis und seinen Unterverzeichnissen:

tree -fai . | grep -P ".pdf$" | xargs -L1 -I {} ./check_pdf_searchable.sh {}

Sie müssen außerdem Folgendes installieren:

sudo apt install ocrmypdf
Eduard Florinescu
quelle