Automation für Pages Dokumente in PDF

Hallo,

gibt es einen Workaround, der mir folgendes erleichtert?

1.) Ich markiere mehrere Ordner, in denen jeweils ein Pages Dokument liegt.
2.) Dieses Pages Dokument soll nun als PDF in den gleichen Ordner gedruckt werden in dem auch das Original Pages Dokument liegt, aber das Original Pages soll erhalten bleiben

Aktuell mache ich es händisch.
1.) Ordner öffnen
2.) Dokument in Pages öffnen
3.) Drucken als PDF in Devonthink
4.) Den Ordner manuell auswählen wo es landen soll (muss ich ja für jeden Unterordner neu wählen)
5.) Ablegen
6.) Pages Dokument schließen
7.) zurück zu Schritt 1 mit nächstem Ordner.

Aber da ich ja die ganzen Ordner in DT markieren kann und dann meine Pages-Dokumente markieren kann, könnte es doch bestimmt eine Automation mit “Rechtsklick” geben, oder?

Vielleicht könnt ihr mir hier helfen.
Danke :wink:

Hier Using Automator to convert Pages to PDF – ghostotter ist sowas beschrieben.

OK, das hilft schon mal etwas, aber dafür müssen die Files im Finder-Folder liegen, sehe ich das richtig?

Geht das auch mit DevonThink-Folders?

Es gibt eigentlich keinen “DEVONthink Folder”. Wenn Du mal bei einem Datensatz rechts im Inspektor guckst, wirst Du das Feld “Pfad” sehen (ausgegraut, weil man das nicht ändern kann). Dort ist der relative Pfad zu der jeweiligen Datei hinterlegt, also innerhalb der aktiven Datenbank.
Die Datenbank (z.B. “MeineDaten.dtBase2”) ist auch nur ein Ordner. Den Pfad dahin siehst Du, wenn Du Dir die Datenbank-Eigenschaften via Kontextmenü anzeigen lässt.

ACHTUNG: Das sieht zwar aus wie ein normaler Folder, aber Du darfst dadrin absolut nie gar nicht irgendwie rumfummeln! Nichts verschieben, nichts umbenennen, nichts reinwerfen!

Das alles für Dokumente, die in DT importiert wurden. Für indizierte Dokumente ist sowieso klar, dass sie per Finder zugänglich sind.

Grob gesprochen, sollte das bei der verlinkten Webseite wiedergegebene Script für DT so ähnlich aussehen:

tell application id "DNtp" 
set theRecords to selected records
repeat with r in theRecords
  set thePath to path of r
  tell application "Pages"
  set theDoc to open thePath
  set theDocName to name of theDoc
  set theName to (characters 1 thru -7 of theDocName) as text
  export theDoc as PDF to file ((theFilesFolder & theName & ".pdf") as text)
  close theDoc
  end tell
end repeat
end tell

Ich bin aber keine AppleScript-Fachperson, vermutlich könnte @cgrunenberg oder @pete31 mehr und Besseres dazu sagen. Ich würde den export-Teil so ändern, dass die PDF-Datei nach /tmp geschrieben wird und die Dateien danach gesammelt nach DT importieren. Oder so.

Ja das ist mir bewusst, deswegen hatte ich ja geschrieben das es ja eine Finder-Aktion ist und keine DT Aktion.

Im Grunde genommen will ich mehr oder weniger genau das gleiche wie hier:

Nur halt mit Pages zu PDF und nicht mit Word zu PDF.

was ist dir bewusst? Ohne Kontext ist das nicht zu verstehen.

Du hast zwei Scripts, von denen jedes etwa die Hälfte von dem tut, was du brauchst. Beide Hälften zusammensetzen, ggfs kleinere Änderungen, und es sollte funktionieren. Hast du das versucht, und es funktioniert etwas nicht?

Es ist mir bewusst, dass ich innerhalb der DT Datenbank nichts ändern kann, bzw. nichts ändern darf. Deswegen hatte ich ja geschrieben das es eine Finder-Aktion ist und keine DT-Aktion die auf die DT-Folderstruktur greift. Das habe ich schon vorab kapiert, daher habe ich auf deinen Warnhinweis mit “Es ist mir bewusst” reagiert.

Ich kann zwar mit Applescript umgehen, und habe auch schon manche Dinge geschafft, aber ich bin kein Profi darin. Um mein Skript lauffähig zu bekommen würde ich mit Sicherheit 2 Wochen Google nutzen und zusammenschustern und es vielleicht irgendwie hinbekommen. Wäre ich ein Profi darin, dann hätte ich das Topic nicht eröffnet, da ich es selbst könnte, was ich aber nicht kann.

