Import Erstellungsdatum nicht gleich Erstellungsdatum

Hallo Zusammen,

wenn ich ein PDF mit Erstellungsdatum 1.1.2014 importiere speichert Devonthink die Datei mit Erstellungsdatum = Importdatum ab. Also habe ich dann z.b. eine Datei die ich heute importiere mit Erstellungsdatum 19.11.2024 und nicht 1.1.2014.
Wenn ich die Datei im Finder anzeige steht dort als Erstellungsdatum 1.1.2014 aber wieso importiert Devonthink das falsch?
Ich bin leider mit meinem Latein am Ende aber vielleicht habt ihr eine Idee.

Gruß
bytec

Welches interne Erstellungsdatum hat denn das PDF-Dokument? S. Info-Fenster in der Vorschau.app

es hat das Datum 17.1.2014 laut Vorschau.app

Handelt es sich wirklich um das Erstellungs- oder um das Änderungsdatum, das nach dem Import nicht stimmt? Bildschirmfotos der Angaben aus dem Finder, aus der Vorschau.app und aus DEVONthink wären zum Vergleich hilfreich.


Es ist das Erstellungsdatum was bei Vorschau auf 2014 steht und dann in DevonThink auf 2021

Danke! Ein Bildschirmfoto der entsprechenden Angaben aus dem Finder wäre noch hilfreich, insbesondere des Erstellungsdatums. Die Vorschau.app zeigt nämlich das interne Erstellungsdatum des PDF-Dokuments an, das nicht zwingend identisch zum entsprechenden Datum der Datei sein muss.

Ok jetzt sehe ich es auch das Erstellungsdatum der Datei ist das was DEvonthink übernimmt. Kann man da nicht das interne Erstellungsdatum der PDF selber als Sortierung bei DT nehmen.

Oder gibt es ein Apple Script was das kann.

Es gibt hierfür eine versteckte Einstellung UsePDFDocumentDates, s. Hilfe > Appendix > Hidden Preferences. Allerdings beeinflusst diese Einstellung nur den Import, d.h. die Dateien müssten erneut importiert werden.

ok danke. Ein Script was das nachträglich kann hat nicht zufällig jemand zur Hand?

Sowas hier?

ObjC.import('PDFKit');
(() => {
  const app = Application("DEVONthink 3");
  const rec = app.getRecordWithUuid('x-devonthink-item://DEAAB915-A03F-4403-85E7-4550550FBA72');
  const path = rec.path();
  const PDFDoc = $.PDFDocument.alloc.initWithURL($.NSURL.fileURLWithPath($(path)));
  const attributes = PDFDoc.documentAttributes.js;
  rec.creationDate = attributes.CreationDate.js;
})()

Das ist nur ein Beispiel für einen festen Datensatz aus meiner Datenbank. Für beliebige Datensätze könnte man eine Smartgroup basteln und dann den wesentlichen Script-Code in

