4 votos

¿Cómo puedo rotar mediante programación todas las páginas en un PDF con herramientas nativas de macOS?

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 .

1voto

user3439894 Puntos 5883

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 adicional delay comandos añadidos como apropiado, aunque en el caso adicional delay 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 para thisLong 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"}
    

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X