Orientierung eines PDFs identifizieren (AppleScript, Bash, Hazel)

EmilS

EmilS

Neues Mitglied
Thread Starter
Dabei seit
01.01.2019
Beiträge
19
Reaktionspunkte
5
Hallo liebe Apple Community,

ich bin ein absoluter Neuling in Bezug auf AppleScript und Bash Scripts – habe seit einigen Wochen Hazel und bin total begeistert, was man alles automatisieren kann.
Ich stehe jetzt vor dem Problem, dass ich aus vielen Seminaren etwa 1500 PDFs habe von denen einige eingescannte Doppelseiten sind (also PDFs im Querformat). Diese möchte ich mit Hazel in einen bestimmten Ordner schieben, um sie weiter zu bearbeiten.
Ich dachte nun, ich könnte das mit einem Bash-Script lösen, nach der Logik:

Wenn die Breite des PDFs größer ist als die Höhe, dann Exit 1, wenn nicht Exit 0.

Doch ich finde keine Möglichkeit die Höhe und Breite auszulesen und das Verhältnis zu analysieren...

Habt ihr vielleicht eine Idee, wie ich das machen könnte?
Ich bin über jede Idee dankbar (auch über Stichworte, nach denen ich weiter suchen könnte).
 
mittels pdfinfo aus den xpdf-tools -> http://www.xpdfreader.com/download.html
Code:
...
Encrypted:      no
Page size:      595.276 x 841.89 pts (A4) (rotated 0 degrees)
File size:      149946 bytes
...
exiftool, welches sowas normalerweise anzeigen kann und beide werte auch einfacherweise getrennt, versagt leider bei pdfs.
also:
Code:
ps=$(pdfinfo file.pdf | grep 'Page size')
x=$(echo "${ps}" | awk {'print $3'})
y=$(echo "${ps}" | awk {'print $5'})
r=$(echo "${ps}" | grep -o 'rotated.*' | awk '{print $2}')
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: EmilS, win2mac und KOJOTE
Oder mit SIPS, was immer noch bei macOS dabei ist, Breite und Höhe des Dokumentes herauspulen und vergleichen:
...
sips -g pixelHeight your/pdf/path/here.pdf
## resp.:
sips -g pixelWidth your/pdf/path/here.pdf
...
 
  • Gefällt mir
Reaktionen: EmilS
sips geht auch, wenn die rotation vernachlässigt werden kann.
 
Vielen Dank für die schnellen Antworten!
Ich bin leider so neu bei dem Thema, dass ich nicht genau weiß, wie ich weiterkomme.

Wie kann ich die hier ausgegebenen Informationen:
ps=$(pdfinfo file.pdf | grep 'Page size')
x=$(echo "${ps}" | awk {'print $3'})
y=$(echo "${ps}" | awk {'print $5'})​

In einer Struktur nutzen, die in etwa so aussieht:

#! /bin/bash
if [ `pdfinfo "file.pdf" | grep Page size | $3>$5 ]
then
exit 1
else
exit 0
fi

Wenn Euch das nervt (was ich verstehen kann) so einführende und unwissende Fragen zu beantworten, vielleicht habt ihr einen Tip auf welcher Hilfsseite ich fündig werden würde solche Basics zu lernen?
 
Das funktioniert super! Vielen, vielen Dank!

Für alle Hazel-Benutzer habe ich das Script hier nochmal gepostet: https://www.noodlesoft.com/forums/viewtopic.php?f=4&t=10781&p=27785#p27785

In Hazel:
The File passes Shellscript:

Mit Rotation:
Code:
#!/bin/bash
ps=$(pdfinfo "$1" | grep 'Page size')
x=$(echo "${ps}" | awk {'print $3'})
y=$(echo "${ps}" | awk {'print $5'})
r=$(echo "${ps}" | grep -o 'rotated.*' | awk '{print $2}')

export LC_ALL=C
x=$(printf "%.0f" "${x}")
y=$(printf "%.0f" "${y}")

[[ "${r}" -eq "0" ]] && [[ "${x}" -lt "${y}" ]] && exit 1 || exit 0

Ohne Rotation:
Code:
#!/bin/bash
ps=$(pdfinfo "$1" | grep 'Page size')
x=$(echo "${ps}" | awk {'print $3'})
y=$(echo "${ps}" | awk {'print $5'})

export LC_ALL=C
x=$(printf "%.0f" "${x}")
y=$(printf "%.0f" "${y}")

[[ "${x}" -lt "${y}" ]] && exit 1 || exit 0
 
Zuletzt bearbeitet:
den shebang solltest du noch jeweils ändern, ohne leerzeichen -> #!/bin/bash
 
  • Gefällt mir
Reaktionen: EmilS
Danke Dir!
 
und da ich hazel gar nicht kenne und nicht weiss, wie das weiter bearbeitet wird.
stimmen die exits in den letzten zeile?
also "... && exit 1 || exit 0", nicht umgekehrt?
 
Ja! Hazel erkennt "exit 0" als match an.
Da ich die PDFs, die im Querformat sind (also x>y) in einen bestimmten Ordner verschieben möchte, habe ich die Exits gedreht, sodass die Dateien, auf die x>y zutrifft, "exit 0" ausgeben. Vermutlich hätte ich auch -gt anstatt -lt im script verwenden können, dann hätten die Exits bleiben können, oder?

In Hazel konnte ich nun das script einfügen, sodass sobald eine Datei in den Ordner, den Hazel beobachtet, verschoben wird und die Datei einen "exit 0" ausgibt, diese Datei einen Tag (Querformat) bekommt und in einen Ordner geschoben wird, der dann wiederum mit einem Script durch den Abby Fine Reader läuft, der die Seiten automatisch teilt (wenn es sich um ein doppelseitiges PDF handelt) und das PDF als Einzelseiten (Portrait) exportiert.
Wirklich super praktisch!

Edit: (ich sehe gerade, dass ich das im Eingangspost anders geschrieben habe – deswegen vermutlich die Frage – sorry. Ich hatte erst im Zuge des Scriptens gemerkt, dass exit 0 ein match in Hazel bedeutet und nicht exit 1)
 
alles klar. mach, wie es für dich passt. ich wusste nur nicht, wie das in hazel verarbeitet wird, bzw. was deine ausgangsbedingung (querformat) ist.
 
Zurück
Oben Unten