IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

merger pdf avec programme pdftk


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Inscrit en
    Février 2010
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 45
    Par défaut merger pdf avec programme pdftk
    bonjour a tous
    je suis un petit nouveau en linux et essaie tant bien que mal de merger des pdf
    avec le programme pdftk.
    Repertoire "Z", Dossier "1" Fichiers "1-a.pdf", "1-b.pdf", ect---> resultat souhaite "1.pdf"
    Dossier "2" Fichiers "2-a.pdf", "2-b.pdf", ect---> resultat souhaite "2.pdf"
    ect....
    j'ai bricole un bout de code mais bien entendu ca bog
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
    liste_fichiers=`ls`
    for fichier in $liste_fichiers
    do        
            pdftk *.pdf cat output --.pdf
    done
    j'ai environ 500 dossiers a traiter!!!
    quelqu'un a t-il une idee? merci pour votre aide
    cordialement

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Bonjour,

    d'abord, ON N'UTILISE PAS ls DANS UN SCRIPT !!!
    pourquoi ?
    PARCE QUE !!!
    la réponse est dans un de mes posts qui comporte cette expression.

    ensuite, avant de courir, apprends à marcher : commence par lister (sans ls ! renseigne-toi sur le Développement des chemins, aka globs) les répertoires que tu veux traiter.
    on verra la suite après.

    enfin, un "répertoire" et un "dossier", c'est la même chose.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bonjour

    Après 6-z.pdf, qu'y a-t-il ? 6-aa.pdf ?

    Dans un répertoire, il y a tous les "dossiers" (qui ne sont pas des répertoires) morcelés en fichiers aux noms consécutifs ? C'est bien cela ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Je ferais quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
    for dossier in *
      if test -d "${dossier}"
      then pdftk "${dossier}"/*.pdf cat output "${dossier}.pdf"
      fi
    done
    Plus facile à taper qu'à faire deviner...

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for d in */; do pdftk "$d"*.pdf cat output "$d.pdf"; done
    pas besoin de tester : */ sort les répertoires uniquement.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bon. Je n'ai pas les réponses à mes questions.
    Mais pour commencer à proposer qqch de crédible, je suppose qu'il n'y a qu'une lettre après le tiret.

    Fichiers présents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ ls
    1-a.pdf  1-c.pdf  2-b.pdf  2-d.pdf  2-f.pdf  2-h.pdf  2-j.pdf  2-l.pdf  3-a.pdf  4-a.pdf  4-c.pdf  4-e.pdf  5-b.pdf  5-d.pdf  6-a.pdf  6-c.pdf  6-e.pdf  6-g.pdf
    1-b.pdf  2-a.pdf  2-c.pdf  2-e.pdf  2-g.pdf  2-i.pdf  2-k.pdf  2-m.pdf  3-b.pdf  4-b.pdf  4-d.pdf  5-a.pdf  5-c.pdf  5-e.pdf  6-b.pdf  6-d.pdf  6-f.pdf
    Groupes de fichiers à assembler:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ find -type f -name "*-*.pdf" |sed 's/-.*//' |sort -u
    ./1
    ./2
    ./3
    ./4
    ./5
    ./6
    Lister les fichiers:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ for gr in $(find -type f -name "*-*.pdf" |sed 's/-.*//' |sort -u); do fics="";for unfic in $gr*;do fics="$fics $unfic";done;echo $fics;done;
    ./1-a.pdf ./1-b.pdf ./1-c.pdf
    ./2-a.pdf ./2-b.pdf ./2-c.pdf ./2-d.pdf ./2-e.pdf ./2-f.pdf ./2-g.pdf ./2-h.pdf ./2-i.pdf ./2-j.pdf ./2-k.pdf ./2-l.pdf ./2-m.pdf
    ./3-a.pdf ./3-b.pdf
    ./4-a.pdf ./4-b.pdf ./4-c.pdf ./4-d.pdf ./4-e.pdf
    ./5-a.pdf ./5-b.pdf ./5-c.pdf ./5-d.pdf ./5-e.pdf
    ./6-a.pdf ./6-b.pdf ./6-c.pdf ./6-d.pdf ./6-e.pdf ./6-f.pdf ./6-g.pdf
    Appliquer à pdftk :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ for gr in $(find -type f -name "*-*.pdf" |sed 's/-.*//' |sort -u); do fics="";for unfic in $gr*;do fics="$fics $unfic";done;echo pdftk $fics cat output $gr.pdf;done;
    pdftk ./1-a.pdf ./1-b.pdf ./1-c.pdf cat output ./1.pdf
    pdftk ./2-a.pdf ./2-b.pdf ./2-c.pdf ./2-d.pdf ./2-e.pdf ./2-f.pdf ./2-g.pdf ./2-h.pdf ./2-i.pdf ./2-j.pdf ./2-k.pdf ./2-l.pdf ./2-m.pdf cat output ./2.pdf
    pdftk ./3-a.pdf ./3-b.pdf cat output ./3.pdf
    pdftk ./4-a.pdf ./4-b.pdf ./4-c.pdf ./4-d.pdf ./4-e.pdf cat output ./4.pdf
    pdftk ./5-a.pdf ./5-b.pdf ./5-c.pdf ./5-d.pdf ./5-e.pdf cat output ./5.pdf
    pdftk ./6-a.pdf ./6-b.pdf ./6-c.pdf ./6-d.pdf ./6-e.pdf ./6-f.pdf ./6-g.pdf cat output ./6.pdf
    Y a plus qu'à enlever le dernier echo pour que pdftk s'exécute vraiment.

    Je n'ai pas testé cette dernière étape.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for d in */; do pdftk "$d"*.pdf cat output "$d.pdf"; done
    pas besoin de tester : */ sort les répertoires uniquement.
    pour la simplification!

    Cependant, l'output me semble ne plus convenir...
    j'imagine qu'elle génère dans chaque dossier un fichier résultat nommé ".pdf" (donc considéré comme invisible), non?

    Les spécifications (détaillées!) sont:
    Citation Envoyé par dalo02 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Repertoire "Z", Dossier "1" Fichiers "1-a.pdf", "1-b.pdf", ect---> resultat souhaite "1.pdf"
                    Dossier "2" Fichiers "2-a.pdf", "2-b.pdf", ect---> resultat souhaite "2.pdf"
    Elles n'indiquent pas très clairement si le résultat souhaité doit être dans le dossier "1", soit "1/1.pdf" ou bien à la racine, dans le dossier courant "Z", soit "1.pdf" (ou "./1.pdf").

    Dans mon code, j'avais pris la seconde hypothèse, ce qui, en utilisant ton astuce du "*/", donne, si je ne m'abuse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for d in */; do pdftk "$d"*.pdf cat output "${d%/}.pdf"; done
    Pour la 1ère hypothèse, ce serait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for d in */; do pdftk "$d"*.pdf cat output "${d}${d%/}.pdf"; done

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    "toutafé"
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Membre averti
    Inscrit en
    Février 2010
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 45
    Par défaut
    Bonsoir a tous
    un grand merci a tous
    la ligne de commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for d in */; do pdftk "$d"*.pdf cat output "${d}${d%/}.pdf"; done
    fonctionne a merveille,
    exactement ce que souhaitais.
    Bonne soiree
    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD19] Merger des pdf avec itextSharp
    Par gancau dans le forum WinDev
    Réponses: 3
    Dernier message: 31/03/2016, 18h36
  2. Ouvrir fichier PDF avec programme par défaut
    Par Darf33 dans le forum Langage
    Réponses: 8
    Dernier message: 14/07/2012, 09h58
  3. Concaténer deux fichiers PDF avec pdftk
    Par serana71 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 23/04/2010, 11h08
  4. [CR][.Net] Exportation PDF avec Crystal Report
    Par SoaB dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 11/05/2005, 13h25
  5. Réponses: 2
    Dernier message: 15/04/2005, 15h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo