pdflabel (2667B)
#!/bin/bash
# When presenting documents or images as evidence at some US Courts, the individual pages must form
# a collection called "EXHIBIT <single letter>. Each page must be labeled with this, as well as
# a page number.
OUTPUT_DIR=/tmp/out-$(date '+%Y%m%d%H%M%S')
TEMPLATE_DIR=/tmp/exhibit-template
TITLE_TEMPLATE=$HOME/.config/custom/exhibit-template.tex
STAMP_TEMPLATE=$HOME/.config/custom/exhibit-stamp
CWD=$(pwd)
function add_exhibit_label() {
echo "${FUNCNAME[0]}: Adding file $1"
INPUT=$1
LETTER=$2
PAGE_NUMBER=$3
if [ ! -f $INPUT ]; then
echo "${FUNCNAME[0]}: Invalid input, file is missing."
return 1
fi
OUTPUT_NAME=$(echo $INPUT | sed -E 's/\.[a-z]+$/-output.pdf/' | sed -E 's/(.*)\/([^/]+$)/\2/')
pdftk ${OUTPUT_DIR}/${PAGE_NUMBER}-pagenumber.pdf background $INPUT output ${OUTPUT_DIR}/00${PAGE_NUMBER}-page.pdf
rm ${OUTPUT_DIR}/${PAGE_NUMBER}-pagenumber.pdf
}
function create_exhibit_title_page() {
LETTER=$1
mkdir -p $TEMPLATE_DIR
cat $TITLE_TEMPLATE > ${TEMPLATE_DIR}/000-exhibit.tex
sed -i -E "s/@REPLACE@/$LETTER/" ${TEMPLATE_DIR}/000-exhibit.tex
echo "${FUNCNAME[0]}: creating title page"
pdflatex -output-directory=${CWD} ${TEMPLATE_DIR}/000-exhibit.tex >/dev/null
if [ -f ${CWD}/000-exhibit.pdf ]; then
mv ${CWD}/000-exhibit.pdf ${OUTPUT_DIR}/000-exhibit.pdf
fi
}
function merge_exhibit_files() {
cd $OUTPUT_DIR
echo "${FUNCNAME[0]}: merging files"
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=merged.pdf $(ls | grep -E "[0-9-]+[a-z]+.pdf$" | sort -V)
cd $CWD
}
function main() {
if [[ ! $1 =~ ^[a-zA-Z] ]]; then
echo "${FUNCNAME[0]}: Please add a letter of exhibit"
exit 1
fi
mkdir -p $OUTPUT_DIR
EXHIBIT_LETTER=$(echo $1 | awk '{print toupper($0)}')
NUMBER_OF_PAGES_NEEDED=$(ls $CWD | grep -Ec "\.pdf$")
cat $STAMP_TEMPLATE > ${TEMPLATE_DIR}/000-template
sed -i -E "s/%REPLACE_NUM%/$NUMBER_OF_PAGES_NEEDED/" ${TEMPLATE_DIR}/000-template
sed -i -E "s/%REPLACE_EXHIBIT%/$EXHIBIT_LETTER/" ${TEMPLATE_DIR}/000-template
cd $TEMPLATE_DIR
bash ${TEMPLATE_DIR}/000-template
mv ${TEMPLATE_DIR}/pagenumbers.pdf ${OUTPUT_DIR}/pagenumbers.pdf
cd $OUTPUT_DIR
pdfseparate pagenumbers.pdf %d-pagenumber.pdf
cd $CWD
c=1
for FILE in $(find . -regextype posix-extended -regex '.*pdf$' -print0 | xargs -0 realpath | sort -V); do
add_exhibit_label $FILE $EXHIBIT_LETTER $c
let c++
done
create_exhibit_title_page $EXHIBIT_LETTER
merge_exhibit_files $EXHIBIT_LETTER
echo "Results in $OUTPUT_DIR"
}
main "$@"