abracadabraPDF › Forums › PDF – Général › Publipostage PDF avec Excel
- Ce sujet contient 120 réponses, 2 participants et a été mis à jour pour la dernière fois par bebarth, le il y a 2 années et 5 mois.
-
CréateurSujet
-
11 janvier 2017 à 18:11 #45571marieMembre
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 -
CréateurSujet
-
AuteurRéponses
-
23 janvier 2020 à 15:14 #62044SBLONDELMembre
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=&][/font][font=&]
[/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]23 janvier 2020 à 19:58 #62045bebarthMaître des clés:tutut: , je ne pense pas pouvoir intégrer ce code html ou un bout dans du JavaScript !
Désolé.
@+
:bonjour:24 janvier 2020 à 07:13 #62046SBLONDELMembreAh mince, choux et carottes n’ont jamais fais bon ménage :Smiley01: merci A+ Stéphanie
24 janvier 2020 à 12:50 #62047MerlinMaître des clésj’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:
3 février 2020 à 15:27 #62048SBLONDELMembreBonjour 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; ivar 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.“});3 février 2020 à 15:43 #62049MerlinMaître des clésSi 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();3 février 2020 à 15:45 #62050SBLONDELMembrecool je teste.
merci,
Stéphanie3 février 2020 à 15:57 #62051SBLONDELMembregrrr 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();3 février 2020 à 18:15 #62052MerlinMaî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();3 février 2020 à 20:05 #62053bebarthMaître des clésDésolé, je n’ai pas reçu d’alerte…
@+
:bonjour:4 février 2020 à 12:26 #62054SBLONDELMembreMerci à tous les deux cela fonctionne.
Stéphanie4 février 2020 à 13:05 #62055MerlinMaître des clés:bonjour:
2 septembre 2021 à 15:56 #62056Mary31ParticipantBonjour à 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
2 septembre 2021 à 18:44 #62057bebarthMaître des clésbonjour,
As-tu téléchargé les fichiers proposés sur ce post ? Y en a-t-il un qui te convient ?
@+
:bonjour:3 septembre 2021 à 07:43 #62058MerlinMaî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/
8 septembre 2021 à 08:34 #62059Mary31ParticipantBonjour,
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 .pdfJ’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; icolonnes=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 ?
8 septembre 2021 à 10:08 #62060bebarthMaître des clésbonjour,
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:1 juillet 2022 à 16:27 #71278boucledore95ParticipantBonjour à 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
2 juillet 2022 à 09:36 #71282bebarthMaître des clésbonjour,
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…
@+
😎2 juillet 2022 à 17:41 #71283bebarthMaître des clésVoilà !
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.5 juillet 2022 à 14:38 #71309boucledore95ParticipantBonjour,
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 🙂
5 juillet 2022 à 16:57 #71311bebarthMaître des clésbonjour,
…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();
})
}
@+
😎 -
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.