我正在尝试使用 Python 从 pdf 中提取文本。为此,我使用pdf2txt.py 命令行工具找到了 pdfminer,它做得相当好,如下所示:
kramer65 $ pdf2txt.py myfile.pdf
all the text contents
of the pdf
are printed out here..
因为我想在我的程序中使用这个功能,所以我想把它用作一个模块而不是一个命令行工具。所以我设法将 pdf2txt.py 文件调整为以下内容:
#!/usr/bin/env python
import sys
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
from pdfminer.converter import TextConverter
from pdfminer.cmapdb import CMapDB
from pdfminer.layout import LAParams
def main(fp):
debug = 0
pagenos = set()
maxpages = 0
imagewriter = None
codec = 'utf-8'
caching = True
laparams = LAParams()
PDFDocument.debug = debug
PDFParser.debug = debug
CMapDB.debug = debug
PDFPageInterpreter.debug = debug
resourceManager = PDFResourceManager(caching=caching)
outfp = sys.stdout
device = TextConverter(resourceManager, outfp, codec=codec, laparams=laparams, imagewriter=imagewriter)
interpreter = PDFPageInterpreter(resourceManager, device)
for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, caching=caching, check_extractable=True):
interpreter.process_page(page)
fp.close()
device.close()
outfp.close()
return # Here I want to return the extracted text string
我现在可以将其称为模块,如下所示:
>>> from my_pdf2txt import main
>>> main(open('myfile.pdf', 'rb'))
all the text contents
of the pdf
are printed out here..
它目前使用 打印出结果字符串,但我实际上希望它使用代码最后一行的语句sys.stdout.write()
返回这些字符串。return
但由于 sys.stdout.write 的使用隐藏在 converter.py 的第 165-167 行深处,我真的不知道如何让这个方法返回这些字符串而不是将其写入标准输出。
有谁知道我怎样才能让这个方法返回找到的字符串而不是将它们写入标准输出?欢迎所有提示!