У меня есть заполняемый PDF-файл на две страницы, который я заполняю с помощью pikepdf. Вторая страница содержит поля для заполнения при переполнении данных с первой страницы. Иногда данные выходят за пределы второй страницы, и я хотел бы скопировать вторую страницу на третью и заполнить третью страницу. Поскольку дублирование страницы не привело к созданию нового объекта AcroForm (он сохранил структуру второй страницы), я придумал следующий код, который правильно добавляет дублирующиеся заполняемые страницы, добавляя их в новый PDF-файл. Однако этот метод приводит к тому, что PDF-файл отображается по-разному при просмотре в Edge, Chrome, Drive PDF Viewer и Adobe Acrobat. В Edge and Drive PDF Viewer на третьей странице отображаются связанные с ней данные. В Chrome третья отображается как дубликат второй страницы. В Adobe Acrobat значения не отображаются ни в каких полях.
for i, row_info in enumerate(rows):
if i >= 49 and (i-20)%29 == 0:
pdf.root.AcroForm['/NeedAppearances'] = True
for page in pdf.pages:
if Name.Annots not in page:
continue
annots = page.Annots
for annot in annots:
if annot.Type != Name.Annot:
continue
if annot.Subtype == Name.Widget:
if Name.T in annot:
annot.Ff=1
if (i == 49): #only append the first page once
pdf_out.pages.append(pdf.pages[0])
pdf_out.pages.append(pdf.pages[1])
pdf.close()
pdf = pikepdf.open(directory + "/my_pdf.pdf")
fill_row(pdf, i, row_info)
pdf.root.AcroForm['/NeedAppearances'] = True
for page in pdf.pages:
if Name.Annots not in page:
continue
annots = page.Annots
for annot in annots:
if annot.Type != Name.Annot:
continue
if annot.Subtype == Name.Widget:
if Name.T in annot:
annot.Ff=1
pdf_out.pages.append(pdf.pages[1])
Я пробовал использовать .append и .extend на pdf_out.pages, чтобы добавить третью страницу.
Метод fill_row ( ...) работает следующим образом.
def fill_row(...):
...
fields = pdf.root.AcroForm.Fields[0].Kids[0].Kids
fields[row_no].V = str(row_info[0])
fields[row_no + 20].V = str(row_info[1])
...
Кто-нибудь знает, как добавить страницу при дублировании акроформы или как исправить проблему рендеринга / отображения в разных средствах просмотра после использования .append или .extend?