一些快速挖掘各地的PDF文件和one of Adobe's pdf references(source)事实证明,一个文本字段可以有一个关键的“MAXLEN”,其值是表示字段的文本的最大长度的整数,在字符(见页后444在提到的参考文献中)。看来如果没有这样的密钥存在,没有最大长度。
那么可以做什么,只需搜索PDF文件中的“MaxLen”键(如果多个文本字段,否则您可以只搜索一个)并返回它们的值。例如:
import re
with open('your_file.pdf', 'r', errors='ignore') as pdf_file:
content = pdf_file.read()
# Matches every substring "n" (n is an integer) with a preceding "/MaxLen "
regexp = '(?<=\/MaxLen)\d+'
max_lengths = [int(match) for match in re.findall(regexp, content)]
(。如果文件是巨大的,你可能无法将其一次全部读入内存,如果是这样的情况下,一行行读它可能是一个解决方案)
max_lengths然后将成为文件中出现的所有“MaxLen”值的列表(第一次出现将是第一次等)。
但是,根据您的需要,您可能需要进一步搜索并为我的代码添加更多条件。例如,如果文件包含多个文本字段,但并非所有文本字段都具有最大长度,则可能不知道哪个长度对应于哪个字段。另外,如果一个PDF文件已被修改并保存(不使用“另存为”),修改将被附加到旧文件而不是完全覆盖它。我不确定这是如何工作的,但我想它可以让你获得以前删除的字段等的最大长度,如果你不小心,并检查。
(以这种方式使用pdf对我来说是非常新的事情,如果我对任何事情都有错,请纠正我的错误,我并不是说没有图书馆可以为你做这件事,也许PDFMiner可以,尽管它可能会是更先进的。)
更新23-10-2017
恐怕这个问题只是得到了很多困难。我相信你仍然应该能够通过解析PDF文件的正确部分来推断文本字段的宽度。为什么?因为Adobe的软件可以正确渲染它(至少是Adobe Acrobat Pro DC),而不需要一些密码就可以先解密它。问题是我不知道如何来解析它。挖得够深,你可能会发现,或不。
我想你可以用图形方式解决问题,打开每个PDF文件,然后用一些可以正确读取它们的查看器,然后测量文本字段的宽度。但是,这会相当缓慢,我不确定如何去识别文本字段。
这不会帮助表单不使用等宽字体,但这是一个小问题,肯定可以解决(查找文本字段使用哪种字体,查找该字体中所有字符的宽度并在计算中使用该信息)。
如果您确实设法解决问题,请分享。 :)
你能展示什么形式的样子?你也使用PyPDF? – Worm
用户需要填写多少个字段? – Worm
有4个领域需要填写,但他们都是相同的宽度,所以我只需要一个长度。我没有使用PyPDF,但我不需要脚本直接输入到PDF。我只需要一个可以复制和粘贴的字符串。 – SlicedBadge