Как заполнять PDF-формы с помощью Python - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть PDF form, созданный с использованием Adobe LiveCycle Designer ES 10.4.Мне нужно заполнить его, используя Python, чтобы мы могли сократить ручной труд.Я искал в Интернете и прочитал некоторые статьи, большинство из которых были сосредоточены вокруг библиотеки pdfrw, я попытался использовать ее и извлек некоторую информацию из PDF form, как показано ниже

Код

from pdfrw import PdfReader
pdf = PdfReader('sample.pdf')
print(pdf.keys())
print(pdf.Info)
print(pdf.Root.keys())
print('PDF has {} pages'.format(len(pdf.pages)))

Вывод

['/Root', '/Info', '/ID', '/Size']
{'/CreationDate': "(D:20180822164509+05'30')", '/Creator': '(Adobe LiveCycle Designer ES 10.4)', '/ModDate': "(D:20180822165611+05'30')", '/Producer': '(Adobe XML Form Module Library)'}
['/AcroForm', '/MarkInfo', '/Metadata', '/Names', '/NeedsRendering', '/Pages', '/Perms', '/StructTreeRoot', '/Type']
PDF has 1 pages

Я не уверен, как дальше я могу использовать pdfrw для доступа к заполняемым полям из PDF-формы и заполнения их с помощью PythonЯвляется ли это возможным.Любые предложения будут полезны.

Ответы [ 3 ]

0 голосов
/ 01 декабря 2018

Вы можете найти поля формы здесь:

pdf.Root.AcroForm.Fields

или здесь

pdf.Root.Pages.Kids[page_index].Annots

Это объект PdfArray.В основном список.Имя поля находится здесь:

pdf.Root.AcroForm.Fields[field_index].T

Другие ключи включают в себя значение .V Существует множество отображаемой информации, например, шрифт и т. Д. В .AP.N.Resources

Однако, если вы обновите значение для поля и выведете файл PDF.Он может отображать значение только тогда, когда поле имеет фокус, т. Е. Нажата кнопка.

Я еще не выяснил, как это исправить.

0 голосов
/ 09 августа 2019

Здесь было предоставлено полное решение: Как редактировать редактируемый pdf с помощью библиотеки pdfrw?

Ключевая часть:

template_pdf.Root.AcroForm.update(pdfrw.PdfDict(NeedAppearances=pdfrw.PdfObject('true'))) 
0 голосов
/ 15 ноября 2018

Формы на основе AcroForm с использованием PDFix SDK

def SetFormFieldValue(email, key, open_path, save_path):
    pdfix  = GetPdfix()
    if pdfix is None:
        raise Exception('Pdfix Initialization fail')
    if not pdfix.Authorize(pdfix_email, pdfix_license):
        raise Exception('Authorization fail : ' + pdfix.GetError())
    doc = pdfix.OpenDoc(open_path, "")
    if doc is None:
        raise Exception('Unable to open pdf : ' + pdfix.GetError())
    field = doc.GetFormFieldByName("Text1")
    if field is not None:
        value = field.GetValue()
        value = "New Value"
        field.SetValue(value)
    if not doc.Save(save_path, kSaveFull):
        raise Exception(pdfix.GetError())
    doc.Close()
    pdfix.Destroy()
...