Metadaten in PDF scheiben/Aktualisieren

MiMa

Top Contributor
Metadaten in einer PDF-Datei zu schreiben / aktualisieren ist für mich das aktuelle Thema.
Um schnell ein zu steigen habe ich einen kleinen Lernkurs über PDFbox gemacht um einen Überblick zu bekommen.
http://www.w3ii.com/de/pdfbox/pdfbox_document_properties.html
Das war recht einfach und dabei traten keinerlei Probleme auf.
Endlich mal was auf anhieb klappt, so schien es.
Alle Beipsiele funktionierten auf anhieb und konnte es auch schnell in meinem Projekt integrieren. Leider habe ich derzeit das Problem, das meine Metadaten nicht in eine vorhandene PDF-Aktualisieren möchte.
Dabei lade ich die Vorhandene PDF-Datei ein, setzte die Metadaten, speichere alles und schliesse die Datei. In der IDE werden keine Fehler angezeigt und das Programm läuft auch ohne Fehler durch. Nach dem Öffnen der Datei musste ich feststellen, das die Metadaten nicht geschrieben wurden. Um Fehler in meiner Methode zu finden, habe ich das laden der Datei ausgeklammert.
Ein neues PDFDokument ezeugt, eine Seite eingefügt, die Metadaten geschrieben und gespeichert. Oh Wunder, die PDF-Datei wurde erzeugt inklusive neuer Metadaten?
Java:
// Metadaten hinzufuegen
        try {
            // Laden eines PDF-Dokumentes
            // PDDocument dokument = PDDocument.load(datei);

            PDDocument dokument = new PDDocument();
            PDPage seite = new PDPage();
            dokument.addPage(seite);
          
            // Metadaten Objekt erstellen
            PDDocumentInformation pdfMeta = dokument.getDocumentInformation();

            pdfMeta.setAuthor(verfasser);
            pdfMeta.setTitle(titel);
            pdfMeta.setCreator(ersteller);
            pdfMeta.setSubject(thema);
            // pdfMeta.setCreationDate(datumErst);
            // pdfMeta.setModificationDate(datumAend);
            pdfMeta.setKeywords(stichworte);

            // Speichern des PDF-Dokumentes
            dokument.save(datei);

            // Schließen dess PDF-Dokumentes
            dokument.close();
        }
        catch (IOException fehler) {
            log.info("Die Metadaten konnten nicht geschrieben werden\n" + fehler);
        } // try-catch
Weis jemand ob es Probleme mit vorhandenen PDFs gibt und was man dabei beachten sollte?
Bitte jetzt nicht mit iText kommen, das hatte ich mal, funktionierte auch, aber ich möchte es nicht verwenden. PDFbox scheint ein cooles Tool zu sein, was auch ziemlich einfach aussieht aber funktionieren sollte es schon. :)

Vielen Dank
M
 

Robat

Top Contributor
Kenne mich mit Pdfbox nicht aus was auffällt ist, dass du dir die Metadaten nur holst, nach dem bearbeiten aber nicht setzt.
Es gibt doch bestimmt eine setDocumentInformation(..) Methode mit der du dem document die überarbeiteten Metadaten geben kannst, oder?
 

MiMa

Top Contributor
Das es im Beispiel nicht enthalten war, habe ich angenommen, das alle Informationen mit .save gespeichert werden. Es funktioniert mit einem neu angelegten PDF-Dokument.
Vor dem Speichern habe ich die Zeile eingefügt
Code:
dokument.setDocumentInformation(pdfMeta);
aber leider werden die Metadaten immer noch nicht gespeichert?
 

MiMa

