Python pdfminer上的警告
我在stackoverflow中发现并(稍微)修改了该脚本,使其能够在python 3.3上工作:Python pdfminer上的警告,python,pdf,python-3.x,pdfminer,Python,Pdf,Python 3.x,Pdfminer,我在stackoverflow中发现并(稍微)修改了该脚本,使其能够在python 3.3上工作: from pdfminer.pdfinterp import PDFResourceManager, process_pdf from pdfminer.converter import TextConverter from pdfminer.layout import LAParams from io import StringIO def convert_pdf(path): rs
from pdfminer.pdfinterp import PDFResourceManager, process_pdf
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from io import StringIO
def convert_pdf(path):
rsrcmgr = PDFResourceManager()
retstr = StringIO()
codec = 'utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, laparams=laparams)
fp = open(path, 'rb')
process_pdf(rsrcmgr, device, fp)
fp.close()
device.close()
string = retstr.getvalue()
retstr.close()
return string
print(convert_pdf('abc.pdf'))
它工作正常,但我似乎有两个问题:
- 运行脚本时,我收到大量警告:
警告:root:未定义:PDFCIDFont:basefont='LKOELN+Wingdings Regular',cidcoding='Adobe-Identity',139
警告:root:未定义:PDFCIDFont:basefont='LKKPCF+Wingdings2',cidcodeding='Adobe-Identity',132
(cid:139)
,如何捕获此警告并用其他内容替换该文本
- 请注意,我有一个编解码器行,它在原始脚本中位于
中,但是我得到: 回溯(最近一次呼叫最后一次): 文件“C:/Users/rodrigo/Desktop/csp_pdf/csp_pdf2.py”,第46行,在 转换为pdf(“abc.pdf”) 文件“C:/Users/rodrigo/Desktop/csp_pdf/csp_pdf2.py”,第33行,转换为pdf格式 设备=文本转换器(rsrcmgr、RETSR、编解码器='utf-8',laparams=laparams) TypeError:init()获得意外的关键字参数“codec”TextConverter(rsrcmgr,retstr,laparams=laparams)
import io
from pdfminer.pdfinterp import PDFResourceManager, process_pdf
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
def convert_pdf(pdfFile, retstr):
password = ''
pagenos = set()
maxpages = 0
laparams = LAParams()
rsrcmgr = PDFResourceManager()
device = TextConverter(rsrcmgr, retstr, laparams=laparams)
process_pdf(rsrcmgr, device, pdfFile, pagenos, maxpages=maxpages, password=password, check_extractable=True)
device.close()
return retstr
pdfFile = open('C:\\SomeDirectory\\Some_PDF_File.pdf','rb')
retstr = io.StringIO()
retstr = convert_pdf(pdfFile, retstr)
print(retstr.getvalue())
pdfFile.close()
Pdfminer3k将日志记录到Pythonroot记录器。PDFMiner应在IMHO中正确执行日志记录。因此,不可能像这样以正常方式禁用日志记录
logging.getLogger("pdfminer").setLevel(logging.WARNING)
真倒霉
我这样做了,它的工作™:
logging.propagate = False
logging.getLogger().setLevel(logging.ERROR)
它将根记录器设置为级别错误。这将停止PDFMiner警告日志记录,因为它记录到根日志记录程序,而不是您自己的日志记录
我需要将传播设置为False,因为在使用PDFMiner之后,我有重复的日志条目。这是由根记录器造成的。我在Python3.8上运行pdfMiner,在我的应用程序中,我已经为根记录器分配了处理程序,速度非常慢。经过调查,我发现每个模块都创建了一个具有唯一名称(“name”)的记录器。而不是根记录器。所有这些默认为level.DEBUG的语句以及从早期python2.7版本转换为打印语句时的语句都已替换为log。电话 为了解决这个问题,我在导入之后甚至在初始化pdfminer类之前添加了下面的代码,这使得我的应用程序运行速度可以接受
# set all pdfminer logging to WARN
pdflogs = [logging.getLogger(name) for name in logging.root.manager.loggerDict if name.startswith('pdfminer')]
for ll in pdflogs:
ll.setLevel(logging.WARNING)
只是logging.getLogger('pdfminer').setLevel(logging.ERROR)
现在似乎可以工作了?