Dado una ruta de archivo, es necesario girar todas las páginas de un PDF en esa ruta de archivo con nada que no está incluido en macOS. La envoltura para esto será AppleScript, por lo que también tengo acceso a la línea de comandos y, por tanto, todos los lenguajes instalados por defecto con macOS, pero nada que requiera brew
o, por ejemplo, Python pip
.
Respuesta
¿Demasiados anuncios?A mi conocimiento macOS no tiene uno nativo de la línea de comandos de Unix ejecutable que puede girar todas las páginas en un PDF (manteniendo el texto base basada en el texto). sip
puede girar una sola página PDF sin embargo el resultado PDF es un encapsulado de imagen, no de texto si era el texto base para empezar. También, no estoy seguro si hay una manera con solo llano de AppleScript, otras, a continuación, a través de la interfaz de usuario de secuencias de comandos el valor predeterminado de vista previa de la aplicación, sin necesidad de ir a AppleScriptObjC (Cacao-AppleScript) y / o Python, etc.
El uso de terceros utilidades de línea de comandos es probablemente el más fácil, pero dijo que tiene que ser hecho usando sólo lo que es un defecto de la parte de macOS. Así que, voy a ofrecer un AppleScript solución que utiliza la interfaz de usuario de secuencias de comandos el valor predeterminado de vista previa de la aplicación, que puede ser utilizado en el evento de que no hay otra manera con AppleScriptObjC o sin utilidades de terceros, etc.
Esta solución, como el que ofrece (y código), asume que la vista previa es el valor predeterminado de la aplicación de PDF de los documentos y la utiliza para girar todas las páginas en el PDF del documento. Es también el programa de instalación como de Automator flujo de trabajo. (Aunque hay otras maneras de incorporar el AppleScript código que se muestra a continuación).
En primer lugar, en el Finder, haga una copia de la meta PDF documentos y trabajar con ellos.
En Automator, crear un nuevo flujo de trabajo de documentos, la adición de las siguientes acciones:
-
Obtener Especificado Buscador De Artículos
- Agregar el copiado de destino PDF documento a esta acción.
-
Ejecutar Secuencias De Comandos De AppleScript
- Reemplace el código por defecto con el código de abajo:
AppleScript código:
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
Notas:
- Como este script utiliza la interfaz de usuario de secuencias de comandos, cuando se ejecuta desde Automator (o el Editor de secuencias de Comandos), la aplicación de corriente debe ser añadido a Preferencias del Sistema > Seguridad Y Privacidad > Accesibilidad a fin de ejecutar correctamente. Guarda como una aplicación, la aplicación guardada sería necesario añadir.
- También con la interfaz de usuario de secuencias de comandos, el valor de la
delay
comandos pueden necesitar ser modificados para su uso en el sistema (y / o adicionaldelay
comandos añadidos como apropiado, aunque en el caso adicionaldelay
comandos no debe ser necesario). Debe ir sin decir, sin embargo, esta prueba en una serie de documentos para cerciorarse primero de que el valor establecido parathisLong
funciona en su sistema. En mi sistema esta trabajado como codificados. - Cuando el uso de secuencias de comandos de interfaz de usuario de esta manera, una vez que la tarea se ha iniciado, uno debe abandonar el sistema por sí solo, y dejar que se termine de procesar los archivos. Tratando de multi-tarea sólo se establece el foco de la tarea a la mano y hacer fallar.
-
Si usted necesita para girar más de una hora, agregar adicional
theRotation as text,
para:repeat with thisKey in {"a", theRotation as text, "s"} -- # {Select All, Rotate Direction, Save}
Ejemplo:
repeat with thisKey in {"a", theRotation as text, theRotation as text, "s"}