Как заполнить форму PDF, содержащую текст и раскрывающиеся поля, с помощью модуля Python pypdf?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как заполнить форму PDF, содержащую текст и раскрывающиеся поля, с помощью модуля Python pypdf?

Сообщение Anonymous »

Хотя я технически не новичок в Python, я не использовал его уже пять лет, поэтому с таким же успехом могу назвать себя новичком. Я взял его снова, потому что мне нужно массово заполнять формы PDF. Я работаю в изолированной среде, поэтому мне приходится работать с пакетами и версиями, которые у меня уже есть. У меня Python 3.11.7, pypdf 4.3.1. У меня нет fillpdf или PyMuPDF, и я не могу их импортировать. Я следую примеру документации pypdf здесь: https://pypdf.readthedocs.io/en/stable/user/forms.html. Однако поля почему-то не заполняются. Случайно выполнив предыдущую команду write.append_pages_from_reader(reader) перед Writer.append(reader), я обнаружил, что это работает, хотя все мои страницы дублируются (мой трехстраничный документ превратился в шесть страниц, но поля заполнены.) Выполнение любой из этих строк без других результатов в незаполненной форме.

Код: Выделить всё

from pypdf import PdfReader, PdfWriter

reader = PdfReader("form.pdf")
writer = PdfWriter()

page = reader.pages[0]
fields = reader.get_fields()

# Line directly below is the one that was added by accident
writer.append_pages_from_reader(reader)
writer.append(reader)

writer.update_page_form_field_values(
writer.pages[0],
{"fieldname": "some filled in text"},
auto_regenerate=False)

with open("filled-out.pdf", "wb") as output_stream:
writer.write(output_stream)

Я мог бы сделать это, чтобы заполнить форму, а затем вернуться и программно удалить лишние страницы следующим образом: Как удалить страницы из файла PDF с помощью Python? Однако я бы предпочел более чистое решение.
Другая проблема заключается в том, что есть несколько раскрывающихся полей. Документация pypdf не содержит примеров кода для этого довольно распространенного сценария. Я рассматривал следующий вопрос: значение поля изменения PyPDF2 без словаря, где автор отвечает на свой вопрос. Решение состоит в том, чтобы отредактировать раскрывающийся объект как обычный текст obj.update({NameObject('/FT'): NameObject('/Tx')}). Каким будет мой объект? Я не хочу превращать все раскрывающиеся списки в текст, а только те, что на первой странице (объекты 4 и 5). Я попробовал код ниже, следуя этому сообщению: Изменить поля в pdf с помощью pypdf? , ошибок нет, но и изменений нет.

Код: Выделить всё

import pypdf
from pypdf import generic as pypdf_generic

field_object = page.get('/Annots').get_object()[5].get_object()
field_object.update({pypdf_generic.NameObject('/FT'): pypdf_generic.NameObject('/Tx')})

Любые советы приветствуются.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ng-pythons
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»