我对pdf查询库有疑问。最近几天我一直在试图解决这个问题,但似乎无法解决。
代码:
def data_validation(x,y,x1,y1,pdf,width_scale,height_scale):
values = pdf.extract([
('with_formatter', 'text'),
('with_parent','LTPage[pageid=\'1\']'),
('values', 'LTTextLineHorizontal:in_bbox("%s,%s,%s,%s")' % ((x1*width_scale), ((800-y)*height_scale), (x*width_scale), ((800-y1)*height_scale)))
])
return values
函数(data_validation)的输入变量是一个覆盖两个对象的边界框(边界框值),但是输出似乎已合并为1个值(输出)。
边界框值:
bbox #1 - Exhibit A Sample Contract
bbox #2 - Sample Contract
输出:
{' values': 'Exhibit A Sample Contract Sample Contract'}
输出不是{'values':'Exhibit A Sample Contract','Sample Contract'},一个具有2个值的键吗?
希望有人可以帮助我,告诉我我做错了什么。
答案 0 :(得分:0)
经过深思熟虑后,我想起了我自己的想法,所以我认为我应该发布修复程序,因为这将对整个过程大有帮助。
代替pyquery将XML节点格式化为文本,作为PDF提取('with_formatter', 'text'
)的一部分,提取XML对象更容易,然后再提取文本。
values = pdf.extract([
#('with_formatter', 'text'),
('with_parent','LTPage[pageid=\'1\']'),
('values', 'LTTextLineHorizontal:in_bbox("%s,%s,%s,%s")' % ((x1*width_scale), ((800-y)*height_scale), (x*width_scale), ((800-y1)*height_scale)))
])
这将产生类似于以下内容的字典values
:
{' values': [<LTTextLineHorizontal>, <LTTextLineHorizontal>]}
我们现在可以从<LTTextLineHorizontal>
中的各个values
XML节点构建一个列表:
for key,val in values.items():
if len(val) >= 1: # if we found multiple bbox'
resultingText = [i.text() for i in val.items('LTTextBoxHorizontal')]
elif(len(val)) == 1: # if we found only one bbox
resultingText = [val.text()]
else: # no bbox found
resultingText = []
return(resultingText)
resultingText
的输出:
['Exhibit A Sample Contract', 'Sample Contract']