Сглаживание формы PDF в Python - PullRequest
0 голосов
/ 05 марта 2019

Как мне «сгладить» PDF-форму?У меня есть PDF-форма, которую нужно заполнить.У меня есть простой пример, где TEMP_FORM.pdf - это значение from, а data_dict - это значение, которое нужно заполнить в TEMP_FORM.pdf.Выходной файл сохраняется как FORM1.pdf, но все еще доступен для редактирования. Мне нужно сгладить этот файл, чтобы значение не могло быть отредактировано.

from PyPDF2 import PdfFileReader, PdfFileWriter

TEMPLATE_PATH = 'TEMP_FORM.pdf'
OUTPUT_PATH = 'FORM1.pdf'
data_dict = {
    'name': 'XYZ',
    'address': 'PQR',
    'email': 'xyz@gmail.com',
    'send_date': '2018-02-13',
    'due_date': '2018-03-13'
}

if __name__ == '__main__':
    input_file = PdfFileReader(open(TEMPLATE_PATH, "rb"))

    output_file = PdfFileWriter()
    output_file.addPage(input_file.getPage(0))
    output_file.updatePageFormFieldValues(output_file.getPage(0), data_dict)
    output_stream = open(OUTPUT_PATH, "wb")

    output_file.write(output_stream)
    output_stream.close()

1 Ответ

0 голосов
/ 22 марта 2019

Согласно документам Adobe, вы можете изменить битовую позицию полей редактируемой формы на 1, чтобы сделать их доступными только для чтения.Я предоставил полное решение здесь, но оно использует Django:

https://stackoverflow.com/a/55301804/8382028

Adobe Docs (стр. 552):

https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/pdf_reference_archives/PDFReference.pdf

ИспользованиеPyPDF2, чтобы заполнить поля, затем перебрать аннотации и сделать это:

for j in range(0, len(output_file['/Annots'])):
    writer_annot = output_file['/Annots'][j].getObject()
    for field in data_dict: 
        if writer_annot.get('/T') == field:
            writer_annot.update({
                NameObject("/Ff"): NumberObject(1)   # make ReadOnly
            })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...