diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 30ea36d7..97731e1e 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -11,6 +11,10 @@ build: python: "3.11" apt_packages: - graphviz + - ghostscript + jobs: + post_build: + - ./scripts/rtd-compress-pdf.sh formats: - pdf diff --git a/scripts/rtd-compress-pdf.sh b/scripts/rtd-compress-pdf.sh new file mode 100755 index 00000000..edaad216 --- /dev/null +++ b/scripts/rtd-compress-pdf.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env sh + +# Compresses the PDF output using ghostscript on Read the Docs. + +DPI=400 +PDF_DIR="$READTHEDOCS_OUTPUT/pdf" + +# only run if the PDF build is enabled +# based on whether or not the PDF output directory exists +if [ -d "$PDF_DIR" ]; then + # find the existing PDF + pdf_name=$(ls "$PDF_DIR") + + # Read the Docs expects only one PDF file in the output directory + # see https://docs.readthedocs.io/en/stable/reference/environment-variables.html#envvar-READTHEDOCS_OUTPUT + # so we move the existing PDF into a temp directory. + temp=$(mktemp -d) + mv "$PDF_DIR/$pdf_name" "$temp" + + # compress the existing PDF into a new PDF, + # placed directly in the output directory + gs -sDEVICE=pdfwrite \ + -dCompatibilityLevel=1.4 \ + -dPDFSETTINGS=/ebook \ + -dNOPAUSE \ + -dBATCH -dColorImageResolution="$DPI" \ + -sOutputFile="$PDF_DIR/$pdf_name" "$temp/$pdf_name" +fi