【发布时间】:2020-11-25 20:14:12
【问题描述】:
我正在使用此 Python 代码从 PDF 表单中获取信息(字段名称和字段内容):
import sys
import six
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdftypes import resolve1
fp = open("C:\\Users\\user\\Desktop\\Example.pdf", "rb")
parser = PDFParser(fp)
doc = PDFDocument(parser)
fields = resolve1(doc.catalog["AcroForm"])["Fields"]
for i in fields:
field = resolve1(i)
name, value = field.get("T"), field.get("V")
print ("{0}:{1}".format(name,value))
它工作正常,但我的问题与字段名称有关。我需要这些名称与我的数据库完全相同,尊重这一点:LL.LL.NNNN (L-Letter, N-Number)。
当我使用此命名法重命名字段名称时,代码无法按预期工作。首先,我认为这是与 Adobe Acrobat Pro DC 相关的问题。但是我也使用 PDFStudio 进行了重命名,并且出现了同样的错误。这是我从 Python 调试控制台得到的:
NORMAL NAMING
1. b'Given Name Text Box':b'John'
2. b'Family Name Text Box':b'Smith'
3. b'House nr Text Box':b'32'
4. b'Address 2 Text Box':b'45 Street'
5. b'Postcode Text Box':b'12345'
6 b'Country Combo Box':b'Portugal'
7. b'Height Formatted Field':b'190'
8. b'City Text Box':b'Lisbon'
9. b'Driving License Check Box':/'Yes'
10. b'Favourite Colour List Box':b'Yellow'
11. b'Language 1 Check Box':/'Off'
12. b'Language 2 Check Box':/'Yes'
13. b'Language 3 Check Box':/'Off'
14. b'Language 4 Check Box':/'Off'
15. b'Language 5 Check Box':/'Yes'
16. b'Gender List Box':b'\xfe\xff\x00M\x00a\x00n'
17. b'Address 1 Text Box':b'44 Street'
WITH MY NOMENCLATURE NAMING
1. b'Family Name Text Box':b'Smith'
2. b'House nr Text Box':b'32'
3. b'Address 2 Text Box':b'45 Street'
4. b'Postcode Text Box':b'12345'
5. b'Country Combo Box':b'Portugal'
6. b'Height Formatted Field':b'190'
7. b'City Text Box':b'Lisbon'
8. b'Driving License Check Box':/'Yes'
9. b'Favourite Colour List Box':b'Yellow'
10. b'Language 1 Check Box':/'Off'
11. b'Language 2 Check Box':/'Yes'
12. b'Language 3 Check Box':/'Off'
13. b'Language 4 Check Box':/'Off'
14. b'Language 5 Check Box':/'Yes'
15. b'Gender List Box':b'\xfe\xff\x00M\x00a\x00n'
16. b'Address 1 Text Box':b'44 Street'
17. b'MD':None
我已将第一个字段的名称从“名字文本框”更改为“MD.LE.0001”。 Python 结果只读取“MD”,将字段内容显示为“none”并更改字段顺序,将重命名的字段从第 1 行发送到第 17 行。
我想知道发生了什么以及 Python 在结果中显示的“b”字母是什么。
【问题讨论】:
-
T 值中禁止使用句点字符,部分字段名称,参见。 ISO 32000-1 第 12.7.3.2 节字段名称,它们保留用于从这些部分字段名称构建完全限定名称。