From f313e9edfa5a1d525a2d5fd0b207eb57676ea367 Mon Sep 17 00:00:00 2001 From: Lucas Vivohost Date: Mon, 14 Sep 2026 12:34:46 +0200 Subject: [PATCH] refactor: optimize PDF image splitting script refactor: optimize PDF image splitting script - simplify path and filename handling - safely quote file paths - improve temporary directory management - remove redundant shell pipelines - simplify image batching - add error handling and progress output - document usage and processing steps --- pdf tools/pdf_edit.sh | 102 ++++++++++++++++++++++++++++++++++++++++++ quiethost/pdf_edit.sh | 54 ---------------------- 2 files changed, 102 insertions(+), 54 deletions(-) create mode 100755 pdf tools/pdf_edit.sh delete mode 100755 quiethost/pdf_edit.sh diff --git a/pdf tools/pdf_edit.sh b/pdf tools/pdf_edit.sh new file mode 100755 index 0000000..9caef27 --- /dev/null +++ b/pdf tools/pdf_edit.sh @@ -0,0 +1,102 @@ +#!/bin/bash + +# Convert a PDF into processed JPG images and split them into +# multiple PDF files, with a maximum of 100 images per output PDF. + +set -e + +if [ "$#" -ne 1 ]; then + echo "Usage: $0 " + exit 1 +fi + +pdf_file="$1" + +if [ ! -f "$pdf_file" ]; then + echo "Error: '$pdf_file' does not exist." + exit 1 +fi + +echo "Using $pdf_file" + +# Resolve the input directory and filename. +pdf_dir="$(cd "$(dirname "$pdf_file")" && pwd)" +pdf_name="$(basename "$pdf_file")" +base_name="${pdf_name%.*}" + +buffer_dir="$pdf_dir/.BUFFERFOLDER" + +# Recreate the temporary working directory. +rm -rf "$buffer_dir" +mkdir -p "$buffer_dir" + +cp "$pdf_file" "$buffer_dir/$pdf_name" + +cd "$buffer_dir" + +echo "Extracting images..." + +# Extract PDF images as PNG. +pdfimages -png "$pdf_name" "$base_name" + +count=0 + +shopt -s nullglob + +for img in *.png; do + jpg="${img%.png}.jpg" + + echo "Processing $jpg" + + # PNG -> JPG + convert "$img" "$jpg" + rm "$img" + + # Normalize image dimensions. + convert "$jpg" -resize 2550x3300! "$jpg" + + # Use different crop dimensions for images containing "000". + if [[ "$jpg" == *000* ]]; then + convert "$jpg" -crop 2206x3200+200+50 "$jpg" + else + convert "$jpg" -crop 2106x3200+200+50 "$jpg" + fi + + # Remove white background. + convert "$jpg" -fuzz 20% -transparent White "$jpg" + + # Center image on a white 2550x3300 canvas. + convert "$jpg" \ + -resize 2550x3300 \ + -gravity center \ + -background White \ + -extent 2550x3300 \ + "$jpg" + + # Group images into batches of 100. + split_var=$((count / 100)) + split_dir="split_${split_var}" + + mkdir -p "$split_dir" + mv "$jpg" "$split_dir/" + + ((count++)) || true +done + +# Convert each group of images into a PDF. +for split_dir in split_*; do + [ -d "$split_dir" ] || continue + + split_number="${split_dir#split_}" + + echo "Converting Part $split_number" + + convert "$split_dir"/*.jpg \ + "$pdf_dir/${base_name}_split_${split_number}.pdf" +done + +# Remove temporary files. +cd "$pdf_dir" +rm -rf "$buffer_dir" + +echo "Done." \ No newline at end of file diff --git a/quiethost/pdf_edit.sh b/quiethost/pdf_edit.sh deleted file mode 100755 index af98afe..0000000 --- a/quiethost/pdf_edit.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash -pdf_file="$1" -if [ $# -ne 1 ]; then - echo "Filename Missing" - exit -fi -if [ -f ${pdf_file} ]; then - echo "Using ${pdf_file}" -else - echo "${pdf_file} doesnt exist!" - exit -fi -NAME="$(echo ${pdf_file} | rev | cut -f1 -d'/' | rev)" -if [ "$(echo ${pdf_file} | grep -o '/')" != "" ]; then - path="$(echo ${pdf_file} | rev | cut -f2- -d'/' | rev)" -else - path="$(pwd)" -fi -cd ${path} -if [ -d .BUFFERFOLDER ]; then - rm -dr .BUFFERFOLDER -fi -mkdir .BUFFERFOLDER -cp ${NAME} .BUFFERFOLDER/ -NAME="$(echo ${NAME} | rev | cut -f2- -d'.' | rev)" -cd .BUFFERFOLDER -pdfimages -png ${NAME}.pdf ${NAME} -count=0 -for img in *.png; do - convert ${img} "$(echo ${img} | sed 's/png/jpg/g')" - rm ${img} - img="$(echo ${img} | sed 's/png/jpg/g')" - echo ${img} - convert ${img} -resize 2550x3300! ${img} - if [ "$(echo ${img} | grep "000")" != "" ]; then - convert ${img} -crop 2206x3200+200+50 ${img} - else - convert ${img} -crop 2106x3200+200+50 ${img} - fi - convert ${img} -fuzz 20%% -transparent White ${img} - convert ${img} -resize 2550x3300 -gravity center -background White -extent 2550x3300 ${img} - split_var=$((count / 100)) - if [ ! -d "split_${split_var}" ]; then - mkdir split_${split_var} - fi - mv ${img} split_${split_var}/ - ((count++)) -done -for ((i=0;i<$(ls | grep split_ | wc -l);i++)); do - echo "Convert Part $i" - convert split_$i/*.jpg ../${NAME}_split_${i}.pdf -done -cd ../ -rm -dr .BUFFERFOLDER