如何从命令行搜索PDF文件?

我正在检查论文的参考文献,并希望在正文中找到一些纸张(在参考文献列表中)被引用的位置。 是否有PDF编辑器支持通过bash进行搜索并提取位置的上下文? 我试图将PDF转换为文本,但没有取得好成绩。

只需添加上述答案,特别是您可以使用xpdf-utils中的命令行工具pdftotext,然后使用grep搜索此工具创建的文本文档。

这可能看起来像这样:

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

手册中有更多信息。 pdftotext的唯一缺点是你不能同时使用globbing来转换多个文件。 使用小的bash脚本可以解决此问题:

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

如果由于例如不兼容的pdf文件而从pdf创建文本文档时遇到问题,那么这是另一个问题。

我认为一般来说,pdf编辑器不包含命令行,因为它们是图形化的。 如果你想使用bash(或者zsh!)那么你可能不得不使用终端shell。

祝好运!

poppler的-utils的

注意: xpdf-utils 是 poppler-utils 的过渡包 。

你可以使用poppler-utils。 poppler-utils是一套可移植文档格式(PDF)文件的工具。

要安装它,您可以使用Ubuntu软件中心,或点击以下链接:

安装poppler-utils

pdfgrep

pdfgrep可以在目录树中递归搜索PDF文件中的字符串或模式,计算匹配或为每个匹配打印一些上下文。 例如,要递归搜索/some directory keyword ,不区分大小写:

 pdfgrep -Ri keyword /some/directory 

Pdfgrep是一种在PDF文件中搜索文本的工具。 它的工作原理类似于`grep’。

特征:

  • 搜索正则表达式。
  • 支持一些重要的grep选项,包括:+ filename输出。 +页码输出。 +可选的不区分大小写。 +数
    发生。
  • 而最重要的特征是:色彩输出!

安装pdfgrep

1来源: Ubuntu Apps Directory

使用pdfgrep在多个pdf文件中搜索正则表达式:

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

其中path是pdf文件的位置。

既然你成功尝试了pdftotext,原因可能是PDF只是扫描图像而你需要对它们进行OCR,我写了一个非常简单的方法来搜索所有不能被grep pdf和OCR它们。

我注意到如果pdf文件没有任何字体,通常无法搜索。 所以我们知道这一点,我们可以使用pdffonts

pdffonts前两行是表头,所以当一个文件可搜索时有两行以上的输出,知道这一点我们可以创建:

 gedit check_pdf_searchable.sh 

然后粘贴这个

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

然后让它可执行

 chmod +x check_pdf_searchable.sh 

然后在目录中列出所有不可搜索的pdf:

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

或者在目录及其子目录中:

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