wie PDF-Metadaten bearbeiten?
wie PDF-Metadaten bearbeiten?
Guude!
Ich habe über die Jahre eine ganze Menge PDFs gesammelt, die ich gerne in einer selfhosted Library (beispielsweise Booklore) organisieren würde. Habe dabei festgestellt, dass ein Großteil der PDFs falsche, fehlerhafte oder gar keine Metadaten enthält. Leider hat meine Suche nach vernünftiger Software nichts Brauchbares ergeben.
Hat jemand zufällig Infos, wie man mit PB Metadaten von PDFs ausliest bzw. geänderte Metadaten speichert und könnte mir da weiterhelfen?
Ich habe über die Jahre eine ganze Menge PDFs gesammelt, die ich gerne in einer selfhosted Library (beispielsweise Booklore) organisieren würde. Habe dabei festgestellt, dass ein Großteil der PDFs falsche, fehlerhafte oder gar keine Metadaten enthält. Leider hat meine Suche nach vernünftiger Software nichts Brauchbares ergeben.
Hat jemand zufällig Infos, wie man mit PB Metadaten von PDFs ausliest bzw. geänderte Metadaten speichert und könnte mir da weiterhelfen?
Bin aktiv in der rentenvorbereitenden Arbeitslosigkeit - zwangsweise. Auch nach >30 Jahren im Betrieb springst Du über die Klinge, wenn der (Miss-)Manager seinen Hintern retten will. Lasst Euch von euren Arbeitgebern bloß nix von wegen Loyalität erzählen - wenn's drauf ankommt, ist die nix Wert!
Re: wie PDF-Metadaten bearbeiten?
Eine Möglichkeit wäre die Nutzung von exiftool (https://exiftool.org/), die man von PB aus mittels RunProgram() aufrufen könnte.
a²+b²=mc²
Re: wie PDF-Metadaten bearbeiten?
Ich nutze (immer) die xpdf-tools um an Teile des Textes zu kommen. Evtl. bieten die anderen Tools noch mehr/was du suchst.
Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
Re: wie PDF-Metadaten bearbeiten?
Besten Dank für die Beiträge. Exiftool scheint das zu können, bin mir aber nicht sicher, ob ich mich da wirklich reinfuchsen will.
Wenn man sich PDFs mit einem HexEditor anschaut, kann man am Ende der Dateien folgendes finden:
Space(n) soll hier bedeuten, dass die Anzahl an CHR(32) variiert, offenbar abhängig von der zur Erstellung der PDF verwendeten Software. Das mit den variablen Abständen zwischen den "Tags" (in Ermangelung eines geeigneten Fachbegriffes) ist auch bei
Weitere "Tags" wären beispielsweise
Ich würde gerne bei meinen PDF-Dateien (einige recht große darunter) einige Metadaten auslesen und in eine CSV-Datei schreiben, die CSV-Datei dann bearbeiten (z. B. in LibreOffice) und dann die geänderten Metadaten in die PDFs zurückschreiben.
Erste Hürde dabei: Wie finde ich in (theoretisch beliebig großen) Dateien den Text, der zwischen <dc:title> und </dc:title> steht?
Wenn man sich PDFs mit einem HexEditor anschaut, kann man am Ende der Dateien folgendes finden:
Code: Alles auswählen
<dc:title>" + Chr(10) + Space(n) + "<rdf:Alt>" + Chr(10) + Space(n) + "<rdf:li xml:lang=" + #DQUOTE$ + "x-Default" + #DQUOTE$ + ">"
hier stünde der Titeltext
</rdf:li>" + Chr(10) + Space(n) + "</rdf:Alt>" + Chr(10) + Space(n) + "</dc:title>"
Code: Alles auswählen
<dc:description> <rdf:Alt> <rdf:li xml:lang="x-default">
hier stünde die Beschreibung
</rdf:li> </rdf:Alt> </dc:description>
oder
<dc:contributor> <rdf:Bag> <rdf:li>
Text
</rdf:li> </rdf:Bag> </dc:contributor>
oder
<dc:publisher> <rdf:Bag> <rdf:li>
Text
</rdf:li> </rdf:Bag> </dc:publisher>
oder
<dc:relation> <rdf:Bag> <rdf:li>
Text
</rdf:li> </rdf:Bag> </dc:relation>
oder
<dc:rights> <rdf:Alt> <rdf:li xml:lang="x-default">
Text
</rdf:li> </rdf:Alt> </dc:rights>
Code: Alles auswählen
<dc:coverage></dc:coverage>
<dc:identifier></dc:identifier>
<dc:source></dc:source>
<dc:type></dc:type>
<pdf:Producer></pdf:Producer>
<pdf:Keywords></pdf:Keywords>
Erste Hürde dabei: Wie finde ich in (theoretisch beliebig großen) Dateien den Text, der zwischen <dc:title> und </dc:title> steht?
Bin aktiv in der rentenvorbereitenden Arbeitslosigkeit - zwangsweise. Auch nach >30 Jahren im Betrieb springst Du über die Klinge, wenn der (Miss-)Manager seinen Hintern retten will. Lasst Euch von euren Arbeitgebern bloß nix von wegen Loyalität erzählen - wenn's drauf ankommt, ist die nix Wert!
Re: wie PDF-Metadaten bearbeiten?
Ist doch eine typische Aufgabe für die Regulären Ausdrücke (RegularExpressions).der zwischen <dc:title> und </dc:title> steht?
PB 6.10
Re: wie PDF-Metadaten bearbeiten?
Hallo H.Brill,
der erste Teil der Frage, nämlich "Wie finde ich in (theoretisch beliebig großen) Dateien ..." bereitet mir erstmal mehr Schwierigkeiten. Liest man die häppchenweise ein , durchsucht, und bei Erfolglosigkeit das nächste Häppchen?
der erste Teil der Frage, nämlich "Wie finde ich in (theoretisch beliebig großen) Dateien ..." bereitet mir erstmal mehr Schwierigkeiten. Liest man die häppchenweise ein , durchsucht, und bei Erfolglosigkeit das nächste Häppchen?
Bin aktiv in der rentenvorbereitenden Arbeitslosigkeit - zwangsweise. Auch nach >30 Jahren im Betrieb springst Du über die Klinge, wenn der (Miss-)Manager seinen Hintern retten will. Lasst Euch von euren Arbeitgebern bloß nix von wegen Loyalität erzählen - wenn's drauf ankommt, ist die nix Wert!
Re: wie PDF-Metadaten bearbeiten?
Moin,
ja, kann man so machen, allerdings würde ich es erstmal einfacher machen.... (Ohne gleich auf Speicher oder Geschwindigkeitsoptimierung zu gehen)
Wenn die Logik fehlerfrei funktioniert kannste die Optimierungen für (riesige) pdf dateien immer noch vornehmen.
Wenn ich dich richtig verstanden habe, willst du sowas machen, oder? (Datei lesen geht so natürlich nur mit ReadString, wenn da keine NULL-Zeichen enthalten sind. Dann brauchste dafür ReadData (usw.)
ja, kann man so machen, allerdings würde ich es erstmal einfacher machen.... (Ohne gleich auf Speicher oder Geschwindigkeitsoptimierung zu gehen)
Wenn die Logik fehlerfrei funktioniert kannste die Optimierungen für (riesige) pdf dateien immer noch vornehmen.
Wenn ich dich richtig verstanden habe, willst du sowas machen, oder? (Datei lesen geht so natürlich nur mit ReadString, wenn da keine NULL-Zeichen enthalten sind. Dann brauchste dafür ReadData (usw.)
Code: Alles auswählen
EnableExplicit
Global PDFEntireText$ = " Der Text, der zwischen <dc:title> und </dc:title> steht? "
Procedure ReadPDF(File$) ; BOOL
Protected result
If ReadFile(0, File$)
While Eof(0) = 0
PDFEntireText$ = ReadString(0, #PB_File_IgnoreEOL)
Wend
CloseFile(0)
result = #True
Else
PDFEntireText$ = ""
EndIf
ProcedureReturn result
EndProcedure
Procedure.s ExtractValue(Tag$, Title$) ; STR
Protected result$, searchBegin$, searchEnd$, pBegin, pEnd
If PDFEntireText$
searchBegin$ = "<" + Tag$ + ":" + Title$ + ">"
searchEnd$ = "</" + Tag$ + ":" + Title$ + ">"
pBegin = FindString(PDFEntireText$, searchBegin$, 1)
If pBegin
pBegin + Len(searchBegin$)
pEnd = FindString(PDFEntireText$, searchEnd$, pBegin)
If pEnd
result$ = Mid(PDFEntireText$, pBegin, pEnd - pBegin)
EndIf
EndIf
EndIf
ProcedureReturn result$
EndProcedure
Debug "=>" + ExtractValue("dc", "title") + "<"
Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
Re: wie PDF-Metadaten bearbeiten?
Hi EmmJott, falls es um die Verwaltung von mehr als 100 Pdf's geht, würde ich das gleich größer aufziehen und das mit einer Kombination aus PDF CLI Tool und AI angehen.
Also Meta Daten und Text über eine CLI Tool auslesen und mit AI eine Zusammenfassung und ggf. neue Metadaten generieren lassen.
Falls dein PDF Scans bzw. Bilder enthält kannst du diese mit Tesseract oder einen Visionmodell auch daraus die Texte holen.
Wenn deine Grafikkarte mehr als 8GB VRAM hat, kann man mit Ollama und LLMs wie llama und qwen schon ziemlich gut arbeiten.
Richtig Spaß macht das ganze dann aber erst, wenn du AI dann auch in deine Suche integrierst. Das erhöht signifikant die Trefferquote. Stichwort RAG (Retrieval-Augmented Generation)
Also Meta Daten und Text über eine CLI Tool auslesen und mit AI eine Zusammenfassung und ggf. neue Metadaten generieren lassen.
Falls dein PDF Scans bzw. Bilder enthält kannst du diese mit Tesseract oder einen Visionmodell auch daraus die Texte holen.
Wenn deine Grafikkarte mehr als 8GB VRAM hat, kann man mit Ollama und LLMs wie llama und qwen schon ziemlich gut arbeiten.
Richtig Spaß macht das ganze dann aber erst, wenn du AI dann auch in deine Suche integrierst. Das erhöht signifikant die Trefferquote. Stichwort RAG (Retrieval-Augmented Generation)
"Papa, ich laufe schneller - dann ist es nicht so weit."