【问题标题】:Python and PDF Forms - error with field namePython 和 PDF 表单 - 字段名称错误
【发布时间】: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)。

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

【问题讨论】:

  • T 值中禁止使用句点字符,部分字段名称,参见。 ISO 32000-1 第 12.7.3.2 节字段名称,它们保留用于从这些部分字段名称构建完全限定名称。

标签: python pdf adobe acrobat


【解决方案1】:

如果您解析 PDF 文件(而不是实际渲染它),您必须注意字段名称将是分层的,这意味着您有第一组(在示例中为 MD),然后是一个孩子命名为LE,它本身有一个名为0001 的孩子。如果有孩子,会在字段说明中注明。

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

【讨论】:

    猜你喜欢
    • 2011-01-08
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    相关资源
    最近更新 更多