#!/bin/bash # Per https://lwn.net/Articles/895488/ # Version 1.2 of the Inkscape drawing tool has been released. New # features include multi-page support, editable markers, the ability to # flow text around shapes, and more; see the release notes for details. set -eu set -o pipefail function usage { retval="$1" case "$retval" in 0) ;; 1) exec 1>&2 ;; *) echo "$0: Internal error: bad \$retval: $retval" 1>&2 exit 1 ;; esac echo "$0: --split-to-svgs file.pdf --combine-svgs-to-pdf file.pdf --tempdir /where/ever" exit "$retval" } pdf="" mode="" tempdir="." while [ "$#" -ge 1 ] do case "$1" in --split-to-svgs) mode=split-to-svgs pdf="$2" shift ;; --combine-svgs-to-pdf) mode=combine-svgs-to-pdf pdf="$2" shift ;; --tempdir) tempdir="$2" shift ;; -h|--help) usage 0 ;; *) echo "$0: Unrecognized option: $1" 1>&2 usage 1 ;; esac shift done # convert $pdf to an absolute path case "$pdf" in /*) ;; *) pdf="$(pwd)/$pdf" esac for dependency in pdfseparate pdfunite inkscape do if type "$dependency" > /dev/null 2>&1 then : else echo "$0: Could not find $dependency" 1>&2 exit 1 fi done case "$mode" in "") echo "$0: You must specify --split-to-svgs or --combine-svgs-to-pdf" 1>&2 usage 1 ;; split-to-svgs) if [ -d "$tempdir" ] then echo "$0: Good $tempdir exists" else echo "$0: $tempdir does not exist - create it?" read -r yn lowercase_yn=$(echo "$yn" | tr '[:upper:]' '[:lower:]') case "$lowercase_yn" in y*) mkdir -p "$tempdir" ;; *) echo 1 ;; esac fi cd "$tempdir" # pdftk appears to split to pg_xxxx.pdf where x is a digit. # pdftk "$pdf" burst pdfseparate "$pdf" page-'%d'.pdf for i in page-*.pdf do # shellcheck disable=SC2001 echo "$i" | \ sed 's/\(.*\)\.pdf/inkscape "\1.pdf" --export-plain-svg --export-type svg --export-filename "\1"/' done | sh -x rm ./page-*.pdf # rm doc_data.txt echo "$0: svg files are in $tempdir" ;; combine-svgs-to-pdf) for i in *.svg do # shellcheck disable=SC2001 echo "$i" | \ sed 's/\(.*\)\.svg/inkscape "\1.svg" --export-pdf="\1.pdf"/' done | sh -x # rm *.svg # pdftk ./*.pdf cat output "$pdf" pdfunite page-*.pdf "$pdf" rm ./page-*.pdf ;; *) echo "$0: Internal error: \$mode invalid: $mode" 1>&2 ;; esac