我通过拆分行然后搜索它来解析具有一些日期的pdf。以下是示例行:
Posted Date: 02/11/2015
Effective Date: 02/05/2015
当我找到Posted Date
时,我会分开:
并拉出02/11/2015
。但是当我对effective date
执行相同操作时,它只会返回/05/2015
。当我编写所有行时,它会将该日期显示为/05/2015
,而PDF具有02
。 02
会因某种原因转换为nil
吗?我错过了什么吗?
lines = reader.pages[0].text.split(/\r?\n/)
lines.each_with_index do |line, index|
values_to_insert = []
if line.include? "Legal Name:"
name_line = line.split(":")
values_to_insert.push(name_line[1])
end
if line.include? "Active/Pending Insurance"
topLine = lines[index+2].split(" ")
middleLine = lines[index+5].split(" ")
insuranceLine = lines[index + 7]
insurance_line_split = insuranceLine.split(" ")
insurance_line_split.each_with_index do |word, i|
if word.include? "Insurance"
values_to_insert.push(insuranceLine.split(":")[1])
end
end
topLine.each_with_index do |word, i|
if word.include? "Posted"
values_to_insert.push(topLine[i + 2])
end
end
middleLine.each_with_index do |word, i|
if word.include? "Effective" or word.include? "Cancellation"
#puts middleLine[0]
puts middleLine[1]
#puts middleLine[i + 1].split(":")[1]
end
end
end
end
以下是我打印所有行时会发生的事情:
Active/Pending Insurance:
Form: 91X Type: BIPD/Primary Posted Date: 02/11
/2015
Policy/Surety Number:A 3491819 Coverage From: $0
To: $1,000,000
Effective Date:/05/2015 Cancellation Date:
Insurance Carrier: PROGRESSIVE EXPRESS INSURANCE COMPANY
Attn: CUSTOMER SERVICE
Address: P. O. BOX 94739
CLEVELAND, OH 44101 US
Telephone: (800) 444 - 4487 Fax: (440) 603 - 4555
编辑显示代码甚至添加图片。我按行拆分然后再在冒号和有时空格上拆分。它不是很干净,但我认为这不是一个更好的方法。
答案 0 :(得分:4)
问题出现在多个文本位于同一行但不使用完全相同基线的位置。如果手头有PDF,
(至少)政策编号和生效日期的位置略高于各自的标签。
原因是OP使用pdf-reader library将页面上绘制的文本组合在一起的方式:
由于PDF中使用的字体通常不是等宽字符,因此该过程可能导致字符串重叠,即擦除两者中的一个。在同一基线上组合字符串的步骤可防止在这种情况下擦除,但对于略有不同的基线上的字符串,仍可能发生这种重叠效应。
可以做的是增加此处使用的列数。
page_layout.rb中的库定义了
def col_count
@col_count ||= ((@page_width / @mean_glyph_width) * 1.05).floor
end
如您所见,已经有一些幻数 1.05
正在使用,以略微增加列数。通过进一步增加该数量,不再出现OP所观察到的擦除。但是,不应该过多地增加因子,因为这可能会引入不需要的空间字符。
OP报告说,在他的情况下,将幻数增加到1.10
就足够了。