Top Contributor
Habe jetzt mal ein ganz neues Testprogramm geschrieben und die Problematische Datei geladen, Metadaten update gemacht und geschrieben.
Seltsamerweise hat es funktioniert?
Dann muss es wohl woanders liegen!?!
Die Fehler, die nicht angezeigt werden schlucken die meiste Zeit. :(
Ohne Laden des alten PDFs konnten aber alle Metadaten geschrieben werden?
 
Zuletzt bearbeitet:

MiMa

Top Contributor
Ich weis, es ist wirklich seltsam.
Es sind die gleichen codezeilen.
Bei dem Test funktioniert es und in meinem Programm nicht.
Ich habe die Methode aus meine Programm in eine eigene Java Klasse kopiert.
Nur die Stringinhalte angepasst damit alles vorahnden ist und es geht.
Warum denn nun?
Code:
public class PDFmetadatenAktualsieren {

    public static void main(String[] args) throws IOException {

        File quellDatei = new File("N:/PDFbox/056546565.pdf");
        File zielDatei = new File("N:/PDFbox/056546565.pdf");
      
        /*
         * Dokumenteigenschaften einer PDF-Datei
         *  File        Diese Eigenschaft enthält den Namen der Datei.
         *  Title       Mit dieser Eigenschaft können Sie den Titel für das Dokument gesetzt.
         *  Author      Mit dieser Eigenschaft können Sie den Namen des Autors für das Dokument gesetzt.
         *  Subject     Mit dieser Eigenschaft können Sie den Betreff des PDF-Dokuments angeben.
         *  Keywords    Mit dieser Eigenschaft können Sie die Liste der Schlüsselwörter, mit denen wir das Dokument suchen.
         *  Created     Mit dieser Eigenschaft können Sie das Datum für das Dokument erstellt eingestellt.
         *  Modified    Mit dieser Eigenschaft können Sie das Datum für das Dokument geändert gesetzt.
         *  Application Mit dieser Eigenschaft können Sie die Anwendung des Dokuments festgelegt.
        */

        // Laden eines PDF-Dokumentes
        PDDocument dokument = PDDocument.load(quellDatei);
      
        // Metadaten definieren
        String titel        = "Dokumenteigenschaften in PDF-Dateien";
        String verfasser    = "Mike";
        String thema        = "PDFbox Dokumenteigenschaften";
        String stichworte   = "PDFbox, Dokumenteigenschaten";
        Calendar datumErst  = new GregorianCalendar();
        datumErst.set(2015, 11, 5);
        Calendar datumAend  = new GregorianCalendar();
        datumAend.set(2017, 10, 11);
        String ersteller    = "PDFbox";
      
        // Metadaten Objekt erstellen
        PDDocumentInformation pdfMeta = dokument.getDocumentInformation();
      
        // Metadaten hinzufuegen
        pdfMeta.setAuthor(verfasser);
        pdfMeta.setTitle(titel);
        pdfMeta.setCreator(ersteller);
        pdfMeta.setSubject(thema);
        pdfMeta.setCreationDate(datumErst);
        pdfMeta.setModificationDate(datumAend);
        pdfMeta.setKeywords(stichworte);
      
        // Speichern des PDF-Dokumentes
        dokument.save(zielDatei);
      
        // Schließen dess PDF-Dokumentes
        dokument.close();
    } // main
} // PDFmetadatenAktualsieren
 

MiMa

Top Contributor
Die Datei wird ja auch geladen, sonst gäbe es ja eine Fehlermeldung.
Ausserdem wird im Zielverzeichnis auch eine PDF-Datei mit einen anderen Dateinamen erstellt.
Nur stimmen die Metadaten nicht? :(
 

Robat

Top Contributor
So richtig erklären kann ich mir das ehrlich gesagt auch nicht.
Bisher habe ich auch noch nichts mit PDFBox zutun gehabt sondern nur mit iText gearbeitet.
 

MiMa

Top Contributor
Meine güte ich habe es nun endlich geschafft. :):):)
Das ist ja wirklich nicht zu fassen was für eine Auskommentierung für einen Ärger, Frust und Stunden kosten kann.:mad:
Ich habe zuerst ein Tutorial gemacht und das hat ohne Probleme geklappt. Metadaten wurden erstellt. Dann habe ich das gelernte in mein Programm eingebaut und es klappte ebenfalls.
Dann implemetierte ich auch meine gefundenen und errechneten Variablen und danach ging gar nichts mehr. Keine Fehler in der IDE, keine Fehler bei der Programmausführung.
Der Grund dafür war eine Auskommetierung der Datumsangaben. Das habe ich deshalb gemacht weil ich das Datum als String vorliegen habe und der Datentyp der benötigt wurde war Calendar. Also wollte ich vorübergehend folgende Zeilen auskommentieren.
Java:
// Metadaten Objekt erstellen
            PDDocumentInformation pdfMeta = dokument.getDocumentInformation();

            pdfMeta.setAuthor(verfasser);
            pdfMeta.setTitle(titel);
            pdfMeta.setCreator(ersteller);
            pdfMeta.setSubject(thema);
//            pdfMeta.setCreationDate(datumErst);
//            pdfMeta.setModificationDate(datumAend);
            pdfMeta.setKeywords(stichworte);

            // Speichern des PDF-Dokumentes
            dokument.save(rechnungObjekt.getDateiZiel());
Viele Stunden hat es gedauert und einiges an Nerven, Frustration, Ärger und ausprobieren um diese Erkentnis zu erlangen.
Der grosse Übeltäter ist das .setModificationDate.
Wenn dieser nicht enthalten ist, werden keine Metadaten geschrieben.
Alles andere kann man auskommentieren und die Metadaten werden dann teilweise aktualisiert. Aber wenn man .setModificationDate auskommentiert, wird gar nichts aktialisiert.
Also lasse ich alles drin und setze das Datum erst mal vorrübergehen manuell ein bis ich eine Methode gefunden habe einen Datum String in Calendar zu konvertieren.

