Donnez vie à vos documents numériques !
 

Publipostage PDF avec Excel

abracadabraPDF Forums PDF – Général Publipostage PDF avec Excel

  • Créateur
    Sujet
  • #45571
    marie
    Membre

    Bonjour,
    Très bonne année à ceux qui me liront.
    Je dois régulièrement remplir des PDF à la chaîne : même formulaire à remplir en 20 exemplaires par exemple. Savez-vous si il est possible de faire un publipostage à partir d’un fichier XLSX ?
    Si oui, pouvez-vous m’indiquer la marche à suivre ?
    Merci beaucoup

Affichage de 22 réponses de 100 à 121 (sur un total de 121)
  • Auteur
    Réponses
  • #62044
    SBLONDEL
    Membre

    Bebarth, je sais que c’est un forum sur adobe mais j’ai trouvé un code qui permettrait d’insérer la signature Outlook. Est ce que tu pourrais me dire quel est le bout du code ci-dessous qui fait cela? Et peut être que si on le rajoute dans le code tu m’as préparé pour le publiposatge cela pourrait fonctionner???
    Je croise les doigts.
    merci Stéphanie
    [font=&amp][/font]

    [font=&amp]
    [/color]Sub EnvoiMail() Dim OutObj As Object, OutMail As Object Dim sPath As String, sNomFic As String Dim sAdrMail As String, strSujet As String, strBody As String ’ Chemin d’enregistrement des fichiers temporaire sPath = Environ(”temp”) & ””’ Nom du fichier sNomFic = Format(Date, ”yyyymmdd”) & ”.pdf”’ Exporter le fichier actuel en PDF ThisDocument.ExportAsFixedFormat OutputFileName:=sPath & sNomFic, ExportFormat:=wdExportFormatPDF, _ OpenAfterExport:=False, OptimizeFor:=wdExportOptimizeForPrint, Range:=wdExportAllDocument, _ Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, CreateBookmarks:= _ wdExportCreateNoBookmarks, DocStructureTags:=True, BitmapMissingFonts:=True, UseISO19005_1:=False’ Création d’une instance Outlook pour envoyer un mailSet OutObj = CreateObject(”Outlook.Application”) Set OutMail = OutObj.CreateItem(0) ’ Création de l’e-mail : Titre, Corps du message, destinataire sAdrMail = InputBox(”Adresse mail du destinataire”, ”ADRESSE MAIL”, ”@”) ’ Création du message strSujet = ”CECI EST MON SUJET” strBody = ”Bonjour,” &

    _ & ”Veuillez trouver en pièce jointe, le document voulu.”’ Préparation le mailWith OutMail ’ Pour afficher la signature .Display ’ Adresses mail .To = sAdrMail .cc = ””’ Sujet de l’eMail .Subject = strSujet ’ Corps du mail et signature .HTMLBody = strBody &

    & .HTMLBody .Attachments.Add sPath & sNomFic EndWith’ Supprimer le fichier créé Kill sPath & sNomFic ’ Effacer les objetsSet OutMail = NothingSet OutObj = NothingEndSub
    [/font]
    #62045
    bebarth
    Maître des clés

    :tutut: , je ne pense pas pouvoir intégrer ce code html ou un bout dans du JavaScript !
    Désolé.
    @+
    :bonjour:

    #62046
    SBLONDEL
    Membre

    Ah mince, choux et carottes n’ont jamais fais bon ménage  :Smiley01: merci A+ Stéphanie

    #62047
    Merlin
    Maître des clés

    j’ai trouvé un code

    Je ne sais pas ce que c’est mais il sera certainement plus lisible ainsi :

    Code:
    Sub EnvoiMail() Dim OutObj As Object,
    OutMail As Object Dim sPath As String,
    sNomFic As String Dim sAdrMail As String,
    strSujet As String,
    strBody As String ‘ Chemin d’enregistrement des fichiers temporaire sPath = Environ(“temp”) & “”‘ Nom du fichier sNomFic = Format(Date,
    “yyyymmdd”) & “.pdf”” Exporter le fichier actuel en PDF ThisDocument.ExportAsFixedFormat OutputFileName:=sPath & sNomFic,
    ExportFormat:=wdExportFormatPDF,
    _ OpenAfterExport:=False,
    OptimizeFor:=wdExportOptimizeForPrint,
    Range:=wdExportAllDocument,
    _ Item:=wdExportDocumentContent,
    IncludeDocProps:=True,
    KeepIRM:=True,
    CreateBookmarks:= _ wdExportCreateNoBookmarks,
    DocStructureTags:=True,
    BitmapMissingFonts:=True,
    UseISO19005_1:=False” Création d’une instance Outlook pour envoyer un mailSet OutObj = CreateObject(“Outlook.Application”) Set OutMail = OutObj.CreateItem(0) ‘ Création de l’e-mail : Titre,
    Corps du message,
    destinataire sAdrMail = InputBox(“Adresse mail du destinataire”,
    “ADRESSE MAIL”,
    “@”) ‘ Création du message strSujet = “CECI EST MON SUJET” strBody = “Bonjour,” & “

    ” _ & “Veuillez trouver en pièce jointe,
    le document voulu.”‘ Préparation le mailWith OutMail ‘ Pour afficher la signature .Display ‘ Adresses mail .To = sAdrMail .cc = “”‘ Sujet de l’eMail .Subject = strSujet ‘ Corps du mail et signature .HTMLBody = strBody & “

    ” & .HTMLBody .Attachments.Add sPath & sNomFic EndWith’ Supprimer le fichier créé Kill sPath & sNomFic ‘ Effacer les objetsSet OutMail = NothingSet OutObj = NothingEndSub

    :Smiley03:

    #62048
    SBLONDEL
    Membre

    Bonjour Bebarth et Merlin,

    Je reviens vers vous car en utilisant le publiposatge je me suis rendue compte que les pdf étaient en version modifiable.
    J’ai recherché sur le forum et j’ai vu que Merlin proposait à quelqu’un un script pour rendre “read only” un fichier.
    Je voudrais insérer le script mais je ne sais pas où je dois le faire dans le script qui est dans le fichier joint (test publiposatge & fichier nom prenom.seq)
    Pouvez-vous m’aiguiller?

    merci Stéphanie

    Ci-dessous le message de Merlin :

    Place ce script en action “souris relevée” dans le bouton d’envoi :

    // rendre tous les champs readonly, y compris le bouton cliqué
    for (var i=0; i  var oFld = this.getField(this.getNthFieldName(i));
      oFld.readonly = true;
    }

    // remettre le bouton cliqué en “not readonly”
    event.target.readonly = false;

    // envoi de l’email
    this.mailDoc({bUI: true,cTo: “
    toto@free.fr“,cSubject: “Sujet du message“,cMsg: “Texte du message.“});

    #62049
    Merlin
    Maître des clés

    Si tu veux vraiment que les champs soient non modifiables et comme tu utilises Acrobat Pro pour le publipostage tu devrais plutôt “aplatir” (flatten) les champs.
    C’est juste une ligne à ajouter à la fin de ton script :

    // aplatir tous les champs sur toutes les pages
    this.flattenPages();

    #62050
    SBLONDEL
    Membre

    cool je teste.

    merci,
    Stéphanie

    #62051
    SBLONDEL
    Membre

    grrr j’ai essayé tout à la fin mais cela génère le même type de fichier.
    du coup j’ai tenté après remplissage des chanps mais sans succès. Est ce que ce ne serait pas avant la ligne

    // Enregistrement “NomDuFichier (nom prenom).pdf ?

    Merci pour ton aide

    Extrait script :

    Code:
    // remplissage des champs
    newDoc.getField(“Nom”).value=colonnes[0];
    newDoc.getField(“Heure FR”).value=colonnes[1];
    newDoc.getField(“Date FR”).value=colonnes[2];
    newDoc.getField(“Heure AN”).value=colonnes[3];
    newDoc.getField(“Date AN”).value=colonnes[4];
    newDoc.getField(“Civilite”).value=colonnes[5];
    var email=colonnes[6];
    // Table des e-mails
    lesEmails.push(email);
    // Enregistrement “NomDuFichier (nom prenom).pdf”

    var leChemin=cheminSansExt+” (“+colonnes[0]+”).pdf”;
    lesChemins.push(leChemin);
    newDoc.saveAs(leChemin);
    // Fermeture du fichier
    newDoc.closeDoc();
    #62052
    Merlin
    Maître des clés

    – S’il te plait, essaye de faire des copier-coller “TXT” ou bien de nettoyer tes messages parce-qu’à chaque fois je dois enlever des kilomètres de :

    Code:
    [font=Times New Roman][/font]
    [font=Times New Roman][/font]

    [font=Times New Roman][/font]

    [font=Times New Roman]

    etc.
    :geek:

    – Tu avais presque bon, mais dans ce script il faut remplacer this par newDoc :
    :Smiley03:

    // remplissage des champs
    newDoc.getField(“Nom”).value=colonnes[0];
    newDoc.getField(“Heure FR”).value=colonnes[1];
    newDoc.getField(“Date FR”).value=colonnes[2];
    newDoc.getField(“Heure AN”).value=colonnes[3];
    newDoc.getField(“Date AN”).value=colonnes[4];
    newDoc.getField(“Civilite”).value=colonnes[5];
    var email=colonnes[6];
    // Table des e-mails
    lesEmails.push(email);
    newDoc.flattenPages();
    // Enregistrement “NomDuFichier (nom prenom).pdf”
    var leChemin=cheminSansExt+” (“+colonnes[0]+”).pdf”;
    lesChemins.push(leChemin);
    newDoc.saveAs(leChemin);
    // Fermeture du fichier
    newDoc.closeDoc();

    #62053
    bebarth
    Maître des clés

    Désolé, je n’ai pas reçu d’alerte…
    @+
    :bonjour:

    #62054
    SBLONDEL
    Membre

    Merci à tous les deux cela fonctionne.
    Stéphanie

    #62055
    Merlin
    Maître des clés

    :bonjour:

    #62056
    Mary31
    Participant

    Bonjour à tous,
    j’ai lu le fil des discussions sur ce sujet qui m’intéresse fortement.

    Je voudrais me lancer pour tester. Simplement et étant d’un niveau “amateur” je voulais savoir où créer le code qui génèrera plusieurs fichiers à l’issue d’un import de données en .txt.

    – Tous les scripts JavaScript ?
    – Scripts JavaScript du document ?
    – Action du document ?

    :Euuuh: Merci…

    ps : je travaille sur PC

    #62057
    bebarth
    Maître des clés

    bonjour,
    As-tu téléchargé les fichiers proposés sur ce post ? Y en a-t-il un qui te convient ?
    @+
    :bonjour:

    #62058
    Merlin
    Maître des clés

    étant d’un niveau “amateur” je voulais savoir où créer le code qui génèrera plusieurs fichiers à l’issue d’un import de données en .txt.

    – Tous les scripts JavaScript ?
    – Scripts JavaScript du document ?
    – Action du document ?

    Il faut que tu lises cet article : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/les-differents-niveaux-dutilisation-des-scripts-javascript/

    #62059
    Mary31
    Participant

    Bonjour,
    et merci pour vos réponses que j’ai approfondies avec les liens envoyés en consultant les posts. :bonjour:

    Je suis donc allée à ce qui est le plus concret pour moi et me suis servie des actions que Bebarth avait déjà créées et qui correspondent tout à fait à mon besoin : générer un publipostage à partir d’un formulaire .pdf et d’un fichier de données ; générer autant de pdf pré-renseigné que de lignes dans le fichier de données.

    Mon fichier est bien enregistré en .csv, il est joint au formulaire .pdf et les deux sont enregistrés dans un même répertoire auquel j’ai accès en écriture.
    Les champs du fichiers .csv, sont bien identiques aux champs du formulaire .pdf

    J’ai ajouté l’action “Générer un formulaire” que Bebarth a déjà conçu. Je l’ai adaptée à mon formulaire et fichier en apportant les modifs au niveau des lignes newDoc et pour le nommage des fichiers générer après la fusion.

    Hier, cela a fonctionné mais uniquement pour la première ligne du tableau (donc la seconde en dessous de celle qui correspond aux champs). La fusion s’est arrêtée au champ “Adresse” (colonne 4). pour les champs “Tél. portable” (col 5) et “Téléphone fixe” col(6) il est indiqué “undefined” et puis plus rien pour les autres.
    Aujourd’hui, je n’ai plus de nouveau .pdf généré et enregistré correctement. J’ai juste l’ouverture d’un fichier pdf.tmp toujours pour la première ligne et avec les mêmes indications (comme ci-dessus) au niveau des champs (j’ai dû modifier quelque chose sans m’en rendre compte…)

    Voici les modifs que j’ai donc apportées au script pour les adapter à mes documents (certains champs sont volontairement anonymisés) :

    Code:
    // Initialisation
    var Chemin=this.path;
    var CheminSansExt=Chemin.substring(0,Chemin.length-4)
    // Importer l’unique PJ sans la nommer
    var p=this.getDataObject(this.dataObjects[0].name)
    var fichier=this.getDataObjectContents(p.name)
    var donnees=util.stringFromStream(fichier)
    // Séparation des rangées (saut de ligne)
    var rangees=donnees.split(“n”)
    // Séparation des colonnes (TAB)
    var colonnes=new Array();
    for (var i=1; i    colonnes=rangees.split(“;”);
        // Création d’un nouveau document
        var newDoc=app.newDoc();
        // Insertion de la/des page(s)
        newDoc.insertPages({cPath: Chemin});
        // Suppression de la première page générée à la création du document
        newDoc.deletePages(0);
        // remplissage des champs
        newDoc.getField(“Nom d’usage”).value=colonnes[1];
        newDoc.getField(“Nom de famille”).value=colonnes[2];
        newDoc.getField(“Prénoms”).value=colonnes[3];
        newDoc.getField(“Adresse”).value=colonnes[4];
        newDoc.getField(“Tél. portable”).value=colonnes[5];
        newDoc.getField(“Téléphone fixe”).value=colonnes[6];   
        newDoc.getField(“courriel”).value=colonnes[7]; 
        newDoc.getField(“Profession”).value=colonnes[8];
        newDoc.getField(“Employeur”).value=colonnes[9];
        newDoc.getField(“Champ 10”).value=colonnes[10];
        newDoc.getField(“Champ 11”).value=colonnes[11];
        newDoc.getField(“Champ 13”).value=colonnes[13];
        newDoc.getField(“Champ 14”).value=colonnes[14];
        newDoc.getField(“Champ 15”).value=colonnes[15];
        newDoc.getField(“Champ 17”).value=colonnes[17];
        newDoc.getField(“Champ 19”).value=colonnes[19];
        newDoc.getField(“Champ 21”).value=colonnes[21];
        newDoc.getField(“Champ 24”).value=colonnes[24];
        newDoc.getField(“Champ25”).value=colonnes[25];

        // etc. Le nom du champ correspondant au numéro de la colonne (basée sur 0)
        // Enregistrement “NomDuFichier (Nom d’usage Prénoms).pdf”
        newDoc.saveAs(CheminSansExt+” (“+colonnes[1]+” “+colonnes[3]+”).pdf”);
        // Fermeture du fichier
        newDoc.closeDoc();
    }
    // Message d’alerte
    app.alert(rangees.length-1+” formulaires individuels ont été créés.”,2);

    A votre avis, qu’est-ce qu’il ne va pas ? Faut-il que j’allège également le nom des champs ?

    #62060
    bebarth
    Maître des clés

    bonjour,
    Ton premier fichier s’est-il généré correctement ?
    As-tu un message d’erreur dans la console ?
    T’est-il possible de partager ton formulaire+pièce jointe (même partiel ou avec des données non réelles) sur le forum ou via ma messagerie perso ?
    @+
    :bonjour:

    #71278
    boucledore95
    Participant

    Bonjour à tous,

    Je reviens vers vous car je n’ai pas trouvé la solution à mon problème depuis toutes ces années et j’avais abandonné l’idée mais je me remets sur le dossier activement.

    Je réexplique : grâce à vous tous, je sais faire un publipostage de mes données excel vers un PDF. Maintenant, comme je crée un annuaire, je souhaiterai également que les photos soient mis automatiquement dans ce PDF. Elles sont actuellement enregistrées dans un dossier en JPEG ou en PDF. Il faudrait donc que le champs image me permette de récupérer la photo qui correspond à la personne inscrite dans les données juste à côté.

    Merci d’avance pour votre aide.

    Fred

     

    #71282
    bebarth
    Maître des clés

    bonjour,
    Je n’ai pas le temps de répondre plus en détail pour l’instant, mais il faudrait utiliser la méthode “importIcon” puis utiliser l’icône pour dans un bouton ou champ image.

    Malheureusement, pour être utilisée autrement qu’avec la console ou une action, cette méthode nécessite des privilèges, il faut donc créer n script d’application…

    @+
    😎

    #71283
    bebarth
    Maître des clés

    Voilà !
    Tu places le fichier “importIcon_boucledore95.js” dans le répertoire JavaScript d’Acrobat. Tu peux évidemment renommer ce fichier si tu le souhaites.
    Pour cet exemple, les photos (uniquement des fichiers .pdf) doivent être dans le même répertoire que le fichier “Identité & Photo_BB.pdf”, mais on peut en indiquer un autre du moment que tu as les droits d’accès.

    Tu me dis…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #71309
    boucledore95
    Participant

    Bonjour,

    Ca marche très bien. J’essaye de faire mon document et je reviens vers toi si problème.

    Une question : j’ai bien mis le doc dans le répertoire javascripts mais comment je fais pour voir ce qui est inscrit dedans, histoire d’essayer de comprendre ce que tu as fait 🙂

    Merci beaucoup pour tout 🙂

    #71311
    bebarth
    Maître des clés

    bonjour,

    …mais comment je fais pour voir ce qui est inscrit dedans…

    Tu peux le lire avec un éditeur JavaScript si tu en as un, sinon tu changes l’extension .js par .txt et tu l’ouvres avec un éditeur de texte ! Ça Fonctionne peut-être même directement…

    Sinon, voici le script :
    if (app.formsVersion>=8) {
    importIcon_boucledore95=app.trustedFunction(function(nomPhoto) {
    app.beginPriv();
    this.importIcon("laPhoto",nomPhoto);
    app.endPriv();
    })
    }

    @+
    😎

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