Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Software>Dokumente in PDFs umwandeln

Dokumente in PDFs umwandeln

hidalgo01.08.1710:30
Wie der Titel schon sagt, möchte ich Dokumente, in meinem Fall alte Mellel-Dokumente in PDFs umwandeln. Ich habe ungefähr 3000 alte Dokumente in einer Ordnerstruktur, die ich umwandeln möchte, da ich Mellel nicht mehr verwende aber sicherstellen möchte, dass ich zukünftig auf die Dokumente zugreifen kann, auch wenn Mellel dereinst nicht mehr auf dem Computer installiert bzw. laufen wird.
Am liebsten wäre mir eine Service-Lösung, die mittels Rechtsklick auf die Datei diese an Ort umwandelt. Wer kann mir da helfen?
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0

Kommentare

jensche01.08.1711:55
Ich denke Automator wird das easy lösen können:



Hast du Acrobat Pro? dann ists noch einfacher.
0
Kuziflu
Kuziflu01.08.1712:07
jensche

Die Idee hatte ich auch. Wird aber nur funktionieren wenn Mellel seinen Beitrag dazu leistet und das Abrufen von Dokumenten durch Automator unterstützt.
0
hidalgo01.08.1713:46
jensche
Ich denke Automator wird das easy lösen können:



Hast du Acrobat Pro? dann ists noch einfacher.
Wahrscheinlich stehe ich irgendwie auf dem Schlauch. Wie hilft dein Link mein Problem zu lösen?
Ja, Acrobat Pro hätte ich.
Aber ich will ja nicht 3000 Dokumente händisch öffnen und als PDF abspeichern sondern gerade das Automator überlassen.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0
subjore01.08.1714:14
Mit Automator kann man Arbeitsprozesse anlegen, die dann automatisch für eine Datei ausgeführt werden können. Man legt einmal händisch an Dokument in dem und dem Programm lösen und die Datei in dem Dateiformat exportieren. Diesen Arbeitsablauf kann man dann schnell auf alle Dateien anwenden.
0
Kuziflu
Kuziflu01.08.1717:32
hidalgo

Wenn du Acrobat zur Hand hast fallen mir adhoc die Stichworte Aktionsassistent und Hot-Folder ein.
Gerade wenn du gelegentlich eine größere Anzahl an Dateien konvertieren willst wäre der Aktionsassistent die erste Wahl.

Wenn du die PDFs für lange Zeit archivieren willst, mach PDF/As draus.
+1
Kuziflu
Kuziflu01.08.1717:53
Hab dir eine entsprechende Aktion erstellt, die du unter dem folgenden Link downloaden kannst.
Bevor du die Aktion startest leg einen Ordner mit den Namen "konvertieren in PDF/A" am Desktop an. Aus diesem holt sich Acrobat die Dateien und konvertiert sie in PDF/As. Die PDFs erhalten den Präfix "konv_" und werden in selbigen Ordner abgelegt.

Da ich kein Mellel habe, hab ich die Aktion mit Word-Dateien getestet. Sollte aber laufen, insofern Acrobat auch Mellel unterstützt.

https://we.tl/AbHlFHOVY2
0
hidalgo01.08.1718:47
@Kuziflu
Erstmal vielen Dank. Werde das ausprobieren, wenn ich keine bessere Lösung finde. Das Problem mit dem Hotfolder ist ja, dass ich jede der 3000 Dateien aus der Ordnerstruktur nehmen muss, in den Hotfolder packen und dann die PDFs wieder in der Ordnerstruktur verteilen muss. Das schreckt mich etwas ab.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0
Kuziflu
Kuziflu01.08.1719:53
hidalgo

