给定一个数字创建的PDF文件,我想用坐标提取文本。边界框会很棒,但锚定+字体/字体大小也可以
我创建了一个example PDF document,这样就可以很容易地进行尝试/共享结果
pdftotext PDF-export-example.pdf -layout
给出this output。它已经包含文本,但坐标不在其中
PyPDF2甚至更糟-也没有坐标,也没有字体大小,在本例中甚至没有ASCII艺术提示布局是如何的:
from PyPDF2 import PdfFileReader
def text_extractor(path):
with open(path, "rb") as f:
pdf = PdfFileReader(f)
page = pdf.getPage(0)
text = page.extractText()
print(text)
if __name__ == "__main__":
path = "PDF-export-example.pdf"
text_extractor(path)
另一种提取文本的方法,但没有坐标/字体大小。 感谢Duck puncher为这一个:
from io import StringIO
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfinterp import PDFPageInterpreter, PDFResourceManager
from pdfminer.pdfpage import PDFPage
def convert_pdf_to_txt(path):
rsrcmgr = PDFResourceManager()
retstr = StringIO()
codec = "utf-8"
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
fp = open(path, "rb")
interpreter = PDFPageInterpreter(rsrcmgr, device)
password = ""
maxpages = 0
caching = True
pagenos = set()
for page in PDFPage.get_pages(
fp,
pagenos,
maxpages=maxpages,
password=password,
caching=caching,
check_extractable=True,
):
interpreter.process_page(page)
text = retstr.getvalue()
fp.close()
device.close()
retstr.close()
return text
if __name__ == "__main__":
print(convert_pdf_to_txt("PDF-export-example.pdf"))
这一个朝着正确的方向走了一点,因为它可以给出字体名称和大小。但是仍然缺少坐标(输出有点冗长,因为它是逐字符的):
from pdfminer.high_level import extract_pages
from pdfminer.layout import LTTextContainer, LTChar
for page_layout in extract_pages("PDF-export-example.pdf"):
for element in page_layout:
if isinstance(element, LTTextContainer):
for text_line in element:
for character in text_line:
if isinstance(character, LTChar):
print(character)
print(character.fontname)
print(character.size)
在这里,我什么也得不到:
from tabula import read_pdf
df = read_pdf("PDF-export-example.pdf")
print(df)
我使用PyMuPDF将页面内容提取为包含bbox信息的单个单词列表
输出:
page.getTextWords()
方法使用空格和线条将页面文本分隔为“单词” 分隔符。因此,此列表中的单词不包含 空格或换行符
返回类型:
list
此列表中的一项如下所示:
其中前4项是单词的bbox的浮点坐标。最后三个整数提供了有关单词下落的更多信息。
关于菲茨名字的注释 PyMuPDF库的标准Python导入语句是
import fitz
。这有一个历史原因:MuPDF的原始渲染库称为Libart
在Artifex软件获得MuPDF项目后,开发重点转移到编写一个名为Fitz的新的现代图形库。Fitz最初的目的是作为一家研发中心;D项目取代老化的Ghostscript图形库,但已成为驱动MuPDF的渲染引擎
您可以使用^{} option 解析poppler的
pdftotext
的输出:输出:
相关问题 更多 >
编程相关推荐