it-swarm-eu.dev

Jak mohu vstoupit do souborů PDF)?

Existuje způsob, jak prohledávat PDF soubory pomocí síly grepu, bez převodu na text nejprve v Ubuntu?

160
Dervin Thunk

Nainstalujte balíček pdfgrep, pak použijte příkaz:

find /path -iname '*.pdf' -exec pdfgrep pattern {} +

——————

Nejjednodušší způsob, jak toho dosáhnout:

pdfgrep 'pattern' *.pdf
pdfgrep 'pattern' file.pdf 
164
enzotib

Pokud máte poppler-utils nainstalován (výchozí na Ubuntu Desktop), můžete jej „převést“ za chodu a poslat do grep:

pdftotext my.pdf - | grep 'pattern'

Tím se nevytvoří soubor TXT.

63
wag

pdfgrep byl napsán přesně pro tento účel a je k dispozici v Ubuntu.

Snaží se být většinou kompatibilní s grep a poskytuje tak „sílu grepu“, specializovanou pouze na PDF. To zahrnuje běžné možnosti grepu, například --recursive, --ignore-case nebo --color.

Na rozdíl od pdftotext | grep, pdfgrep může vydat číslo stránky zápasu výkonným způsobem a je obecně rychlejší, když nemusí prohledávat celý dokument (např. --max-count nebo --quiet).

Základní použití je:

pdfgrep PATTERN FILE..

kde PATTERN je váš vyhledávací řetězec a FILE seznam názvů souborů (nebo zástupných znaků ve skořápce).

Více informací naleznete v manpage .

16
hpdeifel

Ne.

PDF sestává z kousků dat, z nichž některé jsou textové, některé z nich obrázky a některé z nich opravdu kouzelné fantastické XYZ (např. Soubory .u3d). Tyto kousky jsou většinou zkomprimovány (např. Byt, zaškrtněte http://www.verypdf.com/pdfinfoeditor/compression.htm ). Aby bylo možné „grep“ a .pdf, musíte převrátit kompresi aka extrahovat text.

Můžete to udělat pro každý soubor pomocí nástrojů, jako je pdf2text a grep výsledek, nebo spustíte 'indexer' (podívejte se na xapian.org nebo lucene ), který z vašich souborů PDF vytvoří vyhledávací index a poté můžete použít nástroje vyhledávače tohoto indexátoru k získání obsahu pdf.

Ale ne, nemůžete grep pdf soubory a doufat v spolehlivé odpovědi, aniž byste nejprve extrahovali text.

7
akira

Recoll umí prohledávat PDF. Nepodporuje regulární výrazy, ale má spoustu dalších možností vyhledávání, takže by vyhovovalo vašim potřebám.

6
user39336

Dalo by se to nejprve protlačit skrz strings: -

cat file.pdf | strings | grep <...etc...>
4
Andy Smith

Podívejte se na běžný nástroj grep zdrojů crgrep , který podporuje vyhledávání v PDF souborech).

Umožňuje také prohledávání dalších zdrojů, jako je obsah vnořený v archivech, databázových tabulkách, obrazových metadat, závislostí souborů POM a webových zdrojů - a jejich kombinací, včetně rekurzivního vyhledávání.

3
Craig

Na StackOverflow je duplicitní otázka. Lidé tam navrhují variantu odpovědi harish.venkarts:

find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;

Výhodou oproti podobné odpovědi je --with-filename příznak grep. Toto je poněkud lepší než pdfgrep, protože standardní grep má více funkcí.

https://stackoverflow.com/questions/4643438/how-to-search-contents-of-multiple-pdf-files

2
user7610

zkuste to

find /path -iname *.pdf -print0 | for i in `xargs 0`; do echo $i; \
    pdftotext "$i" - | grep pattern; done

pro tisk čar se vzor vyskytuje uvnitř pdf

2
harish.venkat

cD do složky obsahující váš soubor PDF a poté ..

pdfgrep 'pattern' your.pdf

nebo pokud chcete hledat ve více než jednom souboru PDF (např. ve všech souborech PDF ve složce)

pdfgrep 'pattern'  `ls *.pdf`

nebo

pdfgrep 'pattern' $(ls *.pdf)
2
Rasmuss Rall

Zde je rychlý skript pro vyhledávání pdf v aktuálním adresáři:

#!/bin/bash

if [ $# -ne 1 ]; then
  echo "usage $0 VALUE" 1>&2
  exit 1
fi

echo 'SEARCH IS CASE SENSITIVE' 1>&2

find . -name '*.pdf' -exec /bin/bash -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "$0"' $1 \;
0
Nico

gpdf může být to, co potřebujete, pokud používáte Gnome! Zkontrolujte toto pro případ, že nepoužíváte Gnome. Má seznam prohlížečů CLI pdf. Potom můžete pomocí grep najít nějaký vzor.

0
Dharmit

Předpokládám, že máte na mysli tp, že jej na disku nepřevedete, můžete je převést na stdout a poté grep pomocí pdftotext. Grepování pdf bez jakéhokoli převodu není praktický přístup, protože PDF je většinou binární formát.

V adresáři:

ls -1 ./*.pdf | xargs -L1 -I {} pdftotext {}  - | grep "keyword"

nebo v adresáři a jeho podadresářích:

tree -fai . | grep -P ".pdf$" | xargs -L1 -I {} pdftotext {}  - | grep "keyword"

Také protože některé pdf jsou skenování, musí být nejprve OCRed. Napsal jsem docela jednoduchý způsob, jak prohledávat všechny soubory PDF, které nelze greped, a OCR je.

Všiml jsem si, že soubor pdf nemá žádné písmo, které obvykle nelze prohledávat. S vědomím toho můžeme použít pdffonts.

První 2 řádky pdffonts jsou záhlaví tabulky, takže když je prohledávatelný soubor, má více než dva řádkové výstupy.

gedit check_pdf_searchable.sh

pak to vložte

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

pak je spustitelný

chmod +x check_pdf_searchable.sh

pak seznam všech nehledatelných souborů PDF v adresáři:

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

nebo v adresáři a jeho podadresářích:

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

Pokud chcete hledat pouze pdf jména/vlastnosti ... nebo jednoduché řetězce, které nejsou komprimované nebo kódované, pak místo strings můžete použít níže

grep -a STRING file.pdf
cat -v file.pdf | grep STRING

Z grep --help:

      --binary-files=TYPE   assume that binary files are TYPE;
                            TYPE is 'binary', 'text', or 'without-match'
  -a, --text                equivalent to --binary-files=text

a cat --help:

  -v, --show-nonprinting   use ^ and M- notation, except for LFD and TAB
0
phuclv