不知道從哪裏開始對這個真的bash腳本來檢查PDF的是ocr'd
我有超過8000 PDF格式的Linux服務器,並需要知道哪些PDF的已ocr'd和一個人的天堂「T。
正想着某種腳本中調用XPDF的檢查的PDF,但說實話不知道這是否可能提前
感謝所有幫助
不知道從哪裏開始對這個真的bash腳本來檢查PDF的是ocr'd
我有超過8000 PDF格式的Linux服務器,並需要知道哪些PDF的已ocr'd和一個人的天堂「T。
正想着某種腳本中調用XPDF的檢查的PDF,但說實話不知道這是否可能提前
感謝所有幫助
請確保您有安裝一個命令行工具pdffonts
。 (這方面有兩個版本:一個船舶爲xpdf-utils
的一部分,其他的poppler-utils
的一部分)
所有PDF其中包括掃描的頁面不但不會有使用(沒有嵌入那些任何字體,也未嵌入式)。
命令行
pdffonts /path/to/scanned.pdf
也就那麼不顯示該文件的任何字體信息。
這可能已經足夠讓您將文件分成兩個不同的集合。
如果您的PDF包含掃描頁面和「普通」頁面(或已掃描頁面),那麼您將不得不擴展並完善上述簡單化方法。有關更多信息,請參閱man pdffonts
或pdffonts --help
。
與pdffonts
麻煩的是,有時它沒有返回,就像這樣:
name type emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
有時它返回:
name type emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
[none] Type 3 yes no no 266 0
[none] Type 3 yes no no 9 0
[none] Type 3 yes no no 297 0
[none] Type 3 yes no no 341 0
[none] Type 3 yes no no 381 0
[none] Type 3 yes no no 394 0
[none] Type 3 yes no no 428 0
[none] Type 3 yes no no 441 0
[none] Type 3 yes no no 451 0
[none] Type 3 yes no no 480 0
[none] Type 3 yes no no 492 0
[none] Type 3 yes no no 510 0
[none] Type 3 yes no no 524 0
[none] Type 3 yes no no 560 0
[none] Type 3 yes no no 573 0
[none] Type 3 yes no no 584 0
[none] Type 3 yes no no 593 0
[none] Type 3 yes no no 601 0
[none] Type 3 yes no no 644 0
考慮到這一點,讓我們寫一個小的文本工具從PDF獲取所有字體:
pdffonts my-doc.pdf | tail -n +3 | cut -d' ' -f1 | sort | uniq
如果您的PDF不是OCR'編輯,這將不會輸出或[none]
。
如果你想讓它跑得更快,使用-l
標誌只分析,比方說,前5頁:
pdffonts -l 5 my-doc.pdf | tail -n +3 | cut -d' ' -f1 | sort | uniq
現在它包裝在一個bash腳本,例如is-pdf-ocred.sh
:
#!/bin/bash
MYFONTS=$(pdffonts -l 5 "$1" | tail -n +3 | cut -d' ' -f1 | sort | uniq)
if [ "$MYFONTS" = '' ] || [ "$MYFONTS" = '[none]' ]; then
echo "NOT OCR'ed: $1"
else
echo "$1 is OCR'ed."
fi
最後,我們希望能夠搜索pdf。 find
命令不知道.bashrc
中的別名或函數,所以我們需要給它腳本的路徑。 運行在你選擇的目錄,如下所示:
find . -type f -name "*.pdf" -exec /path/to/my/script/is-pdf-ocred.sh '{}' \;
我假設的PDF文件結束.pdf
,雖然這並不總是你可以做一個假設。 你可能會想管就少或輸出到文本文件:
find . -type f -name "*.pdf" -exec /path/to/my/script/is-pdf-ocred.sh '{}' \; | less
find . -type f -name "*.pdf" -exec /path/to/my/script/is-pdf-ocred.sh '{}' \; > pdfs.txt
我能夠使用-l 5
標誌做約200 PDF文件在一點點超過10秒。
如果實際PDF是文本和掃描圖像的混合,則此方法不起作用。這在商業上很常見。例如,當您對掃描的PDF進行數字簽名時,該簽名將爲PDF添加一個文本層,這樣即使該簽名不是OCR PDF,pdffonts也會輸出該簽名的字體。您可以使用'pdffonts scanned.pdf |從輸出中刪除已知字體grep -v -E'font_name | - | name'',以防萬一您知道scanend PDF將使用的字體名稱。 –
您如何知道文件是否已被識別?是否有像file1.pdf.ocr這樣的輸出文件?祝你好運。 – shellter
[這可能會幫助你](http://stackoverflow.com/questions/6026287/batch-ocr-program-for-pdfs) – potong
所以你想告訴那些是包含文本的圖像的文本?在這種情況下,您可以嘗試'pdftotext'並查看它是否產生任何輸出。 – ninjalj