¿Cómo busco un archivo PDF desde la línea de comandos?

26

Estoy revisando las referencias de un artículo y quiero encontrar las posiciones en el cuerpo donde se hace referencia a algún documento (en la lista de referencias). ¿Existe un editor de PDF que admita la búsqueda a través de bash y extraiga el contexto de una posición? Intenté convertir PDF a texto, pero no obtuve un buen resultado.

David
fuente

Respuestas:

22

Solo para agregar a la respuesta anterior, en particular, puede usar una herramienta de línea de comandos de xpdf-utils llamada pdftotext y luego buscar el documento de texto creado por esta herramienta con grep.

Esto podría verse más o menos así:

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

Hay más información en el manual. El único inconveniente de pdftotext es que no puede hacernos glob para transformar varios archivos al mismo tiempo. Este problema se puede superar con un pequeño script bash:

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

Si tiene problemas para crear un documento de texto a partir de un pdf debido, por ejemplo, a un archivo pdf incompatible, entonces ese es otro problema.

Creo que, en general, los editores de pdf no incluyen líneas de comando porque son gráficos. Si desea usar bash, (¡o tal vez zsh!), Entonces puede que tenga que usar un shell de terminal.

¡Buena suerte!

Joe
fuente
20

poppler-utils

Nota: xpdf-utils es un paquete de transición para poppler-utils.

Puedes usar poppler-utils. poppler-utils es un conjunto de herramientas para archivos de formato de documento portátil (PDF).

Para instalarlo, puede usar el Centro de software de Ubuntu o haciendo clic a continuación:

Instalar utilidades poppler

pdfgrep

pdfgreppuede buscar una cadena o un patrón en archivos PDF de forma recursiva en árboles de directorios, contando coincidencias o imprimiendo algún contexto para cada coincidencia. Por ejemplo, para buscar recursivamente keyworden /some directorymayúsculas y minúsculas:

pdfgrep -Ri keyword /some/directory

Pdfgrep es una herramienta para buscar texto en archivos PDF. Funciona de manera similar a 'grep'.

caracteristicas:

  • busca expresiones regulares.
  • soporte para algunas opciones importantes de grep, que incluyen: + salida de nombre de archivo. + número de página de salida. + insensibilidad a mayúsculas opcional. + recuento de
    ocurrencias.
  • y la característica más importante: salida de color!

Instalar pdfgrep

1 Fuente: Directorio de aplicaciones de Ubuntu

Mitch
fuente
6

Para buscar una expresión regular en múltiples archivos pdf usando pdfgrep:

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

donde ruta es la ubicación de sus archivos pdf.

encender
fuente
0

La razón por la que pdftotext no tuvo éxito podría ser que los PDF son imágenes escaneadas y necesita OCR, escribí una forma rápida de buscar todos pdflos correos electrónicos que no se pueden editar grepy OCR.

Noté que si un pdfarchivo no tiene ninguna fuente, generalmente no se puede buscar. Sabiendo esto podemos usar pdffonts.

Las primeras 2 líneas pdffontsson el encabezado de la tabla, por lo que cuando se puede buscar un archivo tiene más de dos líneas de salida, sabiendo esto podemos crear:

gedit check_pdf_searchable.sh

pegar esto

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

luego hazlo ejecutable

chmod +x check_pdf_searchable.sh

luego enumere todos los archivos PDF que no se pueden buscar en el directorio:

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

o en el directorio y sus subdirectorios:

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

También necesitas instalar:

sudo apt install ocrmypdf
Eduard Florinescu
fuente