73 lines
2.0 KiB
Bash
73 lines
2.0 KiB
Bash
#!/bin/bash
|
|
#set -x
|
|
INPUT="$*"
|
|
OUTDIR=$(mktemp -d)
|
|
IMGDIR="$GITEA_WORK_DIR/custom/public/assets/img"
|
|
|
|
if [[ -d "$IMGDIR" && -w "$IMGDIR" ]]; then
|
|
# We can use caching
|
|
HASH=$(sha256sum "$INPUT" | cut -c1-64)
|
|
|
|
shopt -s nullglob
|
|
IMAGES=("${IMGDIR}"/${HASH}.*.svg)
|
|
shopt -u nullglob
|
|
|
|
if [ ${#IMAGES[@]} -le 0 ]; then
|
|
libreoffice --headless --convert-to pdf --outdir "$OUTDIR" $INPUT >/dev/null
|
|
|
|
PDF_FILE="$OUTDIR/$(basename "${INPUT%.*}".pdf)"
|
|
|
|
NUM_PAGES=$(pdfinfo "$PDF_FILE" | grep Pages | awk '{print $2}')
|
|
|
|
for (( i=1; i<=$NUM_PAGES; i++ )); do
|
|
FN="${IMGDIR}/${HASH}.${i}.svg"
|
|
pdftocairo -svg -f $i -l $i "$PDF_FILE" "${FN}"
|
|
done
|
|
|
|
shopt -s nullglob
|
|
IMAGES=("${IMGDIR}"/${HASH}.*.svg)
|
|
shopt -u nullglob
|
|
fi
|
|
|
|
echo '<div class="file">'
|
|
for IMG in "${IMAGES[@]}"; do
|
|
echo '<div class="page">'
|
|
echo -n '<img src="/assets/img/'
|
|
echo -n "$(basename "${IMG}")"
|
|
echo -n '"'
|
|
echo -n ' class="full_width libreoffice pan_zoom"'
|
|
echo '/>'
|
|
echo '</div>'
|
|
done
|
|
echo '</div>'
|
|
|
|
else
|
|
# We'll be generating the images on the fly, including them as base64
|
|
libreoffice --headless --convert-to pdf --outdir "$OUTDIR" $INPUT >/dev/null
|
|
PDF_FILE="$OUTDIR/$(basename "${INPUT%.*}".pdf)"
|
|
NUM_PAGES=$(pdfinfo "$PDF_FILE" | grep Pages | awk '{print $2}')
|
|
|
|
for (( i=1; i<=$NUM_PAGES; i++ )); do
|
|
FN="${IMGDIR}/${HASH}.${i}.svg"
|
|
pdftocairo -svg -f $i -l $i "$PDF_FILE" "${FN}"
|
|
done
|
|
|
|
shopt -s nullglob
|
|
IMAGES=("${IMGDIR}"/${HASH}.*.svg)
|
|
shopt -u nullglob
|
|
|
|
echo '<div class="file">'
|
|
for IMG in "${IMAGES[@]}"; do
|
|
echo '<div class="page">'
|
|
echo -n '<img src="/assets/img/'
|
|
base64 --wrap=0 < "${IMG}"
|
|
echo -n '"'
|
|
echo -n ' class="full_width libreoffice pan_zoom"'
|
|
echo '/>'
|
|
echo '</div>'
|
|
done
|
|
echo '</div>'
|
|
fi
|
|
|
|
rm -R "$OUTDIR"
|