Skip to content

Instantly share code, notes, and snippets.

@andrewgilmartin
Created September 8, 2015 18:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andrewgilmartin/9b814c85ab96abe1ba9e to your computer and use it in GitHub Desktop.
Save andrewgilmartin/9b814c85ab96abe1ba9e to your computer and use it in GitHub Desktop.
#!/bin/bash
function split() {
file="$1"
dir="$2"
odd="$3"
even="$4"
pages=$(/usr/local/bin/pdfinfo "$file" | perl -ne 'print "$1" if /^Pages:\s+(\d+)/')
/usr/local/bin/pdfseparate "$file" "$dir/p-%d.pdf"
# prepare the list of odd pages in assending
for o in $(seq 1 2 $pages)
do
f="$dir/p-$o.pdf"
O="$O $f"
done
# join the odd pages into one file
/usr/local/bin/pdfunite $O "$odd"
if [ $((pages % 2)) == 1 ]
then
# add a blank page to for the "back" of the last page
f="$dir/p-blank.pdf"
base64 --decode --output "$f" <<EOH
JVBERi0xLjMKJcTl8uXrp/Og0MTGCjQgMCBvYmoKPDwgL0xlbmd0aCA1IDAgUiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAErVAgEAAHnAOMKZW5kc3RyZWFtCmVuZG9iago1IDAgb2JqCjExCmVuZG9iagoyIDAgb2JqCjw8IC9UeXBlIC9QYWdlIC9QYXJlbnQgMyAwIFIgL1Jlc291cmNlcyA2IDAgUiAvQ29udGVudHMgNCAwIFIgL01lZGlhQm94IFswIDAgNjEyIDc5Ml0KPj4KZW5kb2JqCjYgMCBvYmoKPDwgL1Byb2NTZXQgWyAvUERGIF0gPj4KZW5kb2JqCjMgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzIC9NZWRpYUJveCBbMCAwIDYxMiA3OTJdIC9Db3VudCAxIC9LaWRzIFsgMiAwIFIgXSA+PgplbmRvYmoKNyAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMyAwIFIgPj4KZW5kb2JqCjggMCBvYmoKKE1hYyBPUyBYIDEwLjkuNSBRdWFydHogUERGQ29udGV4dCkKZW5kb2JqCjkgMCBvYmoKKEQ6MjAxNTA5MDgxNjUwMjFaMDAnMDAnKQplbmRvYmoKMSAwIG9iago8PCAvUHJvZHVjZXIgOCAwIFIgL0NyZWF0aW9uRGF0ZSA5IDAgUiAvTW9kRGF0ZSA5IDAgUiA+PgplbmRvYmoKeHJlZgowIDEwCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDQ5MiAwMDAwMCBuIAowMDAwMDAwMTI1IDAwMDAwIG4gCjAwMDAwMDAyNjggMDAwMDAgbiAKMDAwMDAwMDAyMiAwMDAwMCBuIAowMDAwMDAwMTA3IDAwMDAwIG4gCjAwMDAwMDAyMjkgMDAwMDAgbiAKMDAwMDAwMDM1MSAwMDAwMCBuIAowMDAwMDAwNDAwIDAwMDAwIG4gCjAwMDAwMDA0NTEgMDAwMDAgbiAKdHJhaWxlcgo8PCAvU2l6ZSAxMCAvUm9vdCA3IDAgUiAvSW5mbyAxIDAgUiAvSUQgWyA8ZGFlMDQ3ZjU2ZmRhMjA1ZmViYzNkYmE4NmViNjZlYjg+CjxkYWUwNDdmNTZmZGEyMDVmZWJjM2RiYTg2ZWI2NmViOD4gXSA+PgpzdGFydHhyZWYKNTY0CiUlRU9GCg==
EOH
E=$f
pages=$((pages -1))
fi
# prepare the list of even pages in descending/reverse order
for e in $(seq $pages -2 2)
do
f="$dir/p-$e.pdf"
E="$E $f"
done
# join the even pages into one file
/usr/local/bin/pdfunite $E "$even"
# remove the intermediary files
rm -f $O $E
}
# remove title and printer settings
shift 2
for f in "$@"
do
dir=$(mktemp -d "/tmp/duplex-XXXX")
split "$f" "$dir" "$dir/odd.pdf" "$dir/even.pdf"
open "$dir/even.pdf"
open "$dir/odd.pdf"
done
# END
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment