1 | #!/bin/bash
|
2 | # B. Mauclaire, Inspired of a script bysputnick 2012
|
3 | # https://forum.ubuntu-fr.org/viewtopic.php?id=806571&p=2
|
4 | # Découpe un pdf en double-page : rogne les 2 pages A5 d'une page A4 au format paysage
|
5 |
|
6 | ebookdir=./ebooks
|
7 |
|
8 | #-- Options du shell ;
|
9 | shopt -s nocaseglob nullglob extglob
|
10 | #- shopt -s c'est des réglages spéciaux du shell. Lance shopt seul, tu aura la liste.
|
11 | #- nocaseglob c'est pour que ca matche indépendament de la casse des noms de fichiers.
|
12 | #- nullglob c'est pour que si il n'y a pas de PDFs, ça réagissse correctement et que bash considère pas */*.pdf comme un fichier inexistant
|
13 | #- extglob permet le !() à la fin : tout effacer sauf
|
14 | #- prename sert à renommer en masse avec un regex : dans ce cas on substitue les espaces des noms de fichiers par des underscores. On peux utiliser la syntaxe perl ou la plus classique BRE somme sed
|
15 |
|
16 |
|
17 | progrun() {
|
18 | #-- Remplace les espaces par des "_" :
|
19 | #- Remplace les espaces par "_"
|
20 | #prename 's@\s@_@' "$@"
|
21 |
|
22 | f="$1"
|
23 |
|
24 | echo "Fichier à traiter : $f"
|
25 | actualdir=`pwd`
|
26 |
|
27 | file="${f// /_}"
|
28 | read filename dirname < <(sed -r 's@.*/((.*)\.pdf)$@\1 \2@i' <<< "$file")
|
29 | mkdir -p "$ebookdir/$dirname/"
|
30 | cp "$file" "$ebookdir/$dirname/$filename" ; # cp was rm
|
31 | cd "$ebookdir/$dirname/"
|
32 | pdftk "$filename" burst
|
33 |
|
34 | for bursted in pg_[0-9][0-9][0-9][0-9].pdf; do
|
35 | pdfposter -p 2x1a4 "$bursted" "page${bursted#pg}"
|
36 | done
|
37 |
|
38 | #mv "$filename" "${filename}.old"
|
39 | pdftk page*.pdf cat output "$filename"
|
40 | rm !("$filename"|"${filename}.old")
|
41 | f_rootname=`basename -s .pdf "$f"`
|
42 | fout="${f_rootname}_split.pdf"
|
43 | mv "$filename" "$actualdir/$fout"
|
44 | rm -rf "$actualdir/$ebookdir"
|
45 | echo "Fichier avec pages A5 séparées sauvé sous : $fout"
|
46 | }
|
47 |
|
48 | #--- Gestion des arguments :
|
49 | case $# in
|
50 | 1) progrun "$1" ;;
|
51 | *) echo "Synthaxe : pdfa4toa5.sh fichier_to_split.pdf" ;;
|
52 | esac
|