PDFBox 2.0:PDFTextStripper提取到不可见括号字符的问题咨询
我来帮你拆解下这个问题里隐藏括号被提取的核心原因,结合你提到的表格金额列的情况,主要有这几种常见可能性:
字符透明度被设为完全透明:PDF里的单个字符可以通过
ca或CA操作符设置透明度属性,如果这些括号的透明度被设为0,肉眼就完全看不到,但PDFTextStripper提取文本时默认不会过滤透明字符,所以会把这些括号一并提取出来。你可以用Adobe Acrobat这类PDF编辑器的文本编辑功能,选中对应区域查看字符的透明度参数来验证。字符颜色与背景色完全重合:如果括号的颜色和表格单元格的背景色完全一致,视觉上就会“隐身”,但PDF的文本层里依然保留了这些字符的完整信息。PDFTextStripper是基于文本层读取内容,不受视觉颜色重合的影响,所以能提取出这些括号。你可以尝试在PDF里选中该区域复制后粘贴到记事本,就能直接看到隐藏的括号了。
字符被其他元素完全遮挡:有时候括号可能被表格的线条、填充色块或者其他文本元素完全覆盖,导致视觉上不可见,但PDF的文本结构里依然存在这些字符的记录。PDFTextStripper提取时只读取文本层数据,不管视觉上是否被遮挡,所以会把这些括号提取出来。
文档转换时的排版遗留问题:如果这个PDF是从Excel、Word这类文档转换而来,转换工具可能在处理带括号的金额格式时出现bug——比如把括号单独渲染到了单元格外或者视觉不可见的位置,但没有在文本层删除这些字符,最终导致视觉上看不到,但提取时能读到。
你提到的这段示例内容也能印证这个逻辑:
Publix Liquors 1,600 2.5 1/1/2014 12/31/2018 ($ 24,000.00) ($ 4,032.00) ($ 28,032.00)
BayCare Health Systems 3,200 5 7/30/2004 7/31/2018 ($ 51,200.00) ($ 9,648.00) ($ 60,848.00) No rent change until Option Period 8/11/2018……
这些括号在视觉上隐藏,但文本层的信息完整保留,所以会被PDFTextStripper提取出来。
内容的提问来源于stack exchange,提问作者D.F. Stones

