forked from mk12/scripts
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpdf-compare-visual.sh
More file actions
executable file
·77 lines (63 loc) · 1.8 KB
/
pdf-compare-visual.sh
File metadata and controls
executable file
·77 lines (63 loc) · 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/bin/bash
set -Eeufo pipefail
trap 'echo >&2 "$0:$LINENO [$?]: $BASH_COMMAND"' ERR
usage() {
cat <<EOS
Usage: $0 PDF1 PDF2 -o OUT [-d DENSITY]
Create a visual diff of two PDFs
EOS
}
die() { echo >&2 "$(basename "$0"): $*"; exit 1; }
density=100
out=
f=()
while [[ $# -gt 0 ]]; do
arg=$1
shift
case $arg in
-h|--help) usage; exit ;;
-d|--density) density=$1; shift ;;
-o|--out) out=$1; shift ;;
-*) die "$arg: unexpected flag" ;;
*) f+=("$arg") ;;
esac
done
[[ "${#f[@]}" -eq 2 ]] || die "expected two input files"
[[ -n "$out" ]] || die "-o is required"
[[ "$out" = *.* ]] && die "-o should be a directory"
n=()
p=()
for i in 0 1; do
name=$(basename "${f[$i]}")
name=${name%%.*}
n+=("$name")
p+=("$(magick identify "${f[$i]}" | wc -l)")
done
[[ "${n[0]}" = "${n[1]}" ]] && die "inputs need unique basenames"
[[ "${p[0]}" = "${p[1]}" ]] || die "${f[0]} has ${p[0]} pages; ${f[1]} has ${p[1]} pages"
num_pages=${p[0]}
mkdir "$out"
mkdir "$out"/{"${n[0]}","${n[1]}",diff}
for i in 0 1; do
echo "Saving pages of ${f[$i]}"
page_idx=0
while [[ $page_idx -lt "${p[$i]}" ]]; do
echo "... converting page $((page_idx+1)) of ${p[$i]}"
magick -density "$density" "${f[$i]}[$page_idx]" "$out/${n[$i]}/$page_idx.png"
((page_idx++)) || :
done
done
echo "Comparing pages"
page_idx=0
diff_images=()
while [[ $page_idx -lt $num_pages ]]; do
echo "... comparing page $((page_idx+1)) of $num_pages"
# shellcheck disable=SC1087
img=$out/diff/$page_idx.png
magick compare -density "$density" -background white \
"$out/${n[0]}/$page_idx.png" "$out/${n[1]}/$page_idx.png" "$img" || :
diff_images+=("$img")
((page_idx++)) || :
done
echo "Generating combined PDF"
magick "${diff_images[@]}" "$out/diff.pdf"