不知道从哪里开始对这个真的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