Seite 1 von 1

fitz (pymupdf) pdf metadaten neu schreiben wirft Fehler

Verfasst: Dienstag 29. April 2025, 21:50
von ran
Hi, in meinem kleinen pdf-such-und-find-Projektchen stoße ich gerade auf ein Metadaten-Schreib-Problem

Code: Alles auswählen

def speichern():
            try:
                doc = fitz.open(pfad)
                new_meta = {
                    "/Title": entries["title"].get(),
                    "/Author": entries["author"].get(),
                    "/Subject": entries["subject"].get(),
                    "/Keywords": entries["keywords"].get(),
                    "/Creator": entries["creator"].get() or "PDF Finder",
                    "/Producer": entries["producer"].get() or "PDF Finder v1.0"
                }
                print(new_meta)
                doc.dataset_meta(new_meta)
                doc.save(pfad, incremental=True, encryption=fitz.PDF_ENCRYPT_KEEP)
                doc.close()
                messagebox.showinfo("Erfolg", "Metadaten erfolgreich gespeichert.")
                editor.destroy()
            except Exception as e:
                messagebox.showerror("Fehler", f"Speichern nicht möglich:\n{e}")
Ich habe das nicht in einer Schleife laufen, weil ich gelesen habe, dass fitz bei manchen Daten-Feldern sehr pingelig ist und ich sicher stellen wollte, dass die auch richtig befüllt sind. Ich habe Auslesen und Einschreib-Daten mal schreiben lassen

{'format': 'PDF 1.7', 'title': '', 'author': '', 'subject': '', 'keywords': '', 'creator': '', 'producer': 'PDFlib+PDI 9.0.3 (Ruby/Linux-x86_64)', 'creationDate': "D:20250207010220+01'00'", 'modDate': '', 'trapped': '', 'encryption': None}

{'/Title': 'a', '/Author': 'b', '/Subject': 'c', '/Keywords': 'd', '/Creator': 'PDF Finder', '/Producer': 'PDFlib+PDI 9.0.3 (Ruby/Linux-x86_64)'}

irgendwas mache ich wohl falsch, aber was? Kann mir vielleicht jemand weiterhelfen?

Re: fitz (pymupdf) pdf metadaten neu schreiben wirft Fehler

Verfasst: Dienstag 29. April 2025, 22:02
von Sirius3
Die Einrückungen sind nicht einheitlich, eingerückt wird immer mit 4 Leerzeichen pro Ebene. Die Variablen `pfad`, `entities` und `editor` kommen aus dem Nichts, das sollten Argumente der Funktion sein.
Da Du nicht beschreibst, was Deine Erwartungen sind, und wie das Ergebnis davon abweicht, läßt sich schwer sagen, was Du falsch machst.
Es hilft auf jeden Fall, erst einmal die Dokumentation zu lesen: https://pymupdf.readthedocs.io/en/lates ... f-metadata
Da ist jedenfalls die Rede davon, dass es zwei Arten von Zugriff auf Metadaten gibt, eine vereinfachte Form und die erweiterte Art, da Du die vereinfachte Form verwendest, sind auch die entsprechenden Schlüssel zu verwenden.

Re: fitz (pymupdf) pdf metadaten neu schreiben wirft Fehler

Verfasst: Dienstag 29. April 2025, 22:27
von ran
Danke für den Hinweis. Das Script ist richtig eingerückt, durch das Setzen hier in die code-tags wurde es verzerrt, ich bin mit dieser Form der Eingabe noch nicht vertraut. Die Variablen kommen aus dem Editor-Teil des Programms, ich will einfach editierte Metadaten zu meinem pdf zurück schreiben. und es wird der Schreib-Fehler geworfen, es wird also nichts in das File geschrieben.

Re: fitz (pymupdf) pdf metadaten neu schreiben wirft Fehler

Verfasst: Mittwoch 30. April 2025, 05:10
von Sirius3
Wenn Du einen Fehler bekommst,dann poste den kompletten Traceback hier.

Re: fitz (pymupdf) pdf metadaten neu schreiben wirft Fehler

Verfasst: Mittwoch 30. April 2025, 07:32
von geraldfo
fitz – was ist das? Muss man das wissen?

Re: fitz (pymupdf) pdf metadaten neu schreiben wirft Fehler

Verfasst: Mittwoch 30. April 2025, 09:19
von grubenfox
Sirius3 hat geschrieben: Mittwoch 30. April 2025, 05:10 Wenn Du einen Fehler bekommst,dann poste den kompletten Traceback hier.
Und dazu das 'try:' und 'except Exception as e:' aus der Funktion 'speichern' entfernen. Dann wird auch irgendwo die komplette Fehlermeldung angezeigt. So fehlen jedenfalls die wesentlichen Informationen, die man bei der Fehlersuche benötigt...

Re: fitz (pymupdf) pdf metadaten neu schreiben wirft Fehler

Verfasst: Mittwoch 30. April 2025, 09:57
von ran
Gelöst. Danke für alle, die sich für mich den Kopf zerbrochen haben. 2 Fehler waren drin. Frühere Versionen von fitz wollten die Übergabe mit / und Großbuchstabe am Anfang (z.B. /Keywords) jetzt nicht mehr nur noch flat keywords. Und dann ein peinlicher Hirnverdreher im Ojekt-Aufruf doc.set_metadata(new_meta)

Code: Alles auswählen

doc = fitz.open(pfad)
                new_meta = {
                    "title": entries["title"].get(),
                    "author": entries["author"].get(),
                    "subject": entries["subject"].get(),
                    "keywords": entries["keywords"].get(),
                    "creator": entries["creator"].get() or "PDF Finder",
                    "producer": entries["producer"].get() or "PDF Finder v1.0"
                }
                doc.set_metadata(new_meta)
                doc.save(pfad, incremental=True, encryption=fitz.PDF_ENCRYPT_KEEP)
                doc.close()
                messagebox.showinfo("Erfolg", "Metadaten erfolgreich gespeichert.")
                editor.destroy()
Jetzt sind meine Kopfschmerztabletten alle - aber es funktioniert.

Re: fitz (pymupdf) pdf metadaten neu schreiben wirft Fehler

Verfasst: Mittwoch 30. April 2025, 10:03
von ran
Ach ja, noch die schuldige Antwort: fitz ist das Mitbringsel von https://pypi.org/project/PyMuPDF/

Re: fitz (pymupdf) pdf metadaten neu schreiben wirft Fehler

Verfasst: Mittwoch 30. April 2025, 14:19
von __blackjack__
Die Dokumentation hat dazu eine Notiz zum Namen *fitz*:
Old versions of PyMuPDF had their Python import name as fitz. Newer versions use pymupdf instead, and offer fitz as a fallback so that old code will still work.
Sollte man aber nicht mehr benutzen, insbesondere weil das im Zusammenhang mit einem anderen, gleichnamigen Python-Package Probleme machen kann.

Re: fitz (pymupdf) pdf metadaten neu schreiben wirft Fehler

Verfasst: Mittwoch 30. April 2025, 14:27
von geraldfo
@ran
@__blackjack__
Dankeschön!