Ahoj všichni. Mám zdrojové pdf o dvou stránkách a první stránka obsahuje několik formulářových polí. Postupně z .csv souboru načítám řádky, doplní se údaje do formulářového pole a uloží se separátní soubor. Takto se vytvoří cca 400 souborů pdf s vyplněnými údaji zaměstnanců. Abych mohl vše vytisknout, potřebuji soubory sloučit do jednoho. Nemohu nalést žádné vhodné řešení. Soubory se mi podaří sloučit, ale údaje formulářového pole jsou v celém souboru pak stejné.
Zde přikládám mé řešení
from pdfrw import PdfReader, PdfWriterdef marge(seznam):
writer = PdfWriter()
for fname in seznam:
r = PdfReader(fname)
acro_form = r.Root.AcroForm
writer.addpages(r.pages)
writer.trailer.Root.AcroForm = acro_form
writer.write("./OUT/output.pdf")
To je zvláštní, že to nemá tu definici Fields, ale toto teda (u mě) chodí.
from pdfrw import PdfReader, PdfWriter, PdfDict, PdfName, PdfString
def merge(outfile, seznam):
writer = PdfWriter()
merged_acroform = None
for idx, fname in enumerate(seznam):
reader = PdfReader(fname)
assert not reader.Root.AcroForm or not reader.Root.AcroForm.Fields
if merged_acroform is None and reader.Root.AcroForm:
merged_acroform = reader.Root.AcroForm
for page in reader.pages:
for annot in page.Annots or []:
name = annot.T[1:-1]
annot.T = f"{name}_merge{idx}"
writer.addpages(reader.pages)
if merged_acroform:
writer.trailer.Root.AcroForm = merged_acroform
else:
writer.trailer.Root.AcroForm = PdfDict({PdfName("NeedAppearances"): PdfString("true")})
writer.write(outfile)