我已经发现并(稍微)修改了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):
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:undefined:PDFCIDFont:basefont =’LKOELN Wingdings-Regular’,cidcoding =’Adobe-Identity’,139
警告:root:undefined:PDFCIDFont:basefont =’LKKPCF Wingdings2′,cidcoding =’Adobe-Identity’,132
在印刷文本中看起来像(cid:139),如何捕获此警告并用其他内容替换该文本?
>请注意,我有一个编解码器行,在原始脚本中进入TextConverter(rsrcmgr,retstr,laparams = laparams),但是我得到:
Traceback(最近一次调用最后一次):
文件“C:/Users/rodrigo/Desktop/csp_pdf/csp_pdf2.py”,第46行,在
convert_pdf( ‘abc.pdf’)
在convert_pdf中输入文件“C:/Users/rodrigo/Desktop/csp_pdf/csp_pdf2.py”,第33行
device = TextConverter(rsrcmgr,retstr,codec =’utf-8′,laparams = laparams)
TypeError:init()得到一个意外的关键字参数’codec’
这与第一期有关吗?
谢谢!
最佳答案 不幸的是,Pdfminer3k记录到Python根记录器. PDFMiner应该正确实现日志记录恕我直言.因此无法以正常方式禁用日志记录.
logging.getLogger("pdfminer").setLevel(logging.WARNING)
坏消息!
我这样做了,它有效™:
logging.propagate = False
logging.getLogger().setLevel(logging.ERROR)
它将根记录器设置为级别错误.这将停止PDFMiner警告日志记录,因为它记录到根记录器,但不记录您自己的日志记录.
我需要将传播设置为False,因为在使用PDFMiner之后,我有重复的日志记录条目.这是由根记录器引起的.