Python и PDF-формы - ошибка с названием поля - PullRequest
0 голосов
/ 05 августа 2020

Я использую этот код 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))

Он работает нормально, но моя проблема связана с именами полей. Мне нужно, чтобы эти имена были точно такими же, как мой db, с учетом этого: LL.LL.NNNN (L-Letter, N-Number).

Когда я переименовываю имена полей с этой номенклатурой, код не работать как положено. Сначала я подумал, что это проблема, связанная с Adobe Acrobat Pro D C. Но я тоже переименовал с помощью 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 result читает только «MD», показывает содержимое поля как «none» и изменяет порядок полей, отправляя переименованное поле со строки 1 на строку 17.

Я хочу знать, что происходит и что - буквы "b", которые Python представляет в результате.

Ссылка на файл pdf, использованный в этом тесте

1 Ответ

0 голосов
/ 06 августа 2020

Если вы анализируете файл PDF (вместо того, чтобы фактически отображать его), вы должны знать, что имена полей будут иерархическими c, что означает, что у вас есть первая группа (в примере MD), и затем ребенок по имени LE, у которого есть ребенок по имени 0001. Если есть дети, это указывается в описании поля.

Итак, если вы столкнетесь с индикатором «есть дети», вам придется найти этих детей и соответствующим образом составить имя поля.

...