Contenu | Rechercher | Menus

Annonce

La nouvelle clé USB Ubuntu-fr est en prévente
Rendez-vous sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 11/02/2015, à 21:07

bobilesinge

PDF : ajouter page blanche si pages impaires

Bonjour,

Auriez-vous une idée pour ajouter aux fichiers pdf d'un dossier une page blanche à la fin du document ? Je n'ai jamais utilisé de script, je ne vois pas du tout comment faire. Une idée qui me passe par la tête serait de passer par pdftk pour fusionner le fichier à pages impaires avec un fichier constitué uniquement d'une page blanche.
Qu'en pensez-vous ?

Merci beaucoup,

Thomas

Hors ligne

#2 Le 12/02/2015, à 08:53

strokkur

Re : PDF : ajouter page blanche si pages impaires

Bonjour

S'il s'agit juste d'ajouter une page blanche à la fin d'un dossier pdf, tu peux utiliser pdfsam, en ayant créé avant une page vierge en pdf.  Simple d'utilisation (interface graphique)

Dernière modification par strokkur (Le 12/02/2015, à 08:54)

Hors ligne

#3 Le 12/02/2015, à 18:27

gigiair

Re : PDF : ajouter page blanche si pages impaires

Bonjour,
Bien que n'étant pas vraiment un pro du script bash, j'ai commis ce petit script pour ajouter une page blanche aux pdf dont le nombre de pages est impair.
Le fichier pageblanche.pdf doit être présent dans le répertoire du $USER, sinon, et à condition que texlive soit installé sur la machine, la page blanche sera créée automatiquement.

#!/bin/bash
# ------------------------------------------------------------------
# Author: gigiair@forum.ubuntu-fr.com
# Version: $Id: pdfpair ,v 0.0 2015/02/12 07:32:51 debjjr Exp
# Title pdfpair
# Description : Insère une page vierge à tous les fichiers pdf dont le nombre de pages est impair
# Vérifie l'existence d'une page blanche dans le répertoire courant
# sinon en crée une à condition que TeXLive soit présent sur l'installation
# Pas d'analyse d'erreur si ces conditions ne sont pas remplies !
# ------------------------------------------------------------------

USAGE="pdfpair <fichier>.pdf"
FICH=$1

# --- Body --------------------------------------------------------

# Vérification de l'existence d'une page blanche sinon
# Confection d'une page A4 blanche

if [  -e "/home/$USER/pageblanche.pdf" ]
  then  PAGEBLANCHE="/home/$USER/pageblanche.pdf"
else
    if [ ! -e "/tmp/pageblanche.pdf" ]
    then
	TEX="$(which pdftex) -output-directory /tmp --interaction nonstopmode -jobname pageblanche";
	echo  "\\pdfpagewidth 210mm\\pdfpageheight 297mm\\strut\\bye"|$TEX
    fi
    PAGEBLANCHE="/tmp/pageblanche.pdf"
fi

#Récupération du nombre de pages
PDFINFO=$(which pdfinfo)

NBPAGES=$($PDFINFO "$FICH" |awk '/Pages:/ {print $2}')

 if [ $((NBPAGES%2)) == 1 ]
 then pdftk "$FICH" "$PAGEBLANCHE" output "/tmp/$FICH"
      cp "/tmp/$FICH" .
 fi

# -----------------------------------------------------------------

Ce script doit être installé dans le répertoire ~/bin du $USER , il doit être rendu exécutable et ~/bin doit être ajouté au  $PATH
Il suffit de décommenter les trois dernières lignes du fichier  ~/.profile

if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

J'ai supposé que les fichiers pdf ont leur extension écrite en minuscule
edit: en fait le script fonctionne aussi bien en majuscule, le nom du fichier est conservé à l'identique.

Je l'ai nommé pdfpair ce script.
Pour traiter un grand nombre de fichiers, si les fichiers sont dans un même répertoire, on peut lancer la commande suivante :

 for f in *.pdf; do pdfpair "$f" ;done

Si l'on souhaite traiter tous les fichiers d'une arborescence

find /chemin/vers/racine/ -name "*.pdf" -execdir pdfpair '{}' \;

Pour ne traiter qu'une partie de l'arborescence, voir

info finding files

Dernière modification par gigiair (Le 12/02/2015, à 21:37)


--
JJR.

En ligne