Es wäre sicherlich hilfreich wenn @cgrunenberg oder @pete31 hier helfen könnte. Für die wäre das bestimmt eine Sache von wenigen Minuten und würde sicherlich stabiler und saver laufen als wie ich es jemals mit meinem Laien-Verständnis hinbekommen bzw. schaffen würde.

Dieses Skript hilft evtl. weiter:

Danke Christian,

ich bekomme leider ein “missing value” als Ausgabe. Ein PDF erscheint in DevonThink leider auch nicht.

Er öffnet das Pages und schließt es, dann kommt missing value

So, habe jetzt den Fehler nach über 3 Stunden gefunden. Also das “missing value”

es lag am “trash” und das habe ich jetzt auf “desktop Folder” geändert, jetzt geht es.

Im Code ziemlich weit oben:

set theFolder to path to desktop folder as string

Aber ich habe noch zwei Probleme:

  1. Problem, das müllt mir meinen Schreibtisch voll, da nach dem Konvertieren diese zwar im DevonThink sind, aber auf dem Desktop liegen bleiben. Das müsste noch weg.

  2. Problem, er nimmt den Dateinamen, leider den “echten” Dateinamen.
    Ich meine damit, dass ich in allen Unterordnern die gleichen Namen der Dokumente habe. In meinem Fall ist es eine Klientenliste mit A-Z und Unterordnern. Das Dokument lautet bei allen gleich. z.b. “2021-02-24 individuelle Hinweise zu Ihrem Betrieb bezüglich der Gefahrenlage.pages”

DevonThink legt diese zwar in seiner Ordnerstruktur ab, aber innerhalb der .dtBase2 liegen durchaus diese Dokumente in einem Ordner und nennen sich dann:

2021-02-24 individuelle Hinweise zu Ihrem Betrieb bezüglich der Gefahrenlage.pages
2021-02-24 individuelle Hinweise zu Ihrem Betrieb bezüglich der Gefahrenlage-1.pages
2021-02-24 individuelle Hinweise zu Ihrem Betrieb bezüglich der Gefahrenlage-1-1.pages
2021-02-24 individuelle Hinweise zu Ihrem Betrieb bezüglich der Gefahrenlage-2.pages
2021-02-24 individuelle Hinweise zu Ihrem Betrieb bezüglich der Gefahrenlage-2-1.pages
2021-02-24 individuelle Hinweise zu Ihrem Betrieb bezüglich der Gefahrenlage-2-2.pages
2021-02-24 individuelle Hinweise zu Ihrem Betrieb bezüglich der Gefahrenlage-3.pages

und so weiter.
Nach dem Konvertieren liegen die dann in den Klientenordner halt entsprechend wie folgt:
2021-02-24 individuelle Hinweise zu Ihrem Betrieb bezüglich der Gefahrenlage.pdf
2021-02-24 individuelle Hinweise zu Ihrem Betrieb bezüglich der Gefahrenlage-1.pdf
2021-02-24 individuelle Hinweise zu Ihrem Betrieb bezüglich der Gefahrenlage-1-1.pdf
2021-02-24 individuelle Hinweise zu Ihrem Betrieb bezüglich der Gefahrenlage-2.pdf
2021-02-24 individuelle Hinweise zu Ihrem Betrieb bezüglich der Gefahrenlage-2-1.pdf
2021-02-24 individuelle Hinweise zu Ihrem Betrieb bezüglich der Gefahrenlage-2-2.pdf
2021-02-24 individuelle Hinweise zu Ihrem Betrieb bezüglich der Gefahrenlage-3.pdf

Schöner wäre es wenn es nur als
2021-02-24 individuelle Hinweise zu Ihrem Betrieb bezüglich der Gefahrenlage.pdf
innerhalb von DevonThink auftaucht, wie es in der dtBase2 abgelegt wird, wäre mir dabei völlig egal.

Könnten Sie den Code des aktuellen Skriptes eventuell posten? Das macht es leichter, der Ursache auf den Grund zu gehen.

Der Ursprung war Ihr Code

Diesen haben ich bezüglich dem “missing value” von “trash” auf “desktop folder” geändert.

set theFolder to path to desktop folder as string