Dabei wolte ich erst den String manipulieren, dann viel mir ein den String in Date um zu rechnen, und dort Jahr, Monat und Tag heraus zu holen, aber das ist deprecated :mad:.
Vielleicht doch in Millisekunden umrechnen und dann in Calendar??? :(
 

MiMa

Top Contributor
Das Datum liegt deshalb als String vor, weil es mit einem Regulären Ausdruck aus dem Textinhalt extrahiert und noch nicht verarbeitet wurde. Das mache ich jetzt als nächstes, um dann die Methode metaDatenSpeichern abschließen zu können. ;)
Ich suche halt den bestmöglichen und einfachsten Weg das zu machen. Es macht ja keinen Sinn ein Datentyp von Date zu konvertieren, wenn ein Calendar benötigt wird.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
MiMa seltsames Jahr aus Musik Metadaten ? Allgemeine Java-Themen 2
A Metadaten von Bildern auslesen und verändern Allgemeine Java-Themen 5
W audio files metadaten Allgemeine Java-Themen 2
B Suche Paket zum auslesen von Metadaten von Bildern. Allgemeine Java-Themen 4
heart_disease Metadaten aus Flash-Videos auslesen Allgemeine Java-Themen 4
L Best Practice Zip Datei aktualisieren Allgemeine Java-Themen 1
S @version in Kommentaren aktualisieren Allgemeine Java-Themen 10
G jTable aktualisieren?! Allgemeine Java-Themen 1
A Fehler beim Aktualisieren JTable Allgemeine Java-Themen 1
C Threads Variablen in einem Thread Aktualisieren Allgemeine Java-Themen 17
Q Zeit in GUI selbst aktualisieren Allgemeine Java-Themen 5
G Binärbaum aktualisieren Allgemeine Java-Themen 11
2 ArrayList aktualisieren Algorithmus Allgemeine Java-Themen 11
M Applet Oberfläche aktualisieren Allgemeine Java-Themen 5
X Kann JLabel in JFrame nicht aktualisieren Allgemeine Java-Themen 3
Iron Monkey JNLP nach Änderung automatisch aktualisieren Allgemeine Java-Themen 18
T .jar-Datei aus Java heraus aktualisieren Allgemeine Java-Themen 8
M JTree aktualisieren nach Mausklick Allgemeine Java-Themen 12
X Konsole aktualisieren Allgemeine Java-Themen 17
Benji0815 Wert in GUI aktualisieren, Beobachter Allgemeine Java-Themen 9
A ResultSet TableModel aktualisieren? Allgemeine Java-Themen 9
P Umrechnungskurse für Währungen periodisch aktualisieren Allgemeine Java-Themen 2
M Werte im Browser aktualisieren Allgemeine Java-Themen 2
S Model richtig aktualisieren Allgemeine Java-Themen 7
D JLabel aktualisieren Allgemeine Java-Themen 4
B JScrollPane in einer JTable aktualisieren? Allgemeine Java-Themen 9
MQue Konzept- Frage zum Button-Aktualisieren Allgemeine Java-Themen 5
MQue Daten aktualisieren Allgemeine Java-Themen 2
E aktualisieren eines Images Allgemeine Java-Themen 6
G Textfeld alle 0.5 Sekunden aktualisieren Allgemeine Java-Themen 2
A Eclipse und JAR’s aktualisieren Problem. Allgemeine Java-Themen 4
J Problem mit dem aktualisieren der Tabelle Allgemeine Java-Themen 8
M Aktualisieren eines Chatprofils (Anzahl Minuten) Allgemeine Java-Themen 4
G properties datei aktualisieren Allgemeine Java-Themen 4
K JTree Inhalt löschen und Anzeige aktualisieren Allgemeine Java-Themen 13
J Aktualisieren einer Oberfläche Allgemeine Java-Themen 2
T JEditorPane aktualisieren Allgemeine Java-Themen 14
K layer in Jsp Aktualisieren Allgemeine Java-Themen 3
K Datei in JAR-File aktualisieren Allgemeine Java-Themen 11
D desktop nach ändern des hintergrunds aktualisieren Allgemeine Java-Themen 3
M Container aktualisieren. Nur wie? Allgemeine Java-Themen 3
N JList aktualisieren Allgemeine Java-Themen 23
J ZIP-Datei aktualisieren Allgemeine Java-Themen 5
B JComboBox-Eintrag ohne Enter aktualisieren Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben