pdfminer3k是pdfminer的Python 3接口。 PDFMiner是用于从PDF文档提取信息的工具。 与其他PDF相关工具不同,它完全专注于获取和分析文本数据。 PDFMiner允许获取页面中文本的确切位置以及其他信息,例如字体或线条。 它包括一个PDF转换器,可以将PDF文件转换为其他文本格式(例如HTML)。
注意:测试发现 pdfminer3
模块仅支持全英文文档。使用包含中文的 PDF 会报错。
pip install pdfminer3k
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfdevice import PDFDevice
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams
fp = open('/data/demo/mark.pdf','rb')
--------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) Cell In[2], line 1 ----> 1 from pdfminer.pdfparser import PDFParser, PDFDocument 2 from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter 3 from pdfminer.pdfdevice import PDFDevice ModuleNotFoundError: No module named 'pdfminer'
创建一个与文档关联的解释器。
parse = PDFParser(fp)
PDF文档的对象。
doc = PDFDocument()
连接解释器和文档对象。
parse.set_document(doc)
doc.set_parser(parse)
初始化文档,当前文档没有密码,设为空字符串。
doc.initialize("")
创建PDF资源管理器。
resource = PDFResourceManager()
参数分析器。
laparam = LAParams()
创建一个聚合器。
device = PDFPageAggregator(resource, laparams=laparam)
创建PDF页面解释器。
interpreter = PDFPageInterpreter(resource, device)
输出:
doc
res=[]
for page in doc.get_pages():
interpreter.process_page(page)
# print(device.get_text())
layout = device.get_result()
for cnt in layout:
if hasattr(cnt,"get_text"):
print(cnt.get_text().strip())
res=[]
for page in doc.get_pages():
interpreter.process_page(page)
layout = device.get_result()
for out in layout:
res.append(out)
for i in res[:3]:
print(i.get_text())
命令行工具
与其他的库不太相同,在命令行可以直接使用PDFMiner工具,
PDFMiner带有两个方便的工具: pdf2txt.py
和dumppdf.py
。
pdf2txt.py
pdf2txt.py
从PDF文件中提取文本内容。它提取所有要以编程方式呈现的文本,
即以ASCII或Unicode字符串表示的文本。它不能识别绘制为需要光学字符识别的图像的文本。
它还提取每个文本部分的相应位置,字体名称,字体大小,书写方向(水平或垂直)。
当访问受限制的PDF文档时,需要提供密码。不能从没有提取权限的PDF文档中提取任何文本。
注意: 并非PDF中的所有字符都可以安全地转换为Unicode。转换中文可能会乱码。
主要参数如下:
o filename
指定输出文件名。默认情况下,它将以文本格式将提取的内容打印到stdout
。p pageno[,pageno,...]
指定要提取的页码的逗号分隔列表。页码从1开始。默认情况下,它从所有页面提取文本。c codec
指定输出编解码器。t type
指定输出格式。当前支持以下格式。text
:TEXT格式。(默认)html
:HTML格式。不建议将其用于提取目的,因为标记很乱。xml
:XML格式。提供最多的信息。tag
:“标记的PDF”格式。带标签的PDF具有自己的内容,并用类似HTML的标签注释。pdf2txt
尝试提取其内容流,而不是推断其文本位置。此处使用的标签在PDF规范中定义。
I image_directory
指定用于图像提取的输出目录。当前仅支持JPEG图像。
F boxes_flow
指定确定文本顺序时文本的水平和垂直位置的重要性。该值应在-1.0(仅适用于水平位置)至+1.0(仅适用于垂直位置)的范围内。当该值超出范围(例如+2)时,将使用更简单的排序规则。默认值为0.5。C
禁止对象缓存。这将减少内存消耗,但也会减慢该过程。n
抑制布局分析。A
强制对所有文本字符串(包括图形中包含的文本)执行布局分析。V
允许垂直写入检测。Y layout_mode
指定应如何保留页面布局。(当前仅适用于HTML格式。)exact
:保留每个字符的确切位置(大而混乱的HTML)。normal
:保留每个文本块中的位置和换行符。(默认)loose
:保留每个文本块的整体位置。
以垂直书写方式提取HTML文件
pdf2txt.py -V -c -o output.html aaa.pdf
dumppdf.py
dumppdf.py
以伪XML格式转储PDF文件的内部内容。该程序主要用于调试目的,
但也可以提取一些有意义的内容(例如图像)。
转储所有标题和内容
dumppdf.py -a foo.pdf
主要参数如下:
a
指示转储所有对象。默认情况下,它仅打印文档预告片(如标题)。i objno,objno, ...
指定要显示的PDF对象ID。接受逗号分隔的ID或多个-i
选项。p pageno,pageno, ...
指定要提取的页码。接受逗号分隔的页码或多个-p
选项。请注意页码从1开始,而不是零。r
(row)b
(二进制)t
(文本) 指定流内容的输出格式。由于流对象的内容可能很大,因此,如果未指定上述任何选项,则将其忽略。 如果-r
选择,“原始”流内容将不进行解压缩而转储。使用-boption
时, 解压缩的内容将作为二进制blob转储。使用-t
选项,将解压缩的内容以文本格式转储, 类似于repr()
方式。如果指定-r
或-b
选项,则不会显示任何流头,以便于将其保存到文件中。