如何使用grep搜索我的PDF?

如何使用grep搜索我的PDF?,pdf,grep,pdftotext,Pdf,Grep,Pdftotext,我遵循了这条线索的想法,但它不起作用。 我确信“过滤器”在这本书中至少出现了100次 有什么想法吗?如果你真的能从PDF中复制一个给定的字符串(你可以在呈现或打印的PDF页面上“看到”并阅读),即使在pdftotext的帮助下,那么你一定非常幸运 首先:从您提供给unix.stackexchange.com的链接中得到的大多数建议都是非常无知的(礼貌地说)。那里的大多数答案都是由那些不熟悉大量PDF变体的人写的 在本例中,您首先尝试在pdftotext的帮助下转换文件,将输出流式传输到stdo

我遵循了这条线索的想法,但它不起作用。

我确信“过滤器”在这本书中至少出现了100次

有什么想法吗?

如果你真的能从PDF中复制一个给定的字符串(你可以在呈现或打印的PDF页面上“看到”并阅读),即使在
pdftotext
的帮助下,那么你一定非常幸运

首先:从您提供给
unix.stackexchange.com
的链接中得到的大多数建议都是非常无知的(礼貌地说)。那里的大多数答案都是由那些不熟悉大量PDF变体的人写的

在本例中,您首先尝试在
pdftotext
的帮助下转换文件,将输出流式传输到stdout

有许多类型的PDF,
pdftotext
根本无法提取文本。原因可能是(以下列表不完整):

  • 您看到的“文本”不是基于使用字体。它可能是由扫描或其他生产过程生成的一个大光栅图像,然后嵌入到PDF文件外壳中。这可能会使页面仅显示为文本字符串

  • 您看到的“文本”不是基于使用字体。它可能是一系列小的矢量图(或小的光栅图像),在我们的眼睛和大脑看来只像文本字符串

    有许多软件应用程序将字体转换为所谓的“大纲”。这种看似奇怪的行为的原因可能是:

    • 避免许可问题(当某个字体不允许嵌入时)
    • 在试图提取文本时设置障碍
    • PDF生成应用程序中的意外错误设置。
  • 字体作为一个子集嵌入到PDF文件中(通过PDF生成软件——用户通常对该操作的细节没有太多控制权),并使用“自定义”编码,但该文件不提供将字形映射到字符的
    toUnicode

    “Glyphs”是在屏幕上绘制的每个字体中定义良好的形状。字形映射到计算机中的字符——我们的眼睛只看到这些形状,我们的大脑将它们转换为字符,而不需要
    toUnicode
    表格。像
    pdftotext
    这样的程序需要
    toUnicode
    表来将字形翻译回字符


  • 您可以使用名为
    pdffonts
    的命令行实用程序来初步了解PDF文件使用的字体示例输出:

    在这种情况下,文本提取(以及对字符串进行灰显的方法)应该可以工作:

    • 即使名为
      uni
      的列(说明PDF文件中是否嵌入了
      toUnicode
      映射) 表示
      对于每种字体,
      编码
      列不包含
      自定义
      ,而是
      内置的
      (这意味着字体文件提供了字形->字符映射,类型为
      类型1

    总而言之:如果您不能访问您的PDF文件,就不可能知道您为什么不能“grep”您正在寻找的字符串!

    如果您真的可以grep给定的字符串(您可以在呈现或打印的PDF页面上“看到”和阅读)从PDF来看,即使有
    pdftotext
    的帮助,你也一定非常幸运

    首先:您提供给unix.stackexchange.com的链接中的大多数建议都是非常无知的(礼貌地说)。那里的大多数答案显然是由不熟悉大量PDF变体的人写的

    在本例中,您首先尝试在
    pdftotext
    的帮助下转换文件,将输出流式传输到stdout

    有许多类型的PDF,
    pdftotext
    根本无法提取文本。原因可能是(下面的列表不完整):

  • 您看到的“文本”不是基于使用字体。它可能是扫描或其他生产过程生成的一个大光栅图像,然后嵌入到PDF文件外壳中。这可能使页面看起来只是文本字符串

  • 您看到的“文本”不是基于使用字体,它可能是一系列小矢量图形(或小光栅图像),对我们的眼睛和大脑来说,它们看起来就像文本字符串

    有许多软件应用程序将字体转换为所谓的“轮廓”。这种看似奇怪的行为的原因可能是:

    • 避免许可问题(当某个字体不允许嵌入时)
    • 在试图提取文本时设置障碍
    • PDF生成应用程序中的意外错误设置。
  • 字体作为一个子集嵌入到PDF文件中(通过PDF生成软件——用户通常对该操作的细节没有太多控制权),并使用“自定义”编码,但该文件不提供将字形映射到字符的
    toUnicode

    “字形”是在屏幕上绘制的每个字体中定义良好的形状。字形映射到计算机的字符——我们的眼睛只看到这些形状,我们的大脑将它们转换为字符,而不需要
    toUnicode
    表格。像
    pdftotext
    这样的程序需要
    toUnicode
    表格来反转g的翻译莱弗斯回到了角色


  • 您可以使用名为
    pdffonts
    的命令行实用程序来初步了解PDF文件使用的字体。示例输出:

    在这种情况下,文本提取(以及对字符串进行灰显的方法)应该可以工作:

    • 即使名为
      uni
      的列(说明PDF文件中是否嵌入了
      toUnicode
      映射) 对于每个字体,
      encoding
      列显示
      no
       pdftotext PercivalWalden.pdf - | grep 'Slepian'
       pdftotext PercivalWalden.pdf - | grep 'Naive'
       pdftotext PercivalWalden.pdf - | grep 'Filter'
      
      pdffonts paper-projectiris---final.pdf 
      
       name                       type         encoding       emb sub uni object ID
       -------------------------- ------------ -------------- --- --- --- ---------
       TCQJEF+CMCSC10             Type 1       Builtin        yes yes no      96  0
       VPAFLY+CMBX12              Type 1       Builtin        yes yes no      97  0
       CWAIXW+CMTI12              Type 1       Builtin        yes yes no      98  0
       OBMDLT+CMR12               Type 1       Builtin        yes yes no      99  0