Und inzwischen habe ich auch einen Weg gefunden nicht den Dateinamen zum Speichern, sondern den DT-Namen zu verwenden, und das mit dem Löschen des konvertierten Files habe ich auch gelöst.

Hier mein Skript was jetzt funktioniert. Vielleicht kann man es noch optimieren (Performance oder von den Code-Zeilen) aber es läuft zumindest. :slight_smile:


– Convert Pages documents to PDF
property extensionList : {“pages”}
tell application id “DNtp”
set theSelection to the selection
set theFolder to path to desktop folder as string --Schreibtisch als Pfad für die Konvertierung
repeat with theRecord in theSelection
set thePath to (path of theRecord) as POSIX file
set theFile to thePath as alias
set theRecordName to name of the content record --Dateiname aus DevonThink
tell application “Finder”
set ext to name extension of theFile
if ext is in extensionList then
set theName to name of theFile --Dateiname aus Finder-Eintrag
set theFilename to characters 1 through ((length of theName) - (length of ext) - 1) of theName as string
set theFilename to theRecordName & “.pdf” --Verwenden des DT-Namens für die Speicherung
set theConvertedPath to (theFolder & theFilename as string)
tell application “Pages”
set theDoc to open theFile
export theDoc as PDF to file theConvertedPath
close theDoc
end tell
tell application id “DNtp” to import POSIX path of theConvertedPath to (parent 1 of theRecord)
if exists theConvertedPath then tell application “Finder” to delete theConvertedPath --löschen des konvertierten Files vom Schreibtisch
end if
end tell
end repeat
end tell

Das funktioniert hier einwandfrei:

-- Convert Pages documents to PDF

property extensionList : {"pages"}

tell application id "DNtp"
	set theFolder to path to desktop folder as string --Schreibtisch als Pfad für die Konvertierung
	repeat with theRecord in selected records
		set thePath to (path of theRecord) as POSIX file
		set theFile to thePath as alias
		set theName to filename of theRecord --Dateiname aus DevonThink
		tell application "Finder"
			set ext to name extension of theFile
			if ext is in extensionList then
				set theFilename to characters 1 through ((length of theName) - (length of ext) - 1) of theName as string
				set theFilename to theFilename & ".pdf"
				set theConvertedPath to (theFolder & theFilename as string)
				tell application "Pages"
					set theDoc to open theFile
					export theDoc as PDF to file theConvertedPath
					close theDoc
				end tell
				tell application id "DNtp" to import POSIX path of theConvertedPath to (parent 1 of theRecord)
				if exists theConvertedPath then tell application "Finder" to delete theConvertedPath --löschen des konvertierten Files vom Schreibtisch
			end if
		end tell
	end repeat
end tell

Wie genau starten Sie denn das Skript? Im Skripteditor oder über DEVONthinks Skript-Menü?

1 Like

Yes, now it works perfectly.

The script from yesterday, which you had posted, had unfortunately not worked.
1.) Missing value because of the trash folder as path.
2.) The filename used the Finder name for saving and not the DevonThink name
3.) The converted file was not deleted again

But with my modifications that I revised tonight, it now works exactly as I want it to.
1.) Change of trash folder to desktop folder
2.) Reading the DevonThink name and using it to save the converted file.
3.) Delete the converted file from the desktop folder.

You can start the script via Applescript or directly via DevonThink. Both options now work.

@cgrunenberg
But I still have one problem!

When I start the script via DevonThink, I can only select one file. But if I mark several folders/locations and select the Pages documents in them, then nothing happens when I call it up via DevonThink.

Here he still has a problem with reading the DT name “content Record”.

Bildschirmfoto 2021-02-25 um 09.44.41

And via the Script editor?

Sorry for the tags.

I saw too late that you had a small change in the code. Yes this change now works …

Oh my god, thank you :smiley:

Both ways - Applescript and DevonThink works :wink:

Oh, no, sorry @cgrunenberg

I have to interrupt again.

If I select several files from the different locations. Then it stops after the 1st file.

DevonThink reports no error, if I call the script via Applescript, then this error comes up:
Bildschirmfoto 2021-02-25 um 10.02.57

DevonThink refreshes the view after the 1st conversion and the 1st import, so that the marked files are no longer marked. Presumably the problem is that it then no longer has a selection.

Before the start:
Bildschirmfoto 2021-02-25 um 10.04.13

After the first conversion:
Bildschirmfoto 2021-02-25 um 10.04.49

Does it work after replacing the above code with…

set theSelection to the selection
repeat with theRecord in theSelection
1 Like