Donnez vie à vos documents numériques !
 

Fractionnement doc et enregistrement avec nom spécifique

abracadabraPDF Forums PDF – Général Fractionnement doc et enregistrement avec nom spécifique

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #45824

    Bonjour,
    J’ai un doc de 5 pages et je veux en faire 5 docs de 1 page. Chaque page donne des infos sur une commune et je souhaite que le nom de chaque fichier prenne le nom de la commune concernée (présent dans le texte).
    Est-ce possible? et comment m’y prendre svp?
    Je suis preneur d’exemples car j’ai des fichiers bcp plus volumineux à traiter.
    Merci de votre aide
    FP

Affichage de 19 réponses de 1 à 19 (sur un total de 19)
  • Auteur
    Réponses
  • #63637
    bebarth
    Maître des clés

    bonjour,
    A mon avis c’est faisable, mais ça demande un peu de boulot !
    A ce que je comprend les noms de communes ne sont pas des champs.
    Sur la même ligne de texte que celui du nom de la commune, peut-il y avoir d’autres textes ???? en gros, comment savoir si le nom de commune comporte un ou plusieurs mots ???
    J’essaie de voir ça lundi.
    Bon weekend.
    @+
    :bonjour:

    #63638

    Bonsoir bebarth,
    les noms de communes sont parfois composés (comme dans mon fichier joint) et ce ne sont pas des champs de fusion dans le pdf car je ne sais pas faire avec acrobat cc mais au départ mon doc provient d’un publipostage word avec champs de fusion et j’en fait un fichier pdf. (je pourrais mettre le nom de la commune ou je veux si besoin
    Merci de ton aide et bon we

    #63639
    Merlin
    Maître des clés

    Bonjour.

    PDFZone est une petite merveille qui fait ça en un tournemain et dont le petit prix fait qu’il ne vaut vraiment pas la peine de se prendre la tête avec Acrobat : http://www.pdfzoneapp.com/fr/

    :Smiley15:

    #63640
    bebarth
    Maître des clés

    bonjour,
    Voici en pièce jointe le fichier action que je te propose.
    Ici, j’extrais la page avant de rechercher le mot COMMUNE puis les mots qui suivent pour composer le nom de la commune. Cela implique donc que l’on doit trouver le mot « COMMUNE » sur toutes les pages. Si ce n’est pas le cas il faudra réorganiser le script.
    Si tu n’as pas de sous à dépenser et que tu es prêt à te prendre un peu la tête, essaye cette action…
    Pour ma part, je me suis effectivement un peu « pris la tête », car à force de prendre des petits bouts de scripts à droite à gauche, on arrive à prendre des variables de mêmes noms et ça ne le fait pas… Mais bon, j’ai connu des prises de têtes bien plus compliquées !!!
    Tu me dis ce que tu en penses et si le mot « COMMUNE » n’est pas obligatoirement sur toutes les pages, on fera différemment.
    @+
    :bonjour:

    #63641

    Ouaouh! Génialissime, un immense merci!
    Il faut que je comprenne ton code car je voudrais enregistrer tous les fichiers créés à un endroit précis comme par exemple c:ika
    Tu as utilisé du javascript, si je comprends bien.
    Il faudrait que j’apprenne…
    Merci encore

    #63642
    bebarth
    Maître des clés

    …le plus simple pour connaitre le chemin à indiquer :

    1. Tu places un fichier à l’endroit où tu veux enregistrer tes nouveaux fichiers avec les noms des communes
    2. Tu ouvres ce fichier avec Acrobat
    3. Tu ouvres la console (cmd J sur mac, ce doit être ctrl J sur PC)
    4. Tu tapes « this.path; » puis la touche enter du clavier numérique
    5. Le chemin du fichier s’affiche dans la console
    6. Tu copies ce chemin, sans le nom du fichier
    7. Dans le script, tu modifies cette ligne
    8. [/list]
      Code:
      newDoc.saveAs(repertoire+ville+ ».pdf »);

      en

      Code:
      newDoc.saveAs(« le chemin copié »+ville+ ».pdf »);
        …en mettant les guillemets.
    9. [/list]Normalement, si tu as les droits dans le répertoire, ça devrait fonctionner.
      @+
      :bonjour:

    #63643

    Bonjour Bebarth,
    J’ai lancé le traitement sur un fichier pdf de 256 pages qui comporte la mention : Secteur 2 L’AIGUILLON SUR VIE au lieu de COMMUNE: L’AIGUILLON SUR VIE
    j’ai donc modifié ton script en remplaçant le mot COMMUNE par Secteur
    Je n’ai pas remplacé par Secteur 2 car le numéro de secteur change mais ce n’est pas grave puisque j’arrive à récupérer le nom de la commune
    Je suis surtout ennuyé parceque le traitement s’arrête au bout de quelques pages créées et un message m’avertit qu’il y a trop de fichiers ouverts.
    Comment faire pour que le traitement aille jusqu’au bout des 256 fichiers ?
    Merci de ton aide précieuse

    #63644
    bebarth
    Maître des clés

    bonjour,
    J’avais effectivement remarqué que tous les fichiers se fermaient en fin de script alors que closeDoc(); est en fin de boucle, mais je ne savais pas que tu avais autant de documents…
    Comme ça, je ne sais pas comment faire, mais je vais regarder !

    Pour rechercher soit COMMUNE soit SECTEUR, tu modifies cette ligne :

    Code:
        while (ckWord != « COMMUNE » && ckWord != « SECTEUR ») {

    ça devrait fonctionner ! et pas besoin de rajouter « 2 » car un simple caractère n’est pas considéré comme un mot !
    Je te tiens au courant si je trouve pour fermer les fenêtre une à une.
    @+
    :bonjour:

    #63645
    Merlin
    Maître des clés

    Comment faire pour que le traitement aille jusqu’au bout des 256 fichiers ?

    Essaye avec Acrobat Pro version 9 ou 8 si tu en as la possibilité, ils pourront même traiter 10 fois plus de fichiers sans broncher.
    :Smiley03:

    #63646
    bebarth
    Maître des clés

    …parce que j’ai essayé :

    Code:
    var d = app.activeDocs;
    for( var i in d )
    if( d != this ) d.closeDoc();

    et ça ne fonctionne pas non plus !!! enfin les fichiers se ferments tous à la fin… :mur:
    @+
    :bonjour:

    #63647

    ok je vais découper mon fichier en 5 alors en attendant que nos grands magiciens trouvent the solution :-)
    Je n’ai pas accès aux autres versions
    Merci de votre aide

    #63648
    bebarth
    Maître des clés

    Bon ben on va prendre le problème différemment.
    On cherche COMMUNE ou SECTEUR sur l’original et on extrait la page.

    Code:
    console.show();
    console.clear();
    //Début durée
    d0=new Date();
    debut=util.printd(« dd-mm HH:MM »,d0)
    console.println(« Debut process: »+debut)
    //Initialisation des variables
    var Chemin = this.path;
    var PathSansExt = Chemin.substring(0,Chemin.length-4);
    var nomDocument = this.documentFileName;
    var repertoire = Chemin.substring(0,Chemin.length-nomDocument.length);
    for (var p = 0; p     var ville = «  »;
        var ckWord = «  »;
        var i = 0;
        //recherche du mot COMMUNE
        var numWords = this.getPageNumWords(p);
        while (ckWord != « COMMUNE » && ckWord != « SECTEUR ») {
            var ckWord = this.getPageNthWord(p, i, true);
            //Coordonnées du mot
            var q = this.getPageNthWordQuads(p, i);
            // convert quads in default user space to rotated
            // user space used by Links.
            m = (new Matrix2D).fromRotated(this,p);
            mInv = m.invert()
            r = mInv.transform(q) //Coordonnées champ du mot trouvé
            r=r.toString() //Conversion en chaîne
            r = r.split(« , »); //Séparation de la chaîne à chaque virgule « , »
            //Position verticale du mot
            var posVert = r[3];
            i=i+1;
            }
        var posMot = posVert;
        while (posMot == posVert) {
            var ckWord = this.getPageNthWord(p, i, true);
            //Coordonnées du mot
            var q = this.getPageNthWordQuads(p, i);
            // convert quads in default user space to rotated
          // user space used by Links.
            m = (new Matrix2D).fromRotated(this,p);
            mInv = m.invert()
            r = mInv.transform(q) //Coordonnées champ du mot trouvé
            r=r.toString() //Conversion en chaîne
            r = r.split(« , »); //Séparation de la chaîne à chaque virgule « , »
            //Position verticale du mot
            var posMot = r[3];
            i=i+1;
            if (posMot == posVert) {var ville = ville +  »  » + ckWord;}
            }
        var str = ville;
        var debutVille = ville.substring(0,1);
        if (debutVille == » « ) {
            var res = str.slice(2);
        } else {
            var res = str.slice(1);
        }
        var ville = res;
        console.println(« Commune : « +ville);
       
        if (ville != «  ») {
            this.extractPages({
                nStart: p,
                cPath: repertoire+ville+ ».pdf »
                });
        }
    }
    //fin duree
    df=new Date();
    fin=util.printd(« dd-mm HH:MM »,df)
    console.println(« Fin process: »+fin)
    delta=(df.valueOf()-d0.valueOf())/1000/60
    console.println(« Duree process: »+delta+ » minutes »)

    @+
    :bonjour:

    #63649

    désolé, je tombe sur une erreur (voir pièce jointe)

    #63650
    bebarth
    Maître des clés

    …pas d’erreur de mon côté avec le fichier que tu avais fourni, mais je n’ai pas pris en compte la possibilité par exemple qu’une page soit vierge.
    Cette possibilité est-elle envisageable ??? Il faudrait peut-être rajouter des fonctions « try » !!!
    Je ne sais pas si je pourrai regarder ça ce soir… trop de boulot (je suis sur une vidéo Adobe Première très urgente -> pour samedi).
    Sinon demain matin !
    @+
    :bonjour:

    #63651

    ah je dois avoir des pages imprimées mais sans infos de commune. je referai un essai en les retirant mais je doute car l’erreur est venue au lancement.
    pas de soucis pour le délai j’ai fait mon traitement aujourd’hui en découpant le fichier en 6 :-)
    Adobe première? ah j’en fais bcp aussi :-)
    Bonne soirée

    #63652
    bebarth
    Maître des clés

    bonsoir,
    Là, ça devrait marcher qu’il y ait ou pas des mots sur la page et qu’il y ait COMMUNE/SECTEUR ou pas !

    Code:
    console.show();
    console.clear();
    //Début durée
    d0=new Date();
    debut=util.printd(« dd-mm HH:MM »,d0);
    console.println(« Début process: »+debut);
    //Initialisation des variables
    var Chemin = this.path;
    var PathSansExt = Chemin.substring(0,Chemin.length-4);
    var nomDocument = this.documentFileName;
    var repertoire = Chemin.substring(0,Chemin.length-nomDocument.length);
    for (var p = 0; p     var ville = «  »;
        var ckWord = «  »;
        var i = 0;
        //recherche du mot COMMUNE
        var numWords = this.getPageNumWords(p);
        console.println(« La page: »+(p+1)+ » comporte « + numWords + » mots »);
        if (numWords > 0) {
        try {
            while (ckWord != « COMMUNE » && ckWord != « SECTEUR ») {
                var ckWord = this.getPageNthWord(p, i, true);
                //Coordonnées du mot
                var q = this.getPageNthWordQuads(p, i);
                // convert quads in default user space to rotated
                // user space used by Links.
                m = (new Matrix2D).fromRotated(this,p);
                mInv = m.invert()
                r = mInv.transform(q) //Coordonnées champ du mot trouvé
                r=r.toString() //Conversion en chaîne
                r = r.split(« , »); //Séparation de la chaîne à chaque virgule « , »
                //Position verticale du mot
                var posVert = r[3];
                i=i+1;
            }
            var posMot = posVert;
            while (posMot == posVert) {
                var ckWord = this.getPageNthWord(p, i, true);
                //Coordonnées du mot
                var q = this.getPageNthWordQuads(p, i);
                // convert quads in default user space to rotated
                // user space used by Links.
                m = (new Matrix2D).fromRotated(this,p);
                mInv = m.invert()
                r = mInv.transform(q) //Coordonnées champ du mot trouvé
                r=r.toString() //Conversion en chaîne
                r = r.split(« , »); //Séparation de la chaîne à chaque virgule « , »
                //Position verticale du mot
                var posMot = r[3];
                i=i+1;
                if (posMot == posVert) {var ville = ville +  »  » + ckWord;}
            }
            var str = ville;
            var debutVille = ville.substring(0,1);
            if (debutVille == » « ) {
                var res = str.slice(2);
            } else {
                var res = str.slice(1);
            }
            var ville = res;
            if (ckWord == « COMMUNE ») {
                console.println(« Commune : « +ville);
            } else {
                console.println(« Secteur : « +ville);
            }
            if (ville != «  ») {
                this.extractPages({
                    nStart: p,
                    cPath: repertoire+ville+ ».pdf »
                    });
            }
        } catch(e) {
            app.alert({cMsg: »La page « + (p+1) +  » ne contient ni COMMUNE ni SECTEUR. », nIcon:2});
            }
        }
    }
    //Fin durée
    df=new Date();
    fin=util.printd(« dd-mm HH:MM »,df);
    console.println(« Fin process: »+fin);
    delta=(df.valueOf()-d0.valueOf())/1000/60;
    console.println(« Duree process: »+delta+ » minutes »);

    Si tu ne veux pas le message d’alerte, tu enlève la ligne

    Code:
            app.alert({cMsg: »La page « + (p+1) +  » ne contient ni COMMUNE ni SECTEUR. », nIcon:2});

    @+
    :bonjour:

    #63653
    Merlin
    Maître des clés

    Je viens de (re)trouver ce super tuto : http://khkonsulting.com/2014/04/extract-pdf-pages-based-content/?scid=social41756986&adbid=575295188949594113&adbpl=tw&adbpr=63779713

    Je crois qu’il est en plein dans le sujet.
    :Smiley03:

    #63654
    bebarth
    Maître des clés

    bonjour Merlin,
    Le tuto que tu indiques répondrait plus à un autre post où j’avais répondu car il extrait les pages contenant un même mot et enregistre ce mot comme nom de fichier.
    https://abracadabrapdf.net/forum/index.php/topic,3410.msg20094.html#msg20094

    Ici, le problème est un peu différent. On teste les mots qui sont après et sur la même ligne que le mot COMMUNE ou SECTEUR et on prend tous ces mots pour former un nom (de ville et de fichier). C’est pourquoi j’avais demandé s’il n’y avait pas d’autres mots sur la même ligne, sinon impossible de savoir ou s’arrête le nom de la ville.
    @+
    :bonjour:

    #63655

    Je suis très occupé ces dernières heures et vais regarder avec bcp de plaisir vos solutions prochainement. Merci infiniment pour ce que vous faites.

Affichage de 19 réponses de 1 à 19 (sur un total de 19)
  • Vous devez être connecté pour répondre à ce sujet.