#4 Le 12/02/2015, à 20:22

bobilesinge

Re : PDF : ajouter page blanche si pages impaires

Top, merci beaucoup à tous les deux !
J'ai essayé un peu pdfsam, ça ne m'avait pas l'air ultra pratique pour traiter tout un dossier (mais merci beaucoup, je ne connaissais pas du tout, j'explorerai)
Et pour le script, ça m'a l'air vraiment top ! J'ai pas encore essayé, pas très familier de l'utilisation des scripts pour le moment, mais je m'y attelle... Merci beaucoup en tout cas, c'est vraiment sympa d'avoir pris le temps!
Merci encore à tous les deux :-)

Hors ligne

#5 Le 13/02/2015, à 14:35

gigiair

Re : PDF : ajouter page blanche si pages impaires

Mon script est largement perfectible. Pourquoi as-tu besoin d'avoir un nombre de pages paires ?.
La page blanche pdf que j'ai créée est au format A4, ce qui peut être gênant si le document n'est pas dans ce format.
Le script suivant modifié corrige crée une page blanche sur mesure pour chaque pdf modifié, mais impose la présence de pdftex. Texlive doit donc être installé, au minimum texlive-base.

#!/bin/bash
# ------------------------------------------------------------------
# Author: gigiair@www.ubuntu-fr.com
# Version: $Id: pdfpair ,v 1.1 Fri Feb 13 10:42:13 2015
# Title pdfpair
# Description : Insère une page vierge à tous les fichiers pdf dont le nombre de pages est impair
# Page blanche créée aux dimensions du document pdf
# nécessite pdftex (texlive)
# Pas d'analyse d'erreur si ces conditions ne sont pas remplies !
# ------------------------------------------------------------------


VERSION=1.1.0
USAGE="pdfpair <fichier>.pdf"