ObjC.import('PDFKit');
function performsmartrule(records) {
  records.forEach(rec =>{
     path = rec.path;
     …
     rec.creationDate = attributes.CreationDate.js
  }
)

packen.

So ich habe mich eine Weile mit ChatGPT rumgeschlagen und damit ein für mich gutes Ergebnis erzielt.

Ich hänge das Script unten an falls es jemand brauchen kann. Damit es funktioniert muss das tool EXIFTOOL installiert werden

brew install exiftool

Dann im Script evtl. den Path von exiftool anpassen.

Ich habe das Script immer aus dem Scripteditor gestartet. Also erst Dateien in DevonThink markieren und dann das Script starten.
Dabei kann man sehen ob es evtl. Fehler gibt.

tell application "DEVONthink 3"
	-- Alle markierten Dateien abrufen
	set selectedItems to selection
end tell

repeat with selectedItem in selectedItems
	tell application "DEVONthink 3"
		-- Dateipfad abrufen
		set filePath to (get path of selectedItem)
	end tell
	
	try
		-- ExifTool ausführen, um das Erstellungsdatum zu extrahieren
		tell current application
			set createDateRaw to do shell script "/opt/homebrew/bin/exiftool -CreateDate '" & filePath & "'"
			
			-- Datum bereinigen: Nur das Datum extrahieren
			set createDate to do shell script "echo '" & createDateRaw & "' | grep -oE '[0-9]{4}:[0-9]{2}:[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}'"
		end tell
		
		-- Überprüfen, ob das Datum erfolgreich extrahiert wurde
		if createDate is "" then error "Datum konnte nicht extrahiert werden."
		
		-- Datum ins AppleScript-Format konvertieren
		set AppleScript's text item delimiters to {" ", ":"}
		set dateParts to text items of createDate
		set theYear to item 1 of dateParts
		set theMonth to item 2 of dateParts
		set theDay to item 3 of dateParts
		set theHour to item 4 of dateParts
		set theMinute to item 5 of dateParts
		set theSecond to item 6 of dateParts
		
		set theDate to (current date)
		set year of theDate to theYear
		set month of theDate to theMonth
		set day of theDate to theDay
		set time of theDate to (theHour * hours + theMinute * minutes + theSecond)
	on error errMsg
		tell application "DEVONthink 3"
			display alert "Fehler beim Verarbeiten der Datei" message filePath & return & errMsg as critical
		end tell
		set theDate to missing value -- Wenn ein Fehler auftritt, überspringen
	end try
	
	-- Erstellungsdatum setzen, wenn kein Fehler aufgetreten ist
	if theDate is not missing value then
		tell application "DEVONthink 3"
			set creation date of selectedItem to theDate
		end tell
	end if
end repeat

tell application "DEVONthink 3"
	-- Dialog anzeigen, wenn alle Dateien verarbeitet wurden
	display alert "Verarbeitung abgeschlossen" message "Alle ausgewählten Dateien wurden erfolgreich verarbeitet." as informational buttons {"OK"} default button "OK"
end tell

Wow. Zig mal längerer Code und dann braucht man auch noch ein externes Tool.
Aber klar, wenn es von ChatGPT kommt, muss es ja gut sein.
Warum fragst du überhaupt hier, wenn dich die Antwort gar nicht interessiert?

ganz ruhig.
Hab nirgendwo behauptet das ChatGPT gut ist hat ewig gedauert bis es lief.

Konnte aber mit deinen Code Schnipseln nix anfangen da ich nicht programmieren kann.
Wollte dann auch hier keinen weiter belästigen und habe es mit ChatGPT versucht.

Ich bin ruhig. Aber ich finde es unhöflich, andere um Hilfe zu bitten und dann noch nicht mal danke zu sagen, wenn dir jemand hilft. Oder zu fragen, wenn du Fragen dazu hast.

ChatGPT macht halt das, was es immer tut: irgendwas aus dem Netz zusammensuchen und irgendwie aneinanderpappen. Im besten Fall läuft der Code. Aber schön oder effizient oder ein gutes Beispiel ist er nicht. Warum ihn also posten?

Sorry das mit dem danke an dich ist mir echt durchgegangen. Da geb ich dir recht ist nicht meine Art.
Ich dachte nur als ich den Code (JavaScript? ) gesehen habe auweia das bekomme ich eh nicht hin.
Nächstes mal frage ich nach.

Klar habe ich auch gemerkt das ich zig mal probiert habe bis es lief. Das Hauptproblem war das verschiedene Datumsformat der ganzen PDFs.
Aber gut es hat schlussendlich für mich funktioniert und wollte es nur teilen falls es wer anders auch brauchen kann.
Auch wenn ich es jetzt durch habe würde ich auch gerne deinen Code mal testen aber ich wüsste gar nicht wie ich den starten soll.

Na, im ScriptEditor. Oben links “Javascript” statt “AppleScript” einstellen und im ersten Script die x-devonthink URL durch eine aus deine Datenbank ersetzen (Kontextmenü “Verweis kopieren” beim gewünschten PDF).

Das ist für eibe einzelne Datei. Für alle ausgewählten muss man den Code minimal ändern.

Danke teste ich morgen mal. Was müsste denn im Code anders sein das ich mehrere auswählen kann.

Hab ich echt übersehen das man das umschalten kann.

Das müsste so aussehen:

ObjC.import('PDFKit');
(() => {
  const app = Application("DEVONthink 3");
  app.selectedRecords().forEach(rec => {
    const path = rec.path();
    const PDFDoc =  
      $.PDFDocument.alloc.initWithURL($.NSURL.fileURLWithPath($(path)));
    const attributes = PDFDoc.documentAttributes.js;
    rec.creationDate = attributes.CreationDate.js;
  })
})()
1 Like

Danke teste ich morgen mal.

Danke @chrillek das Script funktioniert perfekt. Sorry nochmal das ich nicht direkt nachgefragt habe.

1 Like