Pdf a Acro Form – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Pdf a Acro Form – Python – Fórum – Programujte.comPdf a Acro Form – Python – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
cinkim0
Duch
4. 1. 2023   #1
-
0
-

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, PdfWriter
def 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")
Nahlásit jako SPAM
IP: 89.24.117.–
gna
~ Anonymní uživatel
1847 příspěvků
4. 1. 2023   #2
-
0
-

Mně funguje zopakování a přejmenování definice polí. (Merguju stejné formuláře)

from pdfrw import PdfReader, PdfWriter, PdfName

def merge(outfile, seznam):
    PdfT = PdfName("T")
    PdfFields = PdfName("Fields")

    writer = PdfWriter()
    merged_acroform = None

    for idx, fname in enumerate(seznam):
        reader = PdfReader(fname)
        form = reader.Root.AcroForm
        fields = form[PdfFields]
        for field in fields:
            name = field[PdfT][1:-1]
            field[PdfT] = f"{name}_merge{idx}"

        if merged_acroform is None:
            merged_acroform = form
        else:
            merged_acroform[PdfFields] += fields

        writer.addpages(reader.pages)

    writer.trailer.Root.AcroForm = merged_acroform
    writer.write(outfile)
Nahlásit jako SPAM
IP: 213.211.51.–
cinkim0
Duch
4. 1. 2023   #3
-
0
-

#2 gna#2 gna

Bohužel to nefunguje,

vstupní seznam obsahuje cesty k souborům určené ke sloučení.

při debagování má řádka PdfFields = PdfName("Fields")  v sobě uloženou hodnotu PdfFields: /Fields

Řádka fields = form[PdfFields] vrátí ale None, takže následný cyklus končí chybou

Připojen obrázek.

Nahlásit jako SPAM
IP: 89.24.117.–
gna
~ Anonymní uživatel
1847 příspěvků
4. 1. 2023   #4
-
0
-

Jestli můžeš, tak pošli 2 ukázkové soubory. Já na to mrknu.

Nahlásit jako SPAM
IP: 213.211.51.–
gna
~ Anonymní uživatel
1847 příspěvků
4. 1. 2023   #6
-
0
-

 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)
Nahlásit jako SPAM
IP: 213.211.51.–
cinkim0
Duch
4. 1. 2023   #7
-
0
-

#6 gna
Tohle už funguje super. Díky

Nahlásit jako SPAM
IP: 178.255.168.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

Podobná vlákna

PDF — založil Anonymní uživatel

Tlač, PDF — založil Tomáš Fedor

Kryptovanie PDF — založil marioff

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý