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


26

我正在检查论文的参考文献,并想在正文中找到参考文献(在参考文献列表中)的位置。是否有PDF编辑器支持通过bash搜索并提取头寸上下文?我尝试将PDF转换为文本,但效果不佳。

Answers:


22

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

这可能看起来像这样:

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

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

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

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

我认为一般来说,PDF编辑器不包含命令行,因为它们是图形的。如果要使用bash(或zsh!),则可能必须使用终端外壳。

祝好运!


20

poppler实用程序

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

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

要安装它,您可以使用Ubuntu软件中心,或单击下面的按钮:

安装poppler-utils

PDF格式

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

pdfgrep -Ri keyword /some/directory

Pdfgrep是用于搜索PDF文件中的文本的工具。它的工作方式类似于`grep'。

特征:

  • 搜索正则表达式。
  • 支持一些重要的grep选项,包括:+文件名输出。+页码输出。+可选的不区分大小写。+计算
    发生次数。
  • 最重要的功能:彩色输出!

安装pdfgrep

1资料来源: Ubuntu Apps目录


6

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

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

路径是您的pdf文件的位置。


0

pdftotext失败的原因可能是PDF是扫描的图像,您需要对其进行OCR,我写了一种快速的方法来搜索所有pdf无法grep编辑的s 并对其进行OCR。

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

的前2行pdffonts是表格标题,因此,当文件可搜索时,输出多于两行,因此我们可以创建:

gedit check_pdf_searchable.sh

贴上

#!/bin/bash 
#set -vx
if ((`pdffonts "$1" | wc -l` < 3 )); then
echo $1
ocrmypdf "$1" "$1"_ocr.pdf
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 {}

您还需要安装:

sudo apt install ocrmypdf
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.