Öffnen einer bestimmten Seite in der Mac-Vorschau vom Terminal aus

Wie kann ich den open filename.pdfBefehl so ändern, dass ich eine gewünschte Seitennummer direkt öffnen kann, ohne nach unten scrollen zu müssen.

Antworten (1)

Leider hat der openBefehl keine Option , um an die Vorschau zu übergeben, um ihm mitzuteilen, dass er zu einer bestimmten Seite gehen soll. Darüber hinaus verfügt Preview nicht über ein AppleScript-Wörterbuch, um das Skripten einer Lösung zu vereinfachen, dies ist jedoch nicht unmöglich. Das folgende Bash - Skript benötigt zwei Argumente , den Dateinamen des zu öffnenden Dokuments und die Seitenzahl , zu der gewechselt werden soll . Beachten Sie, dass der vollständig qualifizierte Pfadname verwendet werden muss, wenn sich die zu öffnende Zieldatei nicht im Arbeitsverzeichnis von Terminal befindet.

Sie müssen eine Datei erstellen, in die dieser Code eingefügt und ausführbar gemacht werden kann . Es sollte sich in einem Verzeichnis befinden , das sich in der befindet $PATH, andernfalls müssen Sie, um es zu verwenden, den vollständig qualifizierten Pfadnamen zur ausführbaren Datei angeben oder ./executableif im Arbeitsverzeichnis der ausführbaren Datei in Terminal verwenden.

Verwenden Sie für dieses Beispiel das Standard-Terminal, das das eigene Home-Verzeichnis öffnet:

touch OpenToPage
open OpenToPage

Kopieren Sie nun den Code und fügen Sie ihn aus dem Abschnitt Code: unten in das geöffnete Dokument ein, speichern Sie es und schließen Sie es dann.

Während Sie sich noch im Terminal befinden, machen Sie die Datei ausführbar :

chmod u+x OpenToPage

Zu verwenden OpenToPage:

./opentopage /path/name/to/filename.pdf 3

Oder:

./opentopage '/path/name/to/file name.pdf' 3

./opentopage /path/name/to/file\ name.pdf 3

Code:

#!/bin/bash

if [[ -z $2 ]]; then
    [[ -z $1 ]] && printf "\n Missing Filename..."
    printf "\n Missing Page Number...\n\n"
    printf "   Syntax: OpenToPage Filename Page_Number\n"
    printf "   Example: OpenToPage Filename.pdf 3\n\n"
    exit 1
else
    open -a Preview "$1"
    sleep .5
    osascript -e 'tell application "Preview" to activate' \
              -e 'delay 0.25' \
              -e 'tell application "System Events" to tell process "Preview" to click menu item "Go to Page…" of menu "Go" of menu bar 1' \
              -e 'delay 0.25' \
              -e "tell application \"System Events\" to keystroke \"$2\"" \
              -e 'delay 0.25' \
              -e 'tell application "System Events" to key code 36'
fi
exit 0

Hinweise: Wenn der Zieldateiname und /oder Pfadname Leerzeichen enthält, müssen die Leerzeichen mit einem \(umgekehrten Schrägstrich) maskiert werden, oder der Zieldateiname und /oder Pfadname müssen in Anführungszeichen gesetzt werden, aber nicht beides.

Die Zeiten sleepund delaykönnen bei Bedarf angepasst werden. Da das Skript derzeit geschrieben wird, fügt das Timing dem gesamten Prozess insgesamt 1,25 Sekunden hinzu und sollte wahrscheinlich so wie es ist in Ordnung sein. Wenn ich irgendetwas anpassen müsste, würde ich den Wert von sleep, in .75oder ändern 1, bevor ich die Werte von ändere delay.

Die Benennung der Bash- Skriptdatei in dieser Antwort ist beliebig, benennen Sie sie beliebig, z. B. otpoder o2pfür open to page usw.

Danke für diese Lösung. Es scheint für mich zu funktionieren und etwas schneller zu sein, selbst wenn die sleepund delays entfernt wurden.
Ich habe Ihren Beitrag am 14. Oktober positiv bewertet und bin später zurückgekommen, um einen Kommentar hinzuzufügen.
@sjy, Entschuldigung für das Missverständnis und danke für die positive Bewertung! :)