# --- Options processing -------------------------------------------
if [ $# == 0 ] ; then
    echo $USAGE
    exit 1;
fi



FICH=$1
if [ ! -e "$FICH" ] ; then
    echo "Le fichier $FICH n'existe pas dans le répertoire courant"
    exit 1 ;
fi

if [ ! -w "$FICH" ] ; then
    echo "Pas de droits d'écriture pour le fichier  $FICH "
    exit 1
fi

    

# --- Body --------------------------------------------------------
#  SCRIPT LOGIC GOES HERE
#Récupération du nombre de pages
PDFINFO=$(which pdfinfo)

NBPAGES=$($PDFINFO "$FICH" |awk '/Pages:/ {print $2}') 

if [ $((NBPAGES%2)) == 1 ] ; then
    # dimensions de la page en pt
    LPAGE=$($PDFINFO "$FICH" |awk '/Page size:/ {print $3}') 
    HPAGE=$($PDFINFO "$FICH" |awk '/Page size:/ {print $5}') 
    PAGEBLANCHENAME='#pageblanche#'
    if ! which pdftex &>/dev/null ; then
	echo "pdftex n'est pas une commande système : installez texlive"
	exit 1
    fi
     TEX="$(which pdftex) -output-directory /tmp --interaction nonstopmode -jobname $PAGEBLANCHENAME";
     echo  "\\nopagenumbers\\pdfpagewidth${LPAGE}bp\\pdfpageheight${HPAGE}bp\\strut\\bye"|$TEX >/tmp/null
    PAGEBLANCHEF="/tmp/${PAGEBLANCHENAME}.pdf"
    pdftk "$FICH" "$PAGEBLANCHEF" output "/tmp/$FICH"
    cp "/tmp/$FICH" .
    echo "Fichier $FICH réécrit avec $(($NBPAGES + 1)) pages"
    rm $PAGEBLANCHEF
fi



# -----------------------------------------------------------------

Il se peut qu'il y ait des erreurs pour certains fichiers incorrectement composés. J'ai testé le script sur une centaine de fichiers sans problème.


--
JJR.

En ligne

#6 Le 13/02/2015, à 16:11

bobilesinge

Re : PDF : ajouter page blanche si pages impaires

Hello JJR,

Merci beaucoup, c'est vraiment super sympa !
J'ai essayé, pour l'instant j'ai un soucis pour mettre le script dans bin. Mais je n'ai pas encore fait la manip pour mettre en commentaire les trois lignes du fichier dont tu parlais (c'est sans doute ça, non ?)- je ne l'ai pas encore trouvé, et j'ai un peu peur de toucher à des entrailles précieuses de ma machine (?)
Au fait, je suis étudiant en médecine. Je récupère en ce moment des fiches pdf d'un site internet, puis je les fusionne pour me faire un bouquin de fiches (plus facile à afficher dans un lecteur pdf ou à imprimer qu'une multitude de fichiers). J'aime bien imprimer ces fiches par deux sur une page en mode paysage, ou les afficher deux à la fois sur Okular. Du coup, si j'ai un document à nombre impair de page, ça me décale tout (j'aime bien avoir un max d'info sous les yeux, et avoir la dernière page d'une première fiche en vue lorsque je bosse la suivante est un peu du gâchis plutôt que de voir les deux premières pages de la fichier).
Merci encore,
Thomas

Hors ligne

#7 Le 13/02/2015, à 18:26

gigiair

Re : PDF : ajouter page blanche si pages impaires

Il suffit de faire un copier-coller de tout  le script dans le fichier pdfpair nouvellement créé à l'aide de n'importe quel éditeur de texte. if faut éventuellement créer le répertoire  ~/bin  s'il ne l'est pas.
- sélectionner le texte du script en entier, puis copier avec le menu contextuel de la souris
- dans un shell

cd
mkdir bin
nano bin/pdfpair

-  coller avec le menu contextuel de la souris
- sauver le fichier par Ctrl+O puis quitter nano par Ctrl+x (dans l'aide, c'est représenté par ^O et ^X),
-rendre le fichier exécutable : dans le shell, taper

chmod +x ~/bin/pdfpair

- éditer ensuite le fichier .profile

nano ~/.profile

- décommenter les trois dernières lignes

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

- Sauver et quitter nano.
-  redémarrer la session et pour que le nouveau PATH soit pris en compte, ou taper

source ~/.profile

- vérifier que le nouveau fichier exécutable est bien reconnu

which pdfpair
/home/xxxx/bin/pdfpair

Voilà, c'est prêt à fonctionner.
Je posais la question de l'usage car si le script est destiné à des fichiers pdf composites, le format de page peut être quelconque, et le résultat ne serait pas très beau. Si tous les documents sont en A4, le premier script fonctionnera correctement avec une page vierge créée par n'importe quel applicatif qui permet de le faire.
Mais texlive est un très bon système à installer sur une machine, ça sert en particulier avec Grisbi pour imprimer les comptes (enfin ça servait, je n'utilise plus grisbi depuis longtemps).

Pour éviter les erreurs de saisie dans un shell, utiliser systématiquement l'auto-complétion, même si on est sûr de l'orthographe. par exemple, pour taper la commande nano, taper nan puis la touche de tabulation (marquée Tab). le shell complète nano. S'il ne le fait pas appuyer une deuxième fois. Si nano n'apparaît pas dans les propositions c'est que nano n'est pas installé sur le système. Pareil pour les noms de répertoire ou de fichier : comme ça on est sûr que le nom désigne quelque chose d'existant.
Autrement, il ne faut pas trop t'inquiéter, un ordinateur n'a rien d'humain. Il n'y a que du rationnel dedans. Si tu te trompes dans l'édition d'un fichier, il suffit de reprendre l'édition et de corriger. La modification que je te propose pour .profile est sans danger, le pire qui puisse arriver est que le PATH ne soit pas modifié et que la commande utilisateur ne soit pas reconnue. Ça serait bien si on pouvait réparer l'être humain comme ça, surtout dans son fonctionnement intellectuel...

ps : Comme le fil peut être lu par un utilisateur très inexpérimenté, j'ai mis un maximum de détails dont les geeks n'ont que faire...


--
JJR.

En ligne

#8 Le 14/02/2015, à 00:39

gigiair

Re : PDF : ajouter page blanche si pages impaires

Juste une remarque. J'ai analysé un peu mieux le problème en partant non de la demande, mais des besoins.

pdfnup monbeaufichier.pdf

va créer un fichier monbeaufichier-nup.pdf en mode paysage avec deux pages de monbeaufichier.pdf par page. Si le nombre de pages est impair, la dernière page ne sera remplie qu'à moitié.
pdfjam est un script plus complet, avec plein d'options.

pdfjam -paper a4paper --landscape -nup 2x1 monbeaufichier.pdf 

fait la même chose que pdfnup
Il y a plein d'autres possibilités, et traiter un lot de fichier  est un travail de débutant en script. Si tu veux tu précises ton désir, je te donnerais la commande . il faut préciser l'emplacement des fichiers source et des fichers traités et la composition des pages du fichier produit.


--
JJR.

En ligne

#9 Le 15/02/2015, à 00:53

bobilesinge

Re : PDF : ajouter page blanche si pages impaires

Hello JJR,

Merci encore, c'est vraiment super sympa toutes ces explications détaillées en plus du code !
Alors ça y est, j'arrive à faire tourner le script.
J'ai eu un soucis : mes fichiers pdf ne sont pas pris en charge par pdftk (problème existant reporté sur internet, je n'ai plus les sources sous les yeux, liées à des versions récentes d'Acrobat non prises en charge) !
(message d'erreur en faisant tourner le script:)

Error: Failed to open PDF file: 
   50.pdf
Errors encountered.  No output created.
Done.  Input errors, so no output created.
Fichier 50.pdf réécrit avec 2 pages

Il existe une alternative par une commande ghostscript de type : 

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=A+B+C.pdf  A.pdf B.pdf C.pdf ...

J'ai donc remplacé dans ton code

pdftk "$FICH" "$PAGEBLANCHEF" output "/tmp/$FICH"

par   

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile="/tmp/$FICH"  "$FICH" "$PAGEBLANCHEF"   

Et ça marche !
C'est la première fois que j'utilise un script, je vois que les possibilités sont nombreuses en effet comme tu le dis. Merci encore pour ton aide.
(Je ne me permet pas encore de publier ton code complet avec ma modification, le code étant signé, je ne connais l'usage)

Hors ligne

#10 Le 16/02/2015, à 07:53

gigiair

Re : PDF : ajouter page blanche si pages impaires

Ça ne me gêne pas du tout que l'on publie mon code. Je suis un débutant en script bash et mon éditeur (Emacs) est équipé d'un système  qui me fournit un canevas tout prêt  dans lequel s'insère un nom.
Ton problème m'a servi d'exercice, et il y a des choses que je n'ai pas réussi à faire comme je voulais (redirection des flux de sortie et d'erreur). Ça m'a amusé d'utiliser TeX dans un script même si c'est un peu utiliser un marteau pilon pour écraser des mouches.  On peut s'en passer.
Le pdf n'est pas vraiment un format de document et Adobe, pourtant le créateur de pdf, ne respecte pas toujours ses propres spécifications.

J'avais oublié que l'on pouvait concaténer deux pdf avec ghostscript.
Il y a même une commande pour ajouter une page blanche à un pdf :

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=sortie.pdf -f entree.pdf -c showpage 

Mais si le code est simple, l'exécution est pour des raisons qui me paraissent incompréhensibles très lente.
Du coup le code du script peut se limiter à tester si le nombre de pages est impair et le cas échéant ajouter une page  vierge à la fin.


--
JJR.

En ligne

#11 Le 16/02/2015, à 16:18

bobilesinge

Re : PDF : ajouter page blanche si pages impaires

Hello JJR,

Merci beaucoup pour ta réponse.
Je viens d'essayer la commande pdfnup que tu proposais dans ta précédente réponse, très pratique en effet!

J'ai un peu réfléchit, ce qui serait vraiment chouette serait de :
-pouvoir créer une table des matières à partir des différents fichiers pdf d'origine (j'imagine que cela devrait être faisable sous LaTeX, encore faudrait-il automatiser ça dans le script, idéalement avec un nombre de pages pair pour ne pas décaler la suite et des liens cliquables vers les chapitres)
-numéroter les pages du document final
-éventuellement et idéalement, numéroter les pages des chapitres (les fichiers pdf avant fusion, en reprenant à 1 entre chaque chapitre) (il y aurait alors deux numéros de page par page)
-pouvoir réduire les marges (avec Krop ? Mais à ce moment-là, à faire avant la numérotation, ce qui est délicat pour numéroter les chapitres indépendament...)
Très idéalement à partir d'un script et une commande...  Mais tout cela est peut-être trop ambitieux ?
Et là, ça part dans toutes les directions, peut-être vaudrait-il mieux faire un fil pour chaque question ?

Merci beaucoup,

Thomas

Hors ligne