Du könntest die Aktion bearbeiten und als Quelle jeden beliebigen Ordner wählen. Auch mehrere Ordner auf einmal können angegeben werden. Ob Unterordner mit einbezogen werden müsstest du vorab testen.
0
MikeMuc01.08.1720:19
Gesucht ist wohl eher eine Aktion oder Script welches einen Ordner und alle Unterordner nach edel-Dateien durchsucht und neben eine Quelldatei das PDF legt.
Scripte, die sich "durch die Ordner" hangeln, finden sich sicher im Internet. So eines müßte man dann entsprechend anpassen auf das es die Funde entsprechend konvertiert.
0
tranquillity
tranquillity01.08.1723:32
Man könnte über die Suchfunktion im Finder quasi einen virtuellen Ordner erhalten, der alle gewünschten Dokumente erhält (anzeigt). Diese dann einfach in den Hotfolder kopieren (mit Auswahl-Taste, damit sie am Originalort bleiben. Sollte doch klappen.
0
hidalgo02.08.1700:23
@MikeMuc
Genau. Leider habe ich bis jetzt nichts Brauchbares im Internet gefunden, wohl auch weil Mellel nicht AppleScript-fähig ist.

@tranquillity
Ja, klar, klappt das. Aber wie verteile ich die neuen PDFs dann wieder in die entsprechenden Ordner?
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0
zolondek02.08.1705:59
@hidalgo
eigentlich bräuchte man doch nur über die rechte Maustaste die Dienste aufrufen und das netterweise von Kuziflu erstellet Script ansteuern.
Die Dateien also alle an ihrem Platz lassen.
Es gibt dort unter Dienste doch einen Unterpunkt: Applescript ausführen...
oder ?
0
Kuziflu
Kuziflu02.08.1711:02
Ich sollte mal klarstellen, dass ich kein AppleScript, keinen Automator-Dienst und auch keinen Hot-Folder hochgeladen hab. Das ist eine Acrobat Aktion. Diese wird manuell über Acrobat gestartet und wandelt Dateien um die an einem bestimmten Ort liegen.
tranquillity
Man könnte über die Suchfunktion im Finder quasi einen virtuellen Ordner erhalten, …
Acrobat kann auf gespeicherte Suchabfragen wie du sie meinst leider nicht zugreifen.
hidalgo
@tranquillity
Ja, klar, klappt das. Aber wie verteile ich die neuen PDFs dann wieder in die entsprechenden Ordner?
Die Acrobat Aktion legt sie wieder im selben Ordner ab.

Unterordner werden übrigens berücksichtigt. Wenn deine Dateien also in einer Ordnerstruktur abgelegt sind, die nur wenige übergeordnete Ordner umfasst, brauchst du die Aktion nur ein paar mal starten. Bzw. kann man auch mehrere Ordner gleichzeitig zur Verarbeitung angeben.
0
hidalgo02.08.1711:06
@ Kuziflu
Super, vielen Dank. Mit welcher Acrobat-Version hast du die Aktion angelegt? Ich habe eine alte Version (CS6) und damit geht es nicht. Muss mir wohl eine aktuelle Testversion besorgen
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0
Hakke02.08.1711:43
Dieses Tool kann das, was du willst, jedoch weiß ich nicht, ob das Dateiformat von Mellel unterstützt wird. Hier gibts eine Demo:
http://rootrisetech.com/product/pdftor
0
MikeMuc02.08.1711:46
hidalgo
@MikeMuc
Genau. Leider habe ich bis jetzt nichts Brauchbares im Internet gefunden, wohl auch weil Mellel nicht AppleScript-fähig ist.

dann hast du falsch gesucht Wenn ich nach "applescript rekursive folders" bei google suche dann finde ich den 2. Treffer schon mal als guten Ansatz um rekursiv durch die Ordner zu wandern.

Aber leider hast du recht, Helle ist tatsächlich nicht scriptfähig

Aber dieses Minscript öffnet die zuvor ausgewählte Datei schon mal in Mellel:
set x to choose file
tell application "Finder"
    open x
end tell

Den Export als PDF müßte man dann mit ein wenig UI-Scripting (so in der Art: Select Menu Export-PDF... Presse return, Select Menu Close Window) trotzdem hinbekommen.

Vielleicht hilft auch einfach mal die Suche nach "applescript mellel export as pdf". Die Trefferliste zeigt mir das du nicht der Erste bist mit diesem Problem.

Den Rest der Lösung mußt du nun selber raus finden
0
hidalgo02.08.1713:39
@ Kuziflu
Leider funktioniert die Acrobat-Aktion nicht mit Mellel.

@Hakke
Auch dein Vorschlag funktioniert nicht mit Mellel-Dokumenten

@MikeMuc
Es nützt herzlich wenig, wenn ich Mellel via AppleScript öffnen, Mellel selber aber nicht steuern kann.
Ich habe eine ältere Mellel-Version, die keine PDFs exportieren kann. Und ja, ich bin nicht der Einzige mit dem Problem. Google findet viele Treffer, die das Problem schildern, aber keinen, der eine Lösung hätte.
UI-Scripting fällt auch aus, da ich dann über die Druckfunktion PDFs erzeugen und für jedes PDF einen eigenen Speicherort angeben müsste. Dann kann ich das auch 3000 Mal von Hand machen.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0
MikeMuc02.08.1714:04
hidalgo
@MikeMuc
Es nützt herzlich wenig, wenn ich Mellel via AppleScript öffnen, Mellel selber aber nicht steuern kann.
Nein, das ist die erste Voraussetzung damit du dann weiterarbeiten kannst. Nur wenn das Dokument in Mellel offen ist kann man per UI-Scripting weiter arbeiten.
hidalgo
UI-Scripting fällt auch aus, da ich dann über die Druckfunktion PDFs erzeugen und für jedes PDF einen eigenen Speicherort angeben müsste. Dann kann ich das auch 3000 Mal von Hand machen.

Warum fällt UI-Scripting über die Druckfunktion deshalb aus? Ist halt ein wenig mühsam aber sollte machbar sein.
Vielleicht reicht es aber auch schon, die Dateien als Word oder RTF-Dateien zu exportieren. Die kann man dann ja weiter verarbeiten. Wobei beides ja auch schon recht "universell" ist
0
hidalgo02.08.1714:09
@MikeMuc
Ist es denn nicht notwendig, beim Drucken als PDF den Speicherort anzugeben? Wie mache ich das beim UI-Scripting?
Export als Word-Dokument geht zwar, ist aber unbrauchbar, da das Layout zerstört wird.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0
hidalgo02.08.1716:03
@MikeMuc
Nach anfänglicher Skepsis bin ich jetzt der Meinung, dass das mit deiner Methode zu schaffen ist.

@alle
Vielen Dank für die vielen Tipps.

Wie geht es jetzt weiter? Bis jetzt habe ich diesen Skript gebastelt.
tell application "Mellel"
    activate
end tell
tell application "System Events"
    tell process "Mellel"
        tell menu bar 1
            tell menu "Ablage"
                click menu item "Drucken …"
            end tell
        end tell
        tell sheet 1 of window 1
            tell menu button "PDF"
                click
                pick menu item "Als PDF sichern …" of menu 1
            end tell
        end tell
        return UI elements of sheet 1 of sheet 1 of window 1
    end tell
end tell

Was jetzt fehlt ist das rekursive Öffnen der betreffenden Dateien (oder kann AppleScript mit einem intelligenten Ordner etwas anfangen) und das Speichern neben der Ursprungsdatei. Der Script müsste also den Pfad zur Datei in eine Variable schreiben und diese Variable beim Speichern wieder einsetzen.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0
hidalgo02.08.1721:50
Habe jetzt noch zwei interessante Skripte gefunden
Das Erste ist ideal, wenn man eine Finder-Auswahl (Smart Folder funktionieren) an Word- und PowerPoint-Dateien in PDF umwandeln will.
Das Zweite öffnet Dateien eines bestimmten Typs durch mehrere Ordnerhierarchien hindurch.
Ich könnte mit beiden Abläufen leben. Mir ist einfach nicht klar, wie ich das mit meinem Skript kombinieren kann.
Vielen Dank für weitere Tipps und Hilfestellungen.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0
MikeMuc02.08.1723:31
Ich hatte dir doch oben schon die Stichworte zur rekursiven Suche gegeben.
Ich würde daher hier https://stackoverflow.com/questions/37149499/applescript-recursively-searching-through-directories und hier mal schauen ob das was taugt.

Ich hab das zwar nicht selber getestet der ich denke das ist ein Anfang. Du bekommst dort sowohl den Pfad zur jeweiligen Datei als auch den Namen.

Deine ersten 3 Zeilen kannst du sparen und die Zeile mit dem return ebenfalls.
Dafür das ganze on eine Funktion mit
on myPrint(thePath, theName)
....
end

verpacken und aus dem rekursiven Scriptteil aufrufen.

Wobei ich gesteh das es etwas knifflig sein wird den richtigen Zielordner über UI-Scripting zu setzen.
Mal als Idee: immer an den selben Ort "drucken" und das Ergebnis nachträglich per Script an die richtige Stelle verschieben (Stichwort der Suche "applescript Finder move file" oder so.

Ansonsten hast du das mit dem UI-Scripting schon ganz gut hin bekommen. Da wirst du den Rest auch schon schaffen. Ggf. einfach in letzter Forum mal anmelden und um Hilfe der richtigen Profis bitten. Wenn du dort mit deinem bisherigen Versuchen nachfragst dann bin ich mir sicher das du am Ende mit einem perfekten Script dastehen wirst.
0
hidalgo03.08.1700:11
Vielen Dank für die Blumen.
Leider habe ich keine Ahnung, wie ich
Dafür das ganze on eine Funktion mit
on myPrint(thePath, theName)
....
end

verpacken und aus dem rekursiven Scriptteil aufrufen.
anpacken soll. Mir fehlt einfach echtes Wissen um AppleScript und habe nicht die Kapazitäten, mich da gross reinzuknien.
Deine verlinkten Beispiele kann ich einfach nicht einordnen, bzw. ich weiss nicht, wie ich das auf meine Anwendung adaptieren kann.

Meine beiden Links (von oben) hätten eigentlich alle Elemente, wenn man nur wüsste, wie sie zusammenfügen.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0
MikeMuc03.08.1710:13
Hallo hidalgo,
in deinem 2. Link ist doch alles drin. Auch wie man eine Funktion erstellen (on FName ... end).
Hier mal alles zusammen kopiert und am Stück, aber ungetestet. Einzig der Teil mit der Verschiebung des gerade erstellten PDFs ist noch offen.

Wenn du jetzt nicht weiter kommt dann melde dich bei http://macscripter.net an und frag dort. Eventuell gibt es ja auch eine mir unbekannte Möglichkeit den Zielort direkt beim Speichern mit anzugeben (denkbar: den kompletten Pfad mit Dateinamen anstatt nur dem Dateinamen angeben).

set baseFolder to choose folder

process_folders("", baseFolder as text, ".mellel")

tell application "Finder" to run application "Mellel"


on doPrint(thePath, theName)
    tell application "System Events"
        tell process "Mellel"
            tell menu bar 1
                tell menu "Ablage"
                    click menu item "Drucken …"
                end tell
            end tell
            tell sheet 1 of window 1
                tell menu button "PDF"
                    click
                    pick menu item "Als PDF sichern …" of menu 1
                end tell
            end tell
        end tell
    end tell
    
    -- jetzt die gespeicherte Datei (wird ja immer am selben Ort gespeichert) in den Zielordner verschieben
    tell application "Finder"
        --move it
    end tell
end doPrint


on process_folders(root, folderNameToProcess, fileExt)
    -- copied from https://stackoverflow.com/questions/3896175/applescript-processing-files-in-folders-recursively
    
    tell application "Finder"
        set theItems to every file of folder (root & folderNameToProcess)
        repeat with theFile in theItems
            copy name of theFile as string to FileName
            repeat with ext in fileExt
                if FileName ends with ext then
                    tell application "Finder" to open theFile
                    -- enthält theFile den Pfad mit Namen oder nur den Pfad?
                    my doPrint(theFile, FileName)
                end if
            end repeat
        end repeat
        
        set theFolders to name of folders of folder (root & folderNameToProcess)
        repeat with theFolder in theFolders
            copy theFolder as string to TheFolderName
            display dialog (folderNameToProcess & TheFolderName & ":")
            try
                process_folders(folderNameToProcess, TheFolderName & ":", fileExt)
            on error errStr number errorNumber
                display dialog errStr
            end try
        end repeat
    end tell
end process_folders
0
hidalgo03.08.1710:26
Hallo MikeMuc

Vielen Dank für deine Arbeit.
Leider stoppt dein Skript nicht nach getaner Arbeit.
Er ist viel eleganter als das, was ich gebastelt habe
set folderToProcess to (choose folder with prompt "Choose Folder::")

tell application "Finder"
    activate
    set fileExt to {".mellel"}
    set theTopFolder to (folderToProcess as alias)
    repeat with EachFile in (get every file of folder (folderToProcess as alias))
        try
            copy name of EachFile as string to FileName
            repeat with ext in fileExt
                if FileName ends with ext then
                    set result to (open EachFile)
                    tell application "System Events"
                        tell process "Mellel"
                            tell menu bar 1
                                tell menu "Ablage"
                                    click menu item "Drucken …"
                                end tell
                            end tell
                            tell sheet 1 of window 1
                                tell menu button "PDF"
                                    click
                                    pick menu item "Als PDF sichern …" of menu 1
                                end tell
                            end tell
                            click button "Sichern" of sheet 1 of sheet 1 of window 1
                            click button 1 of window 1
                        end tell
                        
                    end tell
                end if
            end repeat
        end try
    end repeat
    repeat with EachSubDir in (get every folder of folder theTopFolder)
        try
            repeat with EachFile in (get every file of folder (EachSubDir as alias))
                try
                    copy name of EachFile as string to FileName
                    repeat with ext in fileExt
                        if FileName ends with ext then
                            set result to (open EachFile)
                            tell application "System Events"
                                tell process "Mellel"
                                    tell menu bar 1
                                        tell menu "Ablage"
                                            click menu item "Drucken …"
                                        end tell
                                    end tell
                                    tell sheet 1 of window 1
                                        tell menu button "PDF"
                                            click
                                            pick menu item "Als PDF sichern …" of menu 1
                                        end tell
                                    end tell
                                    click button "Sichern" of sheet 1 of sheet 1 of window 1
                                    click button 1 of window 1
                                end tell
                            end tell
                        end if
                    end repeat
                end try
            end repeat
        end try
    end repeat
end tell

Was bleibt ist die Möglichkeit, entweder die PDFs nach der Erstellung zu verschieben oder den richtigen Pfad direkt mitzugeben.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0
MikeMuc03.08.1710:35
Oh, du ist aber fix...

mir ist nämlich eingefallen das man vor dem "end doPrint" natürlich erstmal das Fenster der aktuellen Datei noch schließen sollte. Sonst stehst du am Ende mit sehr vielen offenen Fenstern da oder irgendwas stürzt ab... Ich bin mir sicher das du das mit dem Fenster schließen noch selber hin bekommst.
Und für die verbleibende Übung würde ich mich wirklich in ein Forum begeben wo mehr "Applescriptler" sind. Füttere die mit deinem Ansatz und ich bin sicher es wird eine Lösung geben.
0
hidalgo03.08.1710:40
Hier wird erklärt, wie man den Pfad eingibt
set the clipboard to "/path/to/your/folder"

tell application "System Events" to tell process "SketchUp" -- I'm guessing on SketchUp name
    keystroke "G" using {command down, shift down}
    delay 1
    keystroke "v" using {command down}
    delay 1
    keystroke return
    delay 1
    keystroke return
    delay 1
end tell
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0
MikeMuc03.08.1712:08
Na ist doch super. Eigentlich genau das was ich vermutet habe.
Testen kannst du das ja erstmal in dem du das "zu Fuß" in deinem Workflow machst. Denke dran das Applescriptpfade die einzelnen Ordner mit ":" trennt, du hier den Pfad (mit Dateiname) aber mit "/" (Posix-Path) einfügen mußt. Dafür gibt es hier eine Anleitung

Zum Testen einfach folgendes Script versuchen
set x to choose file
set y to POSIX path of x
log y
Das Ergebnis dann mal händisch in den Speicherndialog kopieren und schauen ob die Datei korrekt erstellt wurde. Wenn ja, das ganze in das Script oben einbauen...
+1
hidalgo03.08.1716:13
So, ich glaube, ich habe es geschafft. Der Skript sollte auch für andere Programme einsetzbar sein: einfach Dateiendung und Applikation anpassen.

Nochmals vielen Dank an alle, die mitgeholfen haben.

set folderToProcess to (choose folder with prompt "Ordner wählen:")
tell application "Finder"
    activate
    set fileExt to {".mellel"}
    set theTopFolder to (folderToProcess as alias)
    repeat with EachFile in (get every file of folder (folderToProcess as alias))
        try
            copy name of EachFile as string to FileName
            repeat with ext in fileExt
                if FileName ends with ext then
                    set result to (open EachFile)
                    set fileLocation to container of EachFile as alias
                    set myPath to POSIX path of fileLocation
                    tell application "System Events"
                        tell process "Mellel"
                            tell menu bar 1
                                tell menu "Ablage"
                                    click menu item "Drucken …"
                                end tell
                            end tell
                            tell sheet 1 of window 1
                                tell menu button "PDF"
                                    click
                                    pick menu item "Als PDF sichern …" of menu 1
                                end tell
                                keystroke "G" using {command down, shift down}
                                delay 1
                                
                                set value of combo box "Den folgenden Ordner öffnen:" of sheet 1 of sheet 1 to myPath as text
                                click button "Öffnen" of sheet 1 of sheet 1
                            end tell
                            click button "Sichern" of sheet 1 of sheet 1 of window 1
                            click button 1 of window 1
                        end tell
                        
                    end tell
                end if
            end repeat
        end try
    end repeat
    repeat with EachSubDir in (get every folder of folder theTopFolder)
        try
            repeat with EachFile in (get every file of folder (EachSubDir as alias))
                try
                    copy name of EachFile as string to FileName
                    repeat with ext in fileExt
                        if FileName ends with ext then
                            set result to (open EachFile)
                            set fileLocation to container of EachFile as alias
                            set myPath to POSIX path of fileLocation
                            tell application "System Events"
                                tell process "Mellel"
                                    tell menu bar 1
                                        tell menu "Ablage"
                                            click menu item "Drucken …"
                                        end tell
                                    end tell
                                    tell sheet 1 of window 1
                                        tell menu button "PDF"
                                            click
                                            pick menu item "Als PDF sichern …" of menu 1
                                        end tell
                                        keystroke "G" using {command down, shift down}
                                        delay 1
                                        
                                        set value of combo box "Den folgenden Ordner öffnen:" of sheet 1 of sheet 1 to myPath as text
                                        click button "Öffnen" of sheet 1 of sheet 1
                                    end tell
                                    click button "Sichern" of sheet 1 of sheet 1 of window 1
                                    click button 1 of window 1
                                    
                                end tell
                            end tell
                            
                        end if
                    end repeat
                end try
            end repeat
        end try
    end repeat
end tell
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
+1
bmonno03.08.1720:28
hidalgo, MikeMuc

Danke für diesen wunderbar konstruktiven Thread, hat Freude gemacht, ihn zu verfolgen. Vor ein paar Jahren hätte ich so ein Skript gebraucht, als AppleWorks in die Wüste geschickt wurde. Ich habe es irgendwie anders gelöst, es waren auch nicht so viele Dokumente
+2
hidalgo03.08.1720:33
bmonno
hidalgo, MikeMuc

Danke für diesen wunderbar konstruktiven Thread, hat Freude gemacht, ihn zu verfolgen. Vor ein paar Jahren hätte ich so ein Skript gebraucht, als AppleWorks in die Wüste geschickt wurde. Ich habe es irgendwie anders gelöst, es waren auch nicht so viele Dokumente
Ich glaube es gab offizielle Werkzeuge, um AppleWorks-Dateien zu konvertieren. Nur Datenbanken blieben auf der Strecke. Oder konnte man die zu Bento migrieren? Das gibt es leider auch nicht mehr.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0
hidalgo04.08.1700:44
Mist, jetzt dachte ich doch wirklich, ich hätte es geschafft. Leider berücksichtigt der Skript nur die ersten Unterordner. Weiter verschachtelte Dateien werden nicht gefunden.

Wo liegt der Fehler?
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0
MikeMuc04.08.1708:10
Stichwort Rekursion
Ich hab mich schon gewundert warum du bei deine Variante geblieben bist...
Du brauchst halt wie Funktion die sich selber aufraucht um die komplette Ordnerstruktur unterhalb des Basisordners zu durchlaufen.

Versuche noch einmal, mein Beispiel zu verstehen.
0
hidalgo04.08.1708:45
Danke. Wahrscheinlich habe ich deinen Ansatz nicht weiterverfolgt, weil er nicht funktioniert und ich es auch nicht verstehe. Habe mir jetzt die Mühe gemacht und ihn angepasst (der Einfachheit halber und weil ich hier kein Mellel habe, habe ich TextEdit eingesetzt) und habe 3 Probleme:
set baseFolder to choose folder

process_folders("", baseFolder as text, ".txt")

tell application "Finder" to run application "TextEdit"


on doPrint(thePath, theName)
    tell application "System Events"
        tell process "TextEdit"
            tell menu bar 1
                tell menu "Ablage"
                    click menu item "Drucken …"
                end tell
            end tell
            tell sheet 1 of window 1
                tell menu button "PDF"
                    click
                    pick menu item "Als PDF sichern …" of menu 1
                end tell
                keystroke "G" using {command down, shift down}
                delay 1
                
                set value of combo box "Den folgenden Ordner öffnen:" of sheet 1 of sheet 1 to "/Users/urs/Desktop/test/" as text
                click button "Öffnen" of sheet 1 of sheet 1
            end tell
            click button "Sichern" of sheet 1 of sheet 1 of window 1
            click button 1 of window 1
        end tell
    end tell
    (*
    -- jetzt die gespeicherte Datei (wird ja immer am selben Ort gespeichert) in den Zielordner verschieben
    tell application "Finder"
        --move it
    end tell
    *)
end doPrint


on process_folders(root, folderNameToProcess, fileExt)
    -- copied from https://stackoverflow.com/questions/3896175/applescript-proc essing-files-in-folders-recursively
    
    tell application "Finder"
        set theItems to every file of folder (root & folderNameToProcess)
        repeat with theFile in theItems
            copy name of theFile as string to FileName
            repeat with ext in fileExt
                if FileName ends with ext then
                    tell application "Finder" to open theFile
                    -- enthält theFile den Pfad mit Namen oder nur den Pfad?
                    (* set result to (open theFile) *)
                    set fileLocation to container of theFile as alias
                    set myPath to POSIX path of fileLocation
                    
                    my doPrint(theFile, FileName)
                end if
            end repeat
        end repeat
        
        set theFolders to name of folders of folder (root & folderNameToProcess)
        repeat with theFolder in theFolders
            copy theFolder as string to TheFolderName
            display dialog (folderNameToProcess & TheFolderName & ":")
            try
                
                (* process_folders(folderNameToProcess & TheFolderName & ":", fileExt) *)
                process_folders(folderNameToProcess & TheFolderName & ":")
            on error errStr number errorNumber
                display dialog errStr
            end try
        end repeat
    end tell
end process_folders

1. Wo soll ich die Pfadvariable set myPath to POSIX path of fileLocation setzen, die dann hier set value of combo box "Den folgenden Ordner öffnen:" of sheet 1 of sheet 1 to myPath as text aufgerufen wird?
2. Die erste Datei wird zweimal geöffnet
3. Der Skript läuft nicht weiter
tell application "Finder"
    get name of every folder of folder "Macintosh HD:Users:urs:Desktop:test:"
        --> {"test2"}
    display dialog "Macintosh HD:Users:urs:Desktop:test:test2:"
        --> {button returned:"OK"}
    process_folders("Macintosh HD:Users:urs:Desktop:test:test2:")
        --> error number -1708
    display dialog "„Finder“ hat einen Fehler erhalten: Fortfahren nicht möglich: process_folders."
        --> {button returned:"OK"}
end tell

Wie schon gesagt, deine Lösung scheint viel eleganter zu sein, aber auch komplexer zu verstehen.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0
MikeMuc04.08.1713:45
Ok, ein weiterer Versuch.
1. Ersetze die Zeile "on doPrint(thePath, theName)" durch "on doPrint(thePath)"
2. Ersetze die Zeile "my doPrint(theFile, FileName)" durch "my doPrint(myPath)"
3. Ersetze die der Zeile mit der combobox durch " set value of combo box "Den folgenden Ordner öffnen:" of sheet 1 of sheet 1 to thePath
"

Den Kommentar vor "end doPrint" kannst du löschen und dafür einen weiteren Teil mit UI-Scripting einsetzen der dafür sorg das das Fenster wieder geschlossen wird. So in der Art
    tell application "System Events"
        tell process "TextEdit"
            tell menu bar 1
                tell menu "Ablage"
                    click menu item "Schließen"
                end tell
            end tell
        end tell
    end tell


Dann hast du in der Funktion "process_folders" noch einen Fehler eingebaut der im Original so nicht drin war. Die Zeile zwischen try und on error muß
            process_folders(folderNameToProcess, TheFolderName & ":", fileExt)
lauten. Schließlich erwartet die Funktion 3 Parameter. Da kannst du nicht einfach ein Komma durch ein & ersetzen.

Und dann hab ich wohl auch noch einen Fehler in der 2. Zeile verursacht. Die Dateiendung muß in geschweiften Klammern stehen, also so aussehen "process_folders("", baseFolder as text, {".txt"})"

Der Vollständigkeit halber kommt das komplette Script gleich in einem extra Post.
0
MikeMuc04.08.1713:45
set baseFolder to choose folder

process_folders("", baseFolder as text, {".txt"})

tell application "Finder" to run application "TextEdit"


on doPrint(thePath)
    tell application "System Events"
        tell process "TextEdit"
            tell menu bar 1
                tell menu "Ablage"
                    click menu item "Drucken …"
                end tell
            end tell
            tell sheet 1 of window 1
                tell menu button "PDF"
                    click
                    pick menu item "Als PDF sichern …" of menu 1
                end tell
                keystroke "G" using {command down, shift down}
                delay 1
                
                set value of combo box "Den folgenden Ordner öffnen:" of sheet 1 of sheet 1 to thePath
                click button "Öffnen" of sheet 1 of sheet 1
            end tell
            click button "Sichern" of sheet 1 of sheet 1 of window 1
            click button 1 of window 1
        end tell
    end tell
    
    tell application "System Events"
        tell process "TextEdit"
            tell menu bar 1
                tell menu "Ablage"
                    click menu item "Schließen"
                end tell
            end tell
        end tell
    end tell
end doPrint


on process_folders(root, folderNameToProcess, fileExt)
    -- copied from https://stackoverflow.com/questions/3896175/applescript-processing-files-in-folders-recursively
    
    tell application "Finder"
        set theItems to every file of folder (root & folderNameToProcess)
        repeat with theFile in theItems
            copy name of theFile as string to FileName
            repeat with ext in fileExt
                if FileName ends with ext then
                    log {ext, FileName}
                    
                    tell application "Finder" to open theFile
                    -- enthält theFile den Pfad mit Namen oder nur den Pfad?
                    (* set result to (open theFile) *)
                    set fileLocation to container of theFile as alias
                    set myPath to POSIX path of fileLocation
                    
                    my doPrint(myPath)
                end if
            end repeat
        end repeat
        
        set theFolders to name of folders of folder (root & folderNameToProcess)
        repeat with theFolder in theFolders
            copy theFolder as string to TheFolderName
            display dialog (folderNameToProcess & TheFolderName & ":")
            
            try
                process_folders(folderNameToProcess, TheFolderName & ":", fileExt)
                --process_folders(folderNameToProcess & TheFolderName & ":")
            on error errStr number errorNumber
                display dialog errStr
            end try
        end repeat
    end tell
end process_folders
0
hidalgo04.08.1713:59
Super. 2 Probleme gelöst, das Dritte bleibt bestehen.
Der Skript läuft einfach nicht weiter sondern gibt eine Fehlermeldung aus:
tell application "Finder"
    get name of every folder of folder "Macintosh HD:Users:urs:Desktop:test:"
        --> {"test2"}
    display dialog "Macintosh HD:Users:urs:Desktop:test:test2:"
        --> {button returned:"OK"}
    process_folders("Macintosh HD:Users:urs:Desktop:test:", "test2:", {".txt"})
        --> error number -1708
    display dialog "„Finder“ hat einen Fehler erhalten: Fortfahren nicht möglich: process_folders."
        --> {button returned:"OK"}
end tell
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0
hidalgo04.08.1714:21
Jetzt durchläuft der Skript wenigstens den ersten Unterordner. Die nächste Hierarchiestufe wird wieder mit einem Fehler quittiert.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0
MikeMuc04.08.1715:54
OK, folge dem Hinweis in deinem Screenshot. Lesen kannst du doch
Besteht dein Problem dann weiterhin?
0
hidalgo04.08.1717:03
MikeMuc
OK, folge dem Hinweis in deinem Screenshot. Lesen kannst du doch
Besteht dein Problem dann weiterhin?

Ja, ich kann lesen. Ich hatte ja geschrieben, dass der Skript zwar eine Stufe weiterläuft aber dann wieder abbricht.

Ich habe jetzt zwei Varianten mit unterschiedlichen Fehlern:
1. set theItems to files of entire contents of folder (root & folderNameToProcess)
damit läuft der Skript durch, stoppt aber nicht.

2. set theItems to every file of folder (root & folderNameToProcess)
damit bricht der Skript mit Fehler ab

Hast du eine Idee?
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0
hidalgo04.08.1717:25
Ich glaube, ich habe die Lösung gefunden. Den ganzen hier auskommentierten Teil braucht es gar nicht. Oder liegt der Fehler anderswo?
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0
MikeMuc04.08.1717:33
Ja, habe ich.
Hast du das my eingefügt? Ich vermute: Nein.
Und bitte entferne die Zeile mit "display Dialog" vor dem try. Sonst hält das Script jedesmal an wenn es in einen weiteren Ordner hinabsteigt.

Falls doch:
Da scheint wirklich noch ein Fehler irgendwo drin zu sein. Denn wenn man sich die Ausgabe im Scripteditor anschaut dann fehlt bei den Unterordnern "der vordere Teil" des Pfades.
Bitte ersetze die Zeile mit dem my process_folders durch
my process_folders(root & folderNameToProcess, TheFolderName & ":", fileExt)
Die Ergänzung mit "root &" hat hier das Problem gelöst.
0
hidalgo04.08.1717:56
Danke.
Ja, ich hatte das “my” eingefügt. Ich frage mich gerade, warum es geklappt hatte, als ich den ganzen Teil (siehe Screenshot) auskommentiert hatte.

Werde es gerade nochmals mit deinen Korrekturen probieren.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0
MikeMuc04.08.1718:00
Da hat es nur in der "obersten" Ordnereben geklappt. Alles was darunter lag ist ja nicht verarbeitet worden. Das was du da auskommentiert hast ist ja dafür verantwortlich die Unterordner verarbeitet werden
0
hidalgo04.08.1718:03
MikeMuc
Da hat es nur in der "obersten" Ordnereben geklappt. Alles was darunter lag ist ja nicht verarbeitet worden. Das was du da auskommentiert hast ist ja dafür verantwortlich die Unterordner verarbeitet werden
Das war ja das erstaunliche daran. Damit hat es auch die Unterordner berücksichtigt. Aber mit deiner Korrektur läuft es jetzt auch und zwar richtig.

Nochmals Vielen lieben Dank
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0
hidalgo04.08.1718:27
Ich glaube, wir biegen gerade in die Zielgerade ein. Das Skript, unser Skript läuft zwar mit TextEdit hervorragend, Mellel macht aber noch Probleme. Und zwar habe ich zwei Arten von Mellel-Dokumenten (ältere und neuere). Bei den älteren fragt Mellel, ob die Dateien umgewandelt werden sollen.

Beim alten Skript konnte ich dies mit dieser Zeile abfangen
tell application "System Events" to tell (first button whose name is "Bestehende Datei ersetzen") of window 1 of application process "Mellel" to if exists then click

Beim neuen Skript funktioniert das nicht mehr. Wahrscheinlich weil es unprofessionell und quick’n’dirty geschrieben ist. Wie gehört sowas wo hin?
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0
MikeMuc04.08.1718:33
Bitte, ich hoffe du hast jetzt ordentlich was von Applescript gelernt
Aber das es in wirklich mit dem auskommentierten Block in die Unterordner gegangen ist kann ich leider nicht glauben. Wobei: du hast da noch eine Zeile "verbastelt" die ursprünglich anders hieß.
set theItems to files of entire contents of folder (root & folderNameToProcess)

gibt auf einen Schlag alle Dateien aller Ordner aus. Da braucht man dann natürlich die Rekursiv durch die Ordner nicht. Bei richtig großem Datenmengen ist das aber eine Performancebremse und daher ein NoGo.
Im Original stand da nur
"set theItems to files of folder (root & folderNameToProcess)
und das beschränkt die Ausgabe auf alle Dateien und Ordner des vorgegebenen Ordners.

==> auf eigenmächtige Änderungen bitte in Zukunft deutlich hinweisen
0
hidalgo04.08.1718:46
Ich hatte doch hier darauf hingewiesen.

Ich hatte einfach einen anderen Skript gesucht und geschaut, wo sich was unterscheidet. Dass bei der Rekursion etwas gefehlt hatte, ist mir ja nicht aufgefallen.

Ja, ich habe viel gelernt. Problematisch ist nur, dass ich sehr selten mal was brauche und dann wohl das Meiste wieder vergessen habe.

Hoffentlich kannst du mir auch beim letzten Schliff noch helfen.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0
MikeMuc04.08.1719:17
Tja, auch hier kommst du nur mit UI-Scripting weiter. Ich würde den Namen des 1. Buttons des Dialogs abfragen und dann per
If button Name = X then tu dies
if button Name = y then tu das
weiterarbeiten. Bleibt die Frage wie du nach dem öffnen feststellen kannst ob es eine Dialog gibt. Da könntest du vielleicht so vorgehen:
try
get Name of button of ...
if ... then ...
end

Mangels Mellel und unterschiedlich alter Versionen von Melleldateien kann ich dir da leider nicht weiter helfen.

Um Dialoge zu "untersuchen" hab ich ein Programm namens UIElementInspector. Das war / ist mal bei einer XCode Version dabei.
Das kannst aber auch einzeln hier laden. Einfach den Samplecode laden, da ist eine kompilierte Version bei.
0
hidalgo04.08.1720:45
Nochmals vielen Dank. Ich hatte den Code schon. Ich hatte nur vergessen, wieder ein Delay einzubauen, damit der Skript auf das Erscheinen des Fensters wartet:
tell application "System Events"
        tell process "Mellel"
            delay 2
            tell application "System Events" to tell (first button whose name is "Bestehende Datei ersetzen") of (first window of application process "Mellel" whose description is "Dialog") to if exists then click
            
            tell menu bar 1
                        …
Es braucht jetzt etwas mehr Zeit, aber das ist vertretbar, da das eine einmalige Aktion ist. Die ersten richtigen Daten sind schon konvertiert.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.