A mia conoscenza macOS non ha nessun eseguibile nativo Unix a riga di comando che può ruotare tutte le pagine in un PDF (mantenendo basati i testi basati sul testo). sip
può ruotare una singola pagina PDF tuttavia il PDF risultante è un'immagine incapsulata , non testo se era una base di testo per cominciare. Inoltre, non sono sicuro che ci sia un modo con solo semplice AppleScript , poi tramite UI Scripting il predefinito < strong> Anteprima , senza andare a AppleScriptObjC ( Cocoa-AppleScript ) e o Python , ecc.
Utilizzare le utilità della riga di comando di terze parti è probabilmente la più semplice, ma hai detto che deve essere fatto solo usando ciò che è una parte predefinita di macOS . Pertanto, offrirò una soluzione AppleScript che utilizza UI Scripting l'applicazione predefinita Anteprima , che può essere utilizzata nel caso in cui non ci sia un altro modo con AppleScriptObjC o senza utilità di terze parti , ecc.
Questa soluzione, come offerta (e codificata), presuppone che Anteprima sia l'applicazione predefinita per i documenti PDF e la usi per ruota tutte le pagine nel documento PDF . È anche configurato come un Automator . (Sebbene ci siano altri modi per incorporare il codice di AppleScript mostrato sotto.)
Innanzitutto, in Finder , crea una copia dei documenti PDF di destinazione e lavora con quelli.
In Automator , crea un nuovo documento workflow , aggiungendo le seguenti azioni :
-
Trova elementi del Finder specificati
-
Aggiungi il documento di destinazione PDF copiato a questa azione .
-
Esegui script AppleScript
-
Sostituisci il codice predefinito con il codice sotto:
codice AppleScript :
on run {input}
set thisLong to 0.25 -- # The value of 'thisLong' is decimal seconds delay between keystrokes, adjust as necessary.
set theRotation to "r" -- # Valid values are 'l' or 'r' for Rotate Left or Rotate Right.
set theViewMenuCheckedList to {}
set theMenuItemChecked to missing value
repeat with thisItem in input
tell application "Finder" to open file thisItem -- # By default, in this use case, the PDF file will open in Preview.
delay 1 -- # Adjust as necessary. This is the only 'delay' not defined by the value of 'thisLong'.
tell application "System Events"
perform action "AXRaise" of window 1 of application process "Preview" -- # Just to make sure 'window 1' is front-most.
delay thisLong
-- # Ascertain which of the first six 'View' menu items is checked.
set theViewMenuCheckedList to (value of attribute "AXMenuItemMarkChar" of menu items 1 thru 6 of menu 1 of menu bar item 5 of menu bar 1 of application process "Preview")
repeat with i from 1 to 6
if item i in theViewMenuCheckedList is not missing value then
set theMenuItemChecked to i as integer
exit repeat
end if
end repeat
-- # Process keystrokes based on which 'View' menu item is checked.
-- # This is being done so the subsequent keystroke ⌘A 'Select All'
-- # occurs on the 'Thumbnails', not the body of the document.
if theMenuItemChecked is not 2 then
repeat with thisKey in {"2", "1", "2"}
keystroke thisKey using {option down, command down}
delay thisLong
end repeat
else
repeat with thisKey in {"1", "2"}
keystroke thisKey using {option down, command down}
delay thisLong
end repeat
end if
repeat with thisKey in {"a", theRotation as text, "s"} -- # {Select All, Rotate Direction, Save}
keystroke thisKey using {command down}
delay thisLong
end repeat
keystroke theMenuItemChecked as text using {option down, command down} -- # Resets the 'View' menu to the original view.
delay thisLong
keystroke "w" using {command down} -- # Close Window.
end tell
end repeat
end run
Note:
- Poiché questo script utilizza UI Scripting , quando viene eseguito da Automator (o Script Editor ), l'esecuzione l'app deve essere aggiunta a Preferenze di sistema > Sicurezza & Privacy > Accessibilità per eseguire correttamente. Salvato come applicazione , l'applicazione salvata dovrebbe essere aggiunta.
- Anche con UI Scripting , potrebbe essere necessario modificare il valore dei comandi
delay
per l'uso sul tuo sistema (eo%% aggiuntivo% comandi aggiunti come appropriato, sebbene nel caso non siano necessari ulteriori delay
comandi ). Dovrebbe essere ovvio, tuttavia, prima prova questo su un set di alcuni documenti per assicurarti che il valore impostato per delay
funzioni sul tuo sistema. Sul mio sistema questo ha funzionato come codificato.
- Quando si utilizza UI Scripting in questo modo, una volta avviato l'attività, è necessario lasciare il sistema da solo e lasciare terminare l'elaborazione dei file. Se provi a eseguire più task, imposterai l'attenzione solo sull'attività in corso e causerà il fallimento.
-
Se devi ruotare più di una volta, aggiungi thisLong
aggiuntivo a:
repeat with thisKey in {"a", theRotation as text, "s"} -- # {Select All, Rotate Direction, Save}
Esempio:
repeat with thisKey in {"a", theRotation as text, theRotation as text, "s"}