如何仅使用 Python 标准库的二进制数据从 PDF 中读取文本

How to read text from a PDF using only the binary data with only Python's standard library

我想了解 PDF 文件的整体结构。首先,我想知道如何仅使用 Python 的标准库来解析 PDF 中包含的文本。我在这里找到了一个关于 PDF 文件结构的好资源,但现在,它超出了我的范围:PDF Documentation

为了练习,我创建了一个仅包含文本“Hello World”的 PDF,如下图所示。

如何仅从 pdf 的二进制数据中找到它?从这里开始:

with open('Hello World.pdf', 'rb') as f:
    data = f.read()

如何找到“Hello World”文本?我希望我能在这里包含数据,但是字符太多了。

您可能想尝试 PyPDF2 或 tika 等库

from tika import parser # pip install tika

raw = parser.from_file('hello_world.pdf')
print(raw['content'])

更多信息请查看此处How to extract text from a PDF file?

在您询问如何轻松构建和分析基本 PDF 的评论中,我在其他地方使用了一种简单的输入技术来构建示例,但由于最近删除了该答案,所以我在这里重复一遍!

它包含一张 A4 图像(595 像素宽),因此请忽略第一个 %Set 块。

 %% is a global definition
 % is a comment
 0,0 is page bottom Left (x,y)

一个Page.Txt(与图片不完全一样,因为我现在更正了专有名称:-)

%%MediaBox 0 0 595 842
%%Font Helv Helvetica
%%Image I0 background.png

% Set the Background image.
q
595 0 0 842 0 0 cm
/I0 Do
Q

% Add text.
q
0 0 1 rg
BT /Helv 18 Tf 50 805 Td (Hello, World!) Tj ET
BT /Helv 18 Tf 50 777 Td (Hello, Moon!) Tj ET
Q

运行 Artifex MuPDF MuTool(跨平台 AGPL)

> mutool create -o sample.pdf Page.Txt

您对我如何提取生成的 PDF 的确切内容更感兴趣。记住 PDF 的任何提取,只是意味着对象是前文件内容的 重新表达 它们可能是无序的,它不是分析也不是逆向工程,它是重新成像。

对于该任务,我在 Windows 上使用 MuPDF-GL.exe 打开文件并使用 A 保存新 PDF

  1. 删除了加密并且
  2. 将输出切换为 Pretty print + Ascii(又称纯文本),然后另存为基于新文本的 PDF