web-dev-qa-db-fra.com

Comment rechercher un fichier PDF à partir de la ligne de commande?

Je vérifie les références d'un document et souhaite trouver les positions dans le corps où un document (dans la liste des références) est référencé. Existe-t-il un éditeur PDF qui prend en charge la recherche via bash et extrait le contexte d'une position? J'ai essayé de convertir PDF en texte, mais le résultat n'a pas été satisfaisant.

26
David

Pour ajouter à la réponse ci-dessus, vous pouvez notamment utiliser un outil de ligne de commande de xpdf-utils appelé pdftotext, puis effectuer une recherche dans le document texte créé par cet outil avec grep.

Cela pourrait ressembler à ceci:

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

Il y a plus d'informations dans le manuel. Le seul inconvénient de pdftotext est que vous ne pouvez pas nous déplacer pour transformer plusieurs fichiers en même temps. Ce problème peut être surmonté avec un petit script bash:

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

Si vous rencontrez des problèmes pour créer un document texte à partir d'un fichier PDF à cause, par exemple, d'un fichier pdf incompatible, vous rencontrez un autre problème.

Je pense qu'en général, les éditeurs pdf n'incluent pas les lignes de commande car elles sont graphiques. Si vous souhaitez utiliser bash (ou peut-être zsh!), Vous devrez peut-être utiliser un terminal Shell.

Bonne chance!

22
Joe

poppler-utils

Remarque: xpdf-utils est un paquet transitoire pour poppler-utils.

Vous pouvez utiliser poppler-utils. poppler-utils est une suite d'outils pour les fichiers PDF (Portable Document Format).

Pour l'installer, vous pouvez utiliser le Centre de logiciel Ubuntu ou en cliquant ci-dessous:

Install poppler-utils

pdfgrep

pdfgrep peut rechercher une chaîne ou un motif dans les fichiers PDF de manière récursive dans les arborescences de répertoires, en comptant les correspondances ou en imprimant du contexte pour chaque correspondance. Par exemple, pour rechercher récursivement keyword dans /some directory, insensible à la casse:

pdfgrep -Ri keyword /some/directory

Pdfgrep est un outil de recherche de texte dans les fichiers PDF. Cela fonctionne de manière similaire à `grep '.

Fonctionnalités:

  • rechercher des expressions régulières.
  • prise en charge de certaines options importantes de grep, notamment: + la sortie du nom de fichier. + sortie du numéro de page. + insensibilité facultative à la casse. + compter
    occurrences.
  • et la caractéristique la plus importante: la sortie couleur!

Install pdfgrep

1 Source: Répertoire d'applications Ubunt

19
Mitch

Pour rechercher une expression régulière dans plusieurs fichiers pdf à l'aide de pdfgrep:

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

où path est l'emplacement de vos fichiers pdf.

6
ignite

La raison pour laquelle pdftotext a échoué est peut-être que les PDF sont des images numérisées et que vous devez les OCR, j’ai écrit un moyen rapide de rechercher tous les pdfs qui ne peuvent pas être greped et les ROC.

J'ai remarqué que si un fichier pdf ne contient aucune police, il est généralement impossible de le rechercher. Sachant cela, nous pouvons utiliser pdffonts.

L'en-tête de la table est composé des deux premières lignes de pdffonts. Ainsi, lorsqu'un fichier est interrogeable, il génère plus de deux lignes de sortie. Sachant cela, nous pouvons créer:

gedit check_pdf_searchable.sh

coller ceci

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

puis le rendre exécutable

chmod +x check_pdf_searchable.sh

puis répertoriez tous les fichiers PDF non interrogeables dans le répertoire:

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

ou dans le répertoire et ses sous-répertoires:

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

Vous devez également installer:

Sudo apt install ocrmypdf
0
Eduard Florinescu