summaryrefslogtreecommitdiffstats
path: root/split-kochabo.sh
blob: 5d31395ff7ab17b9514a759c1cbe69d4e4a9601f (plain)
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#!/bin/bash
#
# This script can extract recipes from the PDFs mailed to customers of
# kochabo.at.
# Recipes from 2013 need extra processing for the file name in get_name().
# Recipes before 2014-18 (that's week 18) also need less processing (no obstbox recipe)
#

set -e

TMPDIR="$(mktemp -d "/tmp/${0##*/}.XXXXXX")"
trap "rm -rf '${TMPDIR}'" EXIT TERM

extract_pages() {
	local first=$1
	local last=$2
	local output=$3
	shift 3

	gs -dNOPAUSE -dQUIET -dBATCH -dFirstPage=$first -dLastPage=$last -sOutputFile="$output" -sDEVICE=pdfwrite "$@"
}

get_obstbox_name() {
	pdftotext "$1" /dev/stdout | sed -n '3p' | paste -sd " "
}

get_name() {
	pdftotext "$1" /dev/stdout | grep -B10 "Nährwertangaben pro Person" | sed '/[1-5]$/d; $d' | paste -sd " "
	# needed for older files with all uppercase names
	#| awk '{print tolower($0)}' sed 's/\b\(.\)/\u\1/g; s#\bMit\b#mit#g; s#\bUnd\b#und#g; s#\bAuf\b#auf#g; s#\s\+$##;'
}

extract_obstbox() {
	local tmpfile="$TMPDIR/rezept-obstbox.pdf"

	extract_pages 4 4 "$tmpfile" "$file"
	local name="$(get_obstbox_name "$tmpfile")"

	if [[ -z $name ]]; then
		rm "$tmpfile"
		continue
	fi

	mv "$tmpfile" "extracted/$name.pdf"

	pdfimages -j "extracted/$name.pdf" "$TMPDIR/$name"

	local biggest_size=0
	local biggest_path=""
	local file
	for file in "$TMPDIR/$name"-*.jpg; do
		local size=$(stat -c%s "$file")
		if ((size>biggest_size)); then
			biggest_path="$file"
			biggest_size=$size
		fi
	done
	mv "$biggest_path" "extracted/$name.jpg"
	rm -f "$TMPDIR"/*.{jpg,ppm}
}

extract_recipe() {
	local i=$1
	local tmpfile="$TMPDIR/rezept-$i.pdf"

	# extract 2 pages for each $i starting on page 5
	extract_pages $((skip_pages+((i-1)*2)+1)) $((skip_pages+((i-1)*2)+2)) "$tmpfile" "$file"
	name="$(get_name "$tmpfile")"

	if [[ -z $name ]]; then
		rm "$tmpfile"
		continue
	fi

	mv "$tmpfile" "extracted/$name.pdf"

	pdfimages -j "extracted/$name.pdf" "$TMPDIR/$name"
	mv "$TMPDIR/$name-000.jpg" "extracted/$name.jpg"
	rm -f $TMPDIR/*.{jpg,ppm}
}

mkdir -p extracted

skip_pages=4
for file; do
	extract_obstbox

	# extract normal recipes
	for i in 1 2 3 4 5; do
		extract_recipe $i
	done
done

output="index.html"

cat <<EOF >"$output"
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <style type="text/css">
        html {
                min-height: 100%;
                background-color: #fff;
        }

        * {
                margin: 0;
                padding: 0;
        }

        a {
                text-decoration: none;
                color: #048;
        }

        a:hover {
                color: #06C;
        }

        img {
                border:0;
                width: 220px;
        }

        .thumbnail {
                line-height: 0;
        }

        div.thumbnail {
                display: inline-block;
                text-align: center;
                vertical-align: middle;
                width: 232px;
                padding: 20px 0;
        }

        div.thumbnail p {
                line-height: 1em;
                padding-top: 10px;
        }

        img.thumbnail {
                margin:2px;
                border: 1px solid #fff;
        }

        body {
                color: #444;
                font-family: "Bitstream Vera Sans", Monospace;
                margin-top: 30px;
                text-align: center;
        }
        </style>
</head>

<body>
	<a href="../">Übersicht</a><br />
EOF

for i in extracted/*.jpg; do
	n=${i%.jpg}
	bn=${n##*/}
	echo "<div class='thumbnail'><a href='$n.pdf'><img src='$n.jpg'></a><p>$bn</p></div>" >> "$output"
done

cat <<EOF >>"$output"
	<br /><a href="../">Übersicht</a><br />
</body>
</html>
EOF