#!/bin/bash set -euo pipefail number="$1" name="$2" pseudo="$3" key="$4" unset tmpdir cleanup () { if [ -n "$tmpdir" ] && [ -d "$tmpdir" ]; then rm -fr "$tmpdir" fi } trap cleanup EXIT tmpdir=$(mktemp -d) text_to_image () { text="$1" fontsize="$2" maxwidth="$3" output="$4" convert -size $((${#text} * $fontsize))x$((2 * $fontsize)) xc:white -gravity center -font "Cantarell-Extra-Bold" -pointsize "$fontsize" -fill black -draw 'text 0,0 "'"$text"'"' "$output" convert "$output" -trim "$output" if [ "$(identify -format "%w" "$output")" -gt "$maxwidth" ]; then convert "$output" -resize "$maxwidth"x "$output" fi } text_to_qrcode () { text="$1" width="$2" output="$3" qrencode -t PNG -m 1 -s 9 "$text" -o "$output" convert "$output" -resize "$width"x "$output" } viewjpeg="$(ls /usr/share/ghostscript/*/lib/viewjpeg.ps | tail -1)" convert_jpeg_to_pdf () { declare -a jpeg_stanza while [ $# -gt 1 ]; do jpeg_stanza+=( "($1) viewJPEG showpage" ) shift done gs \ -dNOSAFER \ -sDEVICE=pdfwrite \ -o "$1" \ -g1051x678 \ $viewjpeg \ -c "${jpeg_stanza[*]}" } # 1. name -> image text_to_image "$number" 42 470 "$tmpdir"/number.jpeg text_to_image "$name" 42 470 "$tmpdir"/name.jpeg text_to_image "$pseudo" 42 470 "$tmpdir"/pseudo.jpeg text_to_image "$key" 36 950 "$tmpdir"/key.jpeg text_to_qrcode "$key" 276 "$tmpdir"/qrcode.png convert verso.jpeg \ "$tmpdir"/number.jpeg -geometry +535+96 -composite \ "$tmpdir"/name.jpeg -geometry +535+260 -composite \ "$tmpdir"/pseudo.jpeg -geometry +535+413 -composite \ "$tmpdir"/key.jpeg -geometry +47+577 -composite \ "$tmpdir"/verso.jpeg convert recto.jpeg \ "$tmpdir"/qrcode.png -geometry +693+339 -composite \ "$tmpdir"/recto.jpeg [ -d badges ] || mkdir badges convert_jpeg_to_pdf "$tmpdir"/recto.jpeg "$tmpdir"/verso.jpeg badges/"${number//\//_}".pdf