Seite 1 von 1

wie PDF-Metadaten bearbeiten?

Verfasst: 16.01.2026 20:54
von EmmJott
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?

Re: wie PDF-Metadaten bearbeiten?

Verfasst: 16.01.2026 21:28
von Kiffi
Eine Möglichkeit wäre die Nutzung von exiftool (https://exiftool.org/), die man von PB aus mittels RunProgram() aufrufen könnte.

Re: wie PDF-Metadaten bearbeiten?

Verfasst: 17.01.2026 14:01
von Axolotl
Ich nutze (immer) die xpdf-tools um an Teile des Textes zu kommen. Evtl. bieten die anderen Tools noch mehr/was du suchst.

Re: wie PDF-Metadaten bearbeiten?

Verfasst: 17.01.2026 14:39
von EmmJott
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:

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>"
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

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>
Weitere "Tags" wären beispielsweise

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>
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?

Re: wie PDF-Metadaten bearbeiten?

Verfasst: 17.01.2026 16:53
von H.Brill
der zwischen <dc:title> und </dc:title> steht?
Ist doch eine typische Aufgabe für die Regulären Ausdrücke (RegularExpressions).

Re: wie PDF-Metadaten bearbeiten?

Verfasst: 17.01.2026 17:11
von EmmJott
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?

Re: wie PDF-Metadaten bearbeiten?

Verfasst: 17.01.2026 17:31
von Axolotl
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.)

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") + "<"