我怎样才能 pdfgrep 一个 pdf 以便只显示粗体匹配项?

How can I pdfgrep a pdf so that only bold matches are shown?

我正在尝试列出 pdf 中出现的所有粗体字符串及其页码。但是我不想列出那些不是粗体的地方。

到目前为止我有:

pdfgrep -n -o "String" Input.pdf

但我不知道如何捕捉大胆的一面...

Link转pdf:https://ilarisblog.files.wordpress.com/2021/07/ilaris.pdf(直接下载,不是我的网站)

如果幸运的话,在极少数情况下,您可能会说第 x 页使用 CID Bold & Normal 之类的字体,例如它们可能是不同的字体或粗细,举一个例子,它是人为设计的,所以并不少见, 但说明了几点。

所以有命令行工具可以深入研究字体和文本并提供详细信息

name                                 type              emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
CIDFont+F1                           CID TrueType      yes no  yes     11  0

[List All Fonts], The number of fonts in this PDF file is: 1
CIDFont+F1                           CID TrueType      yes no  yes     11  0

    line:
      word: x=42.48..51.65 y=103.29..121.01 base=115.32 fontSize=11.04 space=1: '1.'
      word: x=54.78..97.35 y=103.29..121.01 base=115.32 fontSize=11.04 space=1: 'Surgical'
      word: x=100.55..133.15 y=103.29..121.01 base=115.32 fontSize=11.04 space=1: 'rooms'
      word: x=136.37..158.21 y=103.29..121.01 base=115.32 fontSize=11.04 space=1: 'and'
      word: x=161.46..203.55 y=103.29..121.01 base=115.32 fontSize=11.04 space=1: 'services'
      word: x=206.77..212.91 y=103.29..121.01 base=115.32 fontSize=11.04 space=1: '–'
      word: x=217.78..229.70 y=103.29..121.01 base=115.32 fontSize=11.04 space=1: 'To'
      word: x=232.69..272.34 y=103.29..121.01 base=115.32 fontSize=11.04 space=1: 'include'
      word: x=275.41..316.39 y=103.29..121.01 base=115.32 fontSize=11.04 space=1: 'surgical'
      word: x=319.33..347.75 y=103.29..121.01 base=115.32 fontSize=11.04 space=0: 'suites'

line: x=42.48..347.75 y=103.29..121.01 base=115.32 '1. Surgical rooms and services – To include surgical suites'

然而 none 显示行中途的差异。

这里只有一种字体(F1),所有文字都是一个流,分为3部分。

所以仔细观察我们可以在第二行看到左边看起来较粗的字形有 1 磅厚(但该行的其余部分也是如此)使用完全相同的字体 字体名称自始至终都是 CID+F1,我本可以让它使用另一个名称,但关键是该行的一半都不是“粗体”。那 1 点边框宽度怎么样,我可以测试一下吗?不,第 2 行的两半都是 1 点边框宽度,区别在于较暗的一半比右半部分更不透明(描边不透明度为 100%),所以看起来更厚。如果不使用 PDF 库来分解整个字体结构及其应用程序,您就无法在外部进行 grep。

我并不是说您不能使用提取工具将文本提取为“BOLDER”和“不太粗体”或报告某些文本的名称中包含粗体,但纯文本流有什么用, 那就是说有些字母可能是粗体有些字母可能不是,你可以从图像提取中看到。

您将需要一个库来分析可以说明粗体文本的各种方式,然后将其与纯文本 grepper 一起使用。

[稍后编辑]

您提供了一个复杂的示例,其中肯定使用许多不同的名称定义了字体,例如 MinionPro-Bold,所以有一些希望,但是样式应用于每个页码,因此我们可以说每个页面(即使是空白的也有 BOLD :-) 所以如何提取该页码和任何其他文本,在 SO 上提供了许多示例,大多数使用 Python 混合结果(通常是 PDFMiner),但我不会使用除非你很了解它。

一些提取器的报告很可能相互矛盾,因为“正文”的主要块报告总体上它们是粗体容器,即使大多数内部文本不是,所以可能需要二次划分成子组,也许丢弃分类为 MinionPro-Regular 并保持 Aniron-Bold-SC700.

那么最佳答案是什么

好吧,你需要一种格式,其中字体的内联更改是常态,例如 XML 或 HTML 并且可以在转换为 FB2 或 ePub 时找到这些格式,所以我的第一个方法是尝试转换为 ePub 并提取 HTML 页面以 grep 那些,并且有许多方法可以命令行转换 PDF 2 ePuB 或 HTML.