Python和PDF表单-字段名称错误

时间:2020-08-05 15:44:56

标签: python pdf adobe acrobat

我正在使用以下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字母,N编号)。

当我使用此命名法重命名字段名称时,代码无法按预期工作。首先,我认为这与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”字母是什么。

Link for the pdf file used in this test

1 个答案:

答案 0 :(得分:0)

如果解析PDF文件(而不是实际呈现),则必须知道字段名称将是分层的,这意味着您具有第一组(在示例MD中),然后一个名为LE的孩子,其本身有一个名为0001的孩子。如果有孩子,则在字段说明中指出。

因此,如果遇到“有孩子”指示,则必须找到那些孩子并相应地组装字段名称。