一些快速挖掘各地的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