У меня проблема с тем, что все поля, которые я заполнил, исчезли после преобразования в изображение с помощью библиотеки pdf2image.
/ атрибут NeedAppearances помог сделать его отображаемым для предварительного просмотра, но когда я преобразовал PDF в image все поля пропали.
Не уверен, что это поможет, но когда PDF открывается из Acrobat Reader (после того, как все поля заполнены), файл отображается как несохраненное состояние и просит меня сохранить его. После сохранения файла из Acrobat Reader все поля отображаются при преобразовании в изображение.
Можно ли установить атрибут для блокировки (или сохранения) поля?
Заранее спасибо .
def fill(self, data_dict):
input_stream = open(self.SOURCE, "rb")
pdf_reader = PyPDF2.PdfFileReader(input_stream, strict=False)
if "/AcroForm" in pdf_reader.trailer["/Root"]:
pdf_reader.trailer["/Root"]["/AcroForm"].update(
{NameObject("/NeedAppearances"): BooleanObject(True)})
pdf_writer = PyPDF2.PdfFileWriter()
self.set_need_appearances_writer(pdf_writer)
if "/AcroForm" in pdf_writer._root_object:
# Acro form is form field, set needs appearances to fix printing issues
pdf_writer._root_object["/AcroForm"].update(
{NameObject("/NeedAppearances"): BooleanObject(True)})
pdf_writer.addPage(pdf_reader.getPage(0))
page = pdf_writer.getPage(0)
for j in range(0, len(page['/Annots'])):
writer_annot = page['/Annots'][j].getObject()
for field in data_dict:
if writer_annot.get('/T') == field:
writer_annot.update({
NameObject("/Ff"): NumberObject(1)
})
pdf_writer.updatePageFormFieldValues(page, data_dict)
with open(self.DESTINATION, 'wb') as fh:
pdf_writer.write(fh)
input_stream.close()
self.convert_to_image()
return self.DESTINATION_IMG
def convert_to_image(self):
images = convert_from_path(self.DESTINATION)
images[0].save(self.DESTINATION_IMG, 'JPEG')
@staticmethod
def set_need_appearances_writer(writer):
try:
catalog = writer._root_object
# get the AcroForm tree and add "/NeedAppearances attribute
if "/AcroForm" not in catalog:
writer._root_object.update({
NameObject("/AcroForm"): IndirectObject(len(writer._objects), 0, writer)})
need_appearances = NameObject("/NeedAppearances")
writer._root_object["/AcroForm"][need_appearances] = BooleanObject(True)
except Exception as e:
print('set_need_appearances_writer() catch : ', repr(e))
return writer