Toutes mes réponses sur les forums
-
AuteurRéponses
-
bebarthMaître des clésbonjour,
Voici ce que j’ai en adaptant le script qui était dans le post indiqué.
Si le JavaScript est du charabia pour toi, j’espère que tu sauras te dépatouiller avec ça car je n’ai pas beaucoup de temps pour expliquer en ce moment… et les opérations de temps ne sont pas ce qui est de plus simple pour débuter !
Mais s’il doit y avoir quelques adaptations c’est faisable quand même !
@+
:bonjour:
bebarthMaître des clésbonjour,
Comment remplis-tu les heures ? Ce sont des champs j’espère ???
Je suppose qu’il faut remplir les heures d’arrivée et de départ !
Le total heures semaines est le total de toutes les lignes ???
@+
:bonjour:
bebarthMaître des clésbonjour,
je n’ai pas eu de problème, mais mieux vaudrait « Enregistrer sous un autre… » ton fichier !
Je te joins les fichiers docx et rtf.
@+
:bonjour:
bebarthMaître des clésbonsoir,
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 < this.numPages; 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:
bebarthMaî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:
bebarthMaître des clésBon 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 < this.numPages; 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:
bebarthMaî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:
bebarthMaître des clésbonjour,
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:20 mars 2018 à 10:18 en réponse à : Script JS – Duplication de pages et incrémentation sur chaque. #63660
bebarthMaître des clésbonjour,
…me génère autant de fichiers que de couvertures…
c’est ce que j’avais cru comprendre !
là je ne comprend plus bien. Les partitions des instruments à cordes sont différentes et proviennent de fichiers différents ? ou d’un seul ficher ?
A quoi correspond la question « Combien voulez-vous générer de parties ? » est-ce « …de copies ? »@+
:bonjour:20 mars 2018 à 08:02 en réponse à : Script JS – Duplication de pages et incrémentation sur chaque. #63658
bebarthMaître des clésbonjour,
Voici le script que je te propose et qui reprend les indications que j’ai trouvées dans ton script. La position des champs créés est à définir plus précisément. J’ai mis de l’Helvetica en police car je ne connais pas le nom à indiquer pour Garamond…Je pense que l’idée proposée par Merlin est plus logique car tu peux définir les champs que tu veux où tu veux et faire une mise en page un peu plus sophistiquée…
Sinon, on peu aussi créer un fichier « couverture » que l’on vient insérer en première page à la place de cette page blanche qui ne comporte que 2 blocs de textes !Je te joins également l’action Acrobat.
Code://Initialisation des variables
var Chemin = this.path;
var PathSansExt = Chemin.substring(0,Chemin.length-4);
var nbreParties = 0;
//Questions
var nomInstrument = app.response({
cQuestion: « Saisissez le nom de l’instrument : »,
cTitle: « Instrument »,
cDefault: « Violon »
});
while (nbreParties<1 | isNaN(nbreParties)) {
var nbreParties = app.response({
cQuestion: « Combien voulez-vous générer de parties ? »,
cTitle: « Nombre de parties »,
cDefault: « 1 »
});
var a = parseFloat(nbreParties);
}
for (i=1; i<=a; i++) {
// Nouveau document
var newDoc = app.newDoc();
//Pages insérées
newDoc.insertPages( {
nPage: newDoc.numPages-1,
cPath: this.path,
nStart: 0,
nEnd: this.numPages-1
});
// Construction des champs texte
var f = newDoc.addField(« Zone_Num », « text », 0, [200,250,250,400] )
f.value = i + « / » + nbreParties; // Texte du bas de page
f.alignment = « center »; // Alignement du texte
f.textSize = 20; // Corps du texte
f.textColor = color.black; // Couleur du texte
f.textFont = font.Helv; // Police du texte
var f = newDoc.addField(« Zone_Instrument », « text », 0, [400,400,300,300] )
f.value = nomInstrument; // Texte du bas de page
f.alignment = « center »; // Alignement du texte
f.textSize = 20; // Corps du texte
f.textColor = color.black; // Couleur du texte
f.textFont = font.Helv; // Police du texte
//Enregistrement
newDoc.saveAs(PathSansExt+ » (« +nomInstrument+ » « +i+ » sur « +nbreParties+ »).pdf »);
newDoc.closeDoc();
}@+
:bonjour:
bebarthMaître des clésbonsoir,
regarde ce post :
https://abracadabrapdf.net/forum/index.php/topic,3092.msg17935.html#msg17935
et si tu ne comprends pas, partage un fichier en explicant exactement ce que tu souhaiterais faire.
@+
:bonjour:
bebarthMaître des clésbonjour,
Ce que je ferais, c’est créer une action composée de 2 actions « Réduire la taille du fichier » et « Enregistrer » avec option « optimisation PDF », puis lorsque tu lances l’action, tu choisis soit « Ajouter des fichiers » soit « Ajouter un dossier ».
@+
:bonjour:19 mars 2018 à 17:17 en réponse à : Script JS – Duplication de pages et incrémentation sur chaque. #63656
bebarthMaître des clésbonjour,
Si je comprend bien, c’est le document initial complet auquel tu rajoutes une couverture numérotée !
Sur la couverture, il n’y a que les 2 zones de textes ???
Effectivement, les syntaxes JavaScript d’Acrobat ne sont pas exactement celles que tu as utilisées.
https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FJavaScript_API.htm
J’essaye de regarder ça pour demain.
@+
:bonjour:
bebarthMaître des clés…le plus simple pour connaitre le chemin à indiquer :
- Tu places un fichier à l’endroit où tu veux enregistrer tes nouveaux fichiers avec les noms des communes
- Tu ouvres ce fichier avec Acrobat
- Tu ouvres la console (cmd J sur mac, ce doit être ctrl J sur PC)
- Tu tapes « this.path; » puis la touche enter du clavier numérique
- Le chemin du fichier s’affiche dans la console
- Tu copies ce chemin, sans le nom du fichier
- Dans le script, tu modifies cette ligne
- [/list]
Code:newDoc.saveAs(repertoire+ville+ ».pdf »);
en
Code:newDoc.saveAs(« le chemin copié »+ville+ ».pdf »);- …en mettant les guillemets.
[/list]Normalement, si tu as les droits dans le répertoire, ça devrait fonctionner.
@+
:bonjour:
bebarthMaître des clésbonjour,
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:
bebarthMaître des clésbonjour,
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:
bebarthMaître des clésbonjour,
Le propre du bouton radio est de pouvoir lui attribuer plusieurs valeurs selon le bouton coché, ce qui évite d’avoir plusieurs variables…
Essaye d’adapter ce script de calcul (j’espère ne m’être pas trompé dans les formules) :Code:var a1 = this.getField(« rang »).value;
var tx = this.getField(« taux »).value;
var bt = this.getField(« bouton »).value;
switch (bt) {
case « boutonGauche »:
if (a1 >> 1) {
var res = a1*3.5;
} else {
var res = 3.5;
}
break;
case « boutonDroit »:
if (a1 >> 0) {
var res = 250+(a1-2)*50;
} else {
var res = 250
}
}
if (a1 == 0) var res = 0;
this.event.target.value = res * tx;Pour ma part, je ne suis pas professeur de JavaScript, mais je ne suis pas favorable à supprimer le « this. » même si on ne travaille qu’avec un seul fichier ouvert et qu’il peut paraître inutile.
@+
:bonjour:13 mars 2018 à 11:05 en réponse à : Enregistrement de formulaire : autoriser seulement une copie #63561
bebarthMaître des clésbonjour,
Si le document doit être ouvert plusieurs fois, il faudrait peut-être rajouter une ligne pour supprimer le script de document :Code:app.execMenuItem(« SaveAs »);
this.removeScript(« monScript »); // « monScript » est le nom du script de document créésinon, à chaque ouverture, on aura la fenêtre d’enregistrement sous…
@+
:bonjour:
bebarthMaître des clésJ’avais fait ce fichier dans un post précédent.
Regarde si on pourrait l’adapter à ton problème.
@+
:bonjour:
bebarthMaître des clés…oui, mais le formulaire généré pour envoyer au client est fait à partir d’Acrobat Pro ou d’Adobe Reader ?
@+
:bonjour:
bebarthMaître des clésJe viens de m’apercevoir que je t’ai dis une bêtise…
en script de document, il faut écrire :Code:var ok = « OK »;sinon, plus de message !
Lorsqu’on aplati les champs, ce ne sont plus des champs (donc plus modifiables). Les valeurs des champs sont assimilées à du texte.
fait un essai et tu comprendras certainement mieux.
@+
:bonjour:
bebarthMaître des clésbonjour,
Je te conseille déjà de faire des essais sur des copies de fichiers….
Si tu enregistres et que ton fichier n’est pas aplati, tu auras ce message (cf. copie d’écran).
Si OUI, les champs sont aplatis tu ne peux donc plus les modifier. Si NON tu peux encore les modifier.
Lorsque les champs sont aplatis, il n’y a plus de message !
@+
:bonjour:
bebarthMaître des clésbonjour,
et quelle sera l’utilisation finale ? avec Adobe Reader ???
@+
:bonjour:
bebarthMaître des clésbonjour,
Je ne sais pas ce que pensera Merlin sur le principe, mais si tu colles :Code:var ok = « pas OK »;en script de document, et ce script :
Code:try {
if (ok== »OK ») {
var enreg = app.alert({
cMsg: « u0041u0076u0065u007Au002Du0076u006Fu0075u0073u0020u0074u0065u0072u006Du0069u006Eu00E9u0020u0064u0065u0020u0072u0065u006Du0070u006Cu0069u0072u0020u006Cu0065u0020u0066u006Fu0072u006Du0075u006Cu0061u0069u0072u0065u0020u003Fu000Du0020u000Du0041u0054u0054u0045u004Eu0054u0049u004Fu004Eu000Du0020u000Du2022u0020u0053u0069u0020u004Fu0055u0049u0020u0076u006Fu0075u0073u0020u006Eu0065u0020u0070u006Fu0075u0072u0072u0065u007Au0020u0070u006Cu0075u0073u0020u006Cu0065u0020u006Du006Fu0064u0069u0066u0069u0065u0072u002Eu000Du2022u0020u0053u0069u0020u004Eu004Fu004Eu0020u0076u006Fu0075u0073u0020u0070u006Fu0075u0072u0072u0065u007Au0020u006Cu0065u0020u006Du006Fu0064u0069u0066u0069u0065u0072u0020u0075u006Cu0074u00E9u0072u0069u0065u0075u0072u0065u006Du0065u006Eu0074u002E »,
cTitle: « Formulaire rempli »,
nIcon: 2, nType: 2
});
if (enreg==4) {
this.flattenPages();
this.removeScript(« ok »);
this.addScript(« ok », « var ok = « pas OK »; »);
}
}
} catch(e) {}en script d’action, cela devrait correspondre à ce que tu veux faire tout en permettant l’enregistrement si le formulaire n’est pas définitivement complété !
Pour commentaires…
@+
:bonjour:
bebarthMaître des clés…pas mieux !!!
Maintenant que tu sais comment on fait, lorsqu’on indique les 2 paramètres on peut simplifier l’expression par :
this.deletePages(5,7);
this.deletePages(1,3);
On est obligé de spécifier nStart ou nEnd que lorsqu’on indique un seul paramètre.
@+
:bonjour:
bebarthMaître des clésbonjour,
Non, impossible !
app.newDoc() et saveAs() ne peuvent être exécutés avec un script de bouton.
@+
:bonjour:
bebarthMaître des clés…et voilà !
@+
:bonjour:
bebarthMaître des clés…et quelles sont ces pages imposées ?
@+
:bonjour:
bebarthMaître des clésbonjour,
autant j’avais cru comprendre :Exemple j’ai 40 pages mais je veux enregistrer de la 5 à la 10 par exemple.
…et c’est ce que fait l’action que je t’ai proposé, autant que je n’ai absolument rien compris de ta dernière explication ! :Euuuh:
C’est certainement très clair quand on baigne dedans, c’est pour cela que je préfère que l’on partage un fichier exemple. C’est souvent plus compréhensible.
@+
:bonjour:
bebarthMaître des clés…attention à ne pas mettre d’espace(s) dans les noms de champs lorsqu’on utilise le JavaScript !
Y’en a qu’ont essayé, ils ont eu des problèmes ! :geek:@+
:bonjour:
bebarthMaître des clésbonjour,
A mettre en script de calcul :Code:var boutonRadio=this.getField(« RADIO1 »).value;
var totalOption=this.getField(« total option »).value;
switch (boutonRadio) {
case 2 :
var remise=5;
break;
case 3 :
var remise=10;
break;
case 4 :
var remise=15;
break;
default:
var remise=0;
}
this.event.target.value= totalOption-(totalOption*remise/100);@+
:bonjour:
bebarthMaître des clésbonjour,
Voici ma proposition qui est une action à importer (double clique sur le fichier .sequ) puis à lancer.
Le fichier des pages extraites est enregistré dans le même répertoire.
@+
:bonjour:
bebarthMaître des clés…du coup, en script de champ désactiver, on pourrait ajouter :
Code:if (this.event.value== » » || this.event.value==null) {
app.alert({cMsg: »Vous devez obligatoirement entrer un montant. », nIcon:2});
this.getField(« TTC »).setFocus();
};pour ne pas laisser la cellule vide !
@+
:bonjour:
bebarthMaître des clésOK ! J’allais proposer de mettre le script en « champ désactivé ».
Code:var moyenne= this.event.value/(this.getField(« stagiaires »).value+ this.getField(« formateurs »).value);
if (moyenne > 12) {
app.alert({cMsg: »Le montant indiqué est supérieur au maximum autorisé de 12 €/personne. », nIcon:2});
this.event.target.value=0;
this.getField(« TTC »).setFocus();
};@+
:bonjour:
bebarthMaître des clés??? pas de message pour moi !!! :Euuuh:
bebarthMaître des clésici le curseur retourne dans le champ, donc si l’on indique encore une mauvaise valeur on aura toujours le message d’alerte !
@+
:bonjour:
bebarthMaître des clésbonjour,
Voici ma proposition :Code:var moyenne= this.event.value/(this.getField(« stagiaires »).value+ this.getField(« formateurs »).value);
if (moyenne > 12) {
app.alert({cMsg: »Le montant indiqué est supérieur au maximum autorisé de 12 €/personne. », nIcon:2});
this.getField(« TTC »).setFocus();
};this.getField(« TTC »).setFocus() repositionne le curseur dans le champ si la moyenne est supérieure à 12.
@+
:bonjour:
bebarthMaître des clésbonjour,
Pour le script de Merlin, tu le colles là (cf. copie d’écran) et tu changes le nom du champ !
…et là, d’un seul coup, tu viens de passer de « boulet » à « calot » ! :bravo:
@+
:bonjour:
bebarthMaître des clés2 réponses simultanées…
bebarthMaître des clésbonjour,
La bonne nouvelle, c’est qu’il n’y a pas besoin de javascript pour faire ça. La mauvaise, c’est qu’à cause de ça tu va rester une bille… pour aujourd’hui ! :joker:
Voici un fichier et une capture d’écran pour t’indiquer comment faire.
Demande si tu n’as pas compris.
@+
:bonjour:
bebarthMaître des clésre-bonjour,
Je viens de réaliser que j’ai oublier de te signaler que dans l’exemple précédent il y a un script de document pour vérifier à l’ouverture si des cases sont cochées ou non.
Dans le nouveau fichier joint, plus de script de document et on vérifie toutes les cases à chaque action.
Tu as le choix…
@+
:bonjour:
bebarthMaître des clésbonjour,
Ce qui ne va pas dans tes scripts, c’est qu’on ne peut pas indiquer comme ça (avec nPage) où il faut insérer le « template » sans tenir compte des « slides » précédents !
Ça marche avec le premier slide parce comme l’indique « premier » il n’y en a pas d’autre avant, mais pour les autres cela fonctionne uniquement si les slides précédents sont affichés.
Dans le fichier que je te propose, chaque slide possède une variable qui indique s’il est affiché ou pas. Ensuite, pour insérer le template on aditionne les variables des slide déjà affichés.
Il y avait déjà eu un post similaire à ce sujet : https://abracadabrapdf.net/forum/index.php/topic,3173.msg18509.html#msg18509
J’espère que j’ai été clair. Tu me dis.
@+
:bonjour:
bebarthMaître des clésbonjour,
C’est typiquement l’exemple où il serait bon de partager un fichier pour faciliter l’explication.
Regarde cette page :
https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FDoc_methods.htm%23TOC_spawnPageFromTemplatebc-105&rhtocid=_6_1_8_23_1_104
@+
:bonjour:5 mars 2018 à 17:59 en réponse à : Enregistrement de formulaire : autoriser seulement une copie #63553
bebarthMaître des clésbonjour,
Dans les informations du document, tu as la possibilité de choisir « Modèle » ou « Verrouillé ».
« Modèle » enregistrera automatiquement ton fichier en tant que copie dans le même répertoire (avec ajout de « copie » dans le nom du fichier).
Avec « Verrouillé » tu auras un avertissement et on te proposera d’enregistrer ton fichier sous…
Sinon, Alex avait proposé une solution très bien pensée (script d’action) dans ce post avec un avertissement personnalisable : https://abracadabrapdf.net/forum/index.php?topic=3232.0
@+
:bonjour:
bebarthMaître des clésre-bonjour,
Je n’avais pas regarder la copie d’écran et apparemment les cases à cocher sont bien en page 1… mais bon, maintenant tu sauras comment aller sur une autre page en javascript !
Ce n’est peut-être pas très « prudent » de laisser un numéro de téléphone sur un post !
Si tu cherches de l’aide pour ton projet, pose tes problèmes sur différents posts du forum. Lorsque ça devient un peu plus compliqué, il est préférable de partager un fichier exemple. C’est généralement plus simple à comprendre.
Tu peux également me contacter par Messagerie Personnelle si tu penses ne pas pouvoir/devoir partager des informations trop confidentielles. Je verrai ce que je peux faire pour t’aider.
@+
:bonjour:
bebarthMaître des clésbonjour,
…et si les cases à cocher ne son pas en page 1 mais que tu ne connais pas le numéro de la page, avant le script tu ajoutes :Code:var pg = this.pageNum;et après le script :
Code:this.pageNum = pg;@+
:bonjour:
bebarthMaître des clésNe pas pouvoir copier des données, c’est un peu le but des fichiers protégés ! :mur:
Sinon ils ne le sont pas…
@+
:bonjour:1 mars 2018 à 13:35 en réponse à : Précocher par défaut une case à cocher d’après un bouton radio #63523
bebarthMaître des clésre-bonjour,
Voici ma version avec de vrais boutons radio. Ce qui change dans ce cas avec les boutons radio c’est qu’il n’y a pas besoin de conditions puisqu’un seul peut être coché !
Dans cette version, lorsque l’on change de bouton, seule la case indiquée est cochée alors qu’avec la version de Merlin les cases cochées se cumulent… mais c’est peut-être le but recherché.
Par contre, si on change l’état d’une des cases à coché, le bouton radio ne change pas (tous pourraient redevenir non cochés).
@+
:bonjour:1 mars 2018 à 12:02 en réponse à : Précocher par défaut une case à cocher d’après un bouton radio #63519
bebarthMaître des clésbonjour,
Pour cocher une case ou un bouton par défaut, il y a juste une case à cocher. Pour la suite, je pense qu’il va valloir quand même y passer…
Dans tes instructions : « …est coché par défaut mais modifiable », cela signifie que si l’on modifie l’état de la case CC, l’état du bouton radio BR change aussi ou reste coché ???
@+
:bonjour:
bebarthMaître des clésPour moi, « …from script embedded within the document » signifie que le script doit être incorporé dans le document, donc pas d’un document à un autre ! Ou me trompè-je ? (autant la langue française est belle, autant là il y a matière à discussion).
@+
:bonjour:
bebarthMaître des clésbonjour,
Pareil !!! le nombre d’heures que j’ai pu passer à cause d’une instruction male écrite…
Lorsqu’on débute, écrire en javascript directement dans Acrobat n’est pas ce qui est le plus évident, surtout quand on commence à enchaîner les conditions…
Je conseil d’utiliser un éditeur qui signale les erreurs de syntaxes, puis de copier/coller dans Acrobat. Moi j’utilise Dreamweaver parce que j’ai une suite Adobe, mais il y en a certainement d’autres gratuits qui font ça aussi bien. Je pense que Merlin peut nous en conseiller (Mac & PC).
@+
:bonjour:
bebarthMaître des clésbonjour,
https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FField_methods.htm%23TOC_buttonSetIconbc-6&rhtocid=_6_1_8_31_2_5
Ici la note qui indique que buttonSetIcon n’est permis qu’à l’intérieur d’un document ! Pourquoi ???
@+
:bonjour:
bebarthMaître des clésbonjour,
…essaye avec this.pageNum !
@+
:bonjour:
bebarthMaître des clésbonjour,
Je n’arrive pas à « copier » l’icone d’un fichier à l’autre (alors que je ne vois pas de restriction & cf. fichier swap…), j’importe donc la page, puis je vais chercher l’icone et enfin je supprime la page importée.
Attention :- « this.disclosed = true; » n’est aps une fonction en script de document, sinon if faut appeler cette fonction.
- ici, les champs du fichier « Fichier_LIER » ont été renommés pour ne pas avoir les mêmes noms que ceux des champs importés
[/list]Tu me dis si ça te vas !
Merlin,
Vois-tu une explication sur le fait que je n’arrive pas à aller chercher directement l’icone dans l’autre fichier ?@+
:bonjour:
bebarthMaître des clés…j’ai oublié de mettre le bouton radio en lecture seule !
@+
:bonjour:
bebarthMaître des clésbonjour,
A première vue je ne pense pas que ce soit réalisable, mais je vais regarder car je n’ai jamais fait ça !
si l’image a un nom « Image-2 » c’est une pièce jointe ?
@+
:bonjour:
bebarthMaître des clésbonjour,
pourquoi 4 noms de bouton radio ? un seul suffit avec des valeurs différentes puisqu’il ne peut y avoir qu’une seule condition requise…
J’ai ajouté un script de touches personnalisé pour être sur de ne rentrer que des chiffres entiers !
@+
:bonjour:
bebarthMaître des clésAprès avoir lu la page indiquée par Merlin, voici pour t’aider…
Pour charger l’action, tu double-cliques le fichier .sequ
Tu pourras ensuite regarder le script et voir si tu peux l’adapter !
@+
:bonjour:
bebarthMaître des clésbonjour,
Premièrement, Il faut que tes fichiers 1 & 2 possèdent un script de document :Code:this.disclosed = true;https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FDoc_properties.htm%23TOC_disclosedbc-12&rhtocid=_6_1_8_23_0_11
Ensuite, pour des raisons de sécurité, le script ci-dessous ne sera réalisable qu’à partir d’une action :Code:var Chemin = this.path;
var Dossier = Chemin.substring(0,Chemin.length-this.documentFileName.length);
var otherDoc = app.openDoc({
cPath: Dossier+ »Fichier_1.pdf »,
});
var champA= otherDoc.getField(« A »).value;
otherDoc.closeDoc();
var otherDoc = app.openDoc({
cPath: Dossier+ »Fichier_2.pdf »,
});
var champB= otherDoc.getField(« B »).value;
otherDoc.closeDoc();
this.getField(« C »).value= champA+champB;…script à adapter, of course !!!
Dans ce script, tous les fichiers sont dans le même répertoire.
@+
:bonjour:
bebarthMaître des clés…il manque un else !
Code:for (var i=0; ivar oFld = this.getField(this.getNthFieldName(i));
if((oFld.type == « text ») && (oFld.valueAsString == oFld.defaultValue)) {
oFld.textColor = color.white;
} else {
oFld.textColor = color.black;
}
}
@+
:bonjour:
bebarthMaître des clésbonjour,
de tête, comme ça, je ne pense pas que l’on puisse récupérer le script d’un champ afin de le modifier !
Mais vu que l’on récupère et affiche les valeurs des formulaires, il ne devrait pas y avoir besoin de calculs. :doute:
peut-être je n’ai pas compris quelque chose !
@+
:bonjour:
bebarthMaître des clésbonjour,
personnellement je ne pense jamais à utiliser les scripts des actions du document ! :bravo:
J’aurais fait une usine à gaz pour arriver à ce résultat !!!
Si les champs ont un fond, il faudra utiliser « oFld.textColor = color.transparent » plutôt que « oFld.textColor = color.white » !
Et si les textes ont des couleurs différentes, il faudra stocker les stocker dans une table avant de les récupérer.
Je dis ça au cas ou car cela m’arrive fréquemment d’avoir des fonds de champs et des couleurs de textes différents mais on ne m’a jamais demandé de cacher les valeurs à l’impression…
@+
:bonjour:
bebarthMaître des clésbonjour,
…et merci pour tes remerciements que je réitère moi-même à Merlin vu le nombre d’heures qu’il consacre à son forum ! :bravo:
Je dis toujours que lorsque l’on donne ce n’est pas pour recevoir, mais ça fait quand même plaisir de recevoir de temps en temps…
Certaines fois on a aucun retour alors que l’on s’est creusé la tête pour trouvé une solution. Même pas : « ça marche pas ! » ou « ça marche ! ».En ce qui concerne la duplication des champs, je te conseille de lire cette page :
https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/duplication-rapide-de-champs-de-formulaire/
Tu comprendras certainement mieux l’indexation des champs et la facilité des calculs sur ces champs dupliqués.
Dans ton cas, il faut donner des valeurs d’exportation à chaque élément de la première liste et cocher « Valider la valeur sélectionnée immédiatement ». Ensuite il n’y a plus qu’à dupliquer….
@+
:bonjour:
bebarthMaître des clés…voici !
j’ai mis le champ « moyenne » sur la première page.
Regarde un peu la différence avec ton fichier original.
j’espère que tu comprendras sinon dis-moi, j’expliquerai !
@+
:bonjour:
bebarthMaître des clésbonjour,
Code://pour passer le texte en blanc
this.getField(« myField »).textColor = color.white;
//pour passer le texte en noir
this.getField(« myField »).textColor = color.black;Pour plus d’informations sur les couleurs :
https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2Fcolor_properties.htm
@+
:bonjour:
bebarthMaître des clésbonjour,
c’est effectivement possible en javascript, mais la façon de faire dépend un peu de comment sont identifiés les champs…
Si tu avais un fichier exemple à partager on pourrait adapter le script !
@+
:bonjour:
bebarthMaître des clésbonjour,
on va commencer par ajouter un script de document à ton fichier formulaire original.
Tu ouvres ce fichier puis la console Acrobat (« cmd j » sur Mac et je présume « ctrl j » sur PC).
Dans la fenêtre de la console tu va taper (ou coller) ce code :Code:this.addScript(« Disclosed », « this.disclosed = true; »);puis la touche ENTREE (et non RETOUR LIGNE). Le script de document a bien été créé.
Tu enregistres ton fichier original (ça c’est fait !).
Tu fais une copie de ce fichier que tu renommes comme tu veux (le miens, c’était « Fusion de Formulaires.pdf »).
Ensuite, outil : Traitement du document -> Modèles de page.
Tu crées un modèle nommé « vide » (c’est le nom que j’ai donné dans mon script),-> Ajouter, …le template « vide » est créé, tu ferme la fenêtre.
Retour à la console, tu tappes (ou colles) :Code:this.spawnPageFromTemplate(« vide », this.numPages, false, false);puis la touche ENTREE.
Retour à la fenêtre de Modèles de page où tu vas cliquer sur l’oeil à gauche de manière à le faire disparaitre.
Tu fermes la fenêtre et tu enregistres. C’est fini ! tu peux maintenant utiliser l’action avec tes formulaires…
J’espère avoir été clair et ne rien avoir oublié !
Tu me dis…
@+
:bonjour:
bebarthMaître des clésBonjour,
Il faut créer le template du fichier à partir d’un fichier final et définitif !!! Sais-tu faire ça ???
Sinon on pourra voir ça demain.
@+
:bonjour:
bebarthMaître des clés…la suite.
Tu essayes comme ça et on verra après si on peut adapter à tes besoins !
@+
:bonjour:
bebarthMaître des clésbonjour,
voici vite fait quelques copies d’écrans pour t’aider à démarrer :- tu décompresses le fichier .zip
- tu double-cliques le fichier .sequ pour installer l’action (donc uniquement la première fois).
- tu lances le fichier « Fusion de Formulaires.pdf »
- tu lances l’action
- tu remplis les champs (ici « fichier 1 » et « fichier 2 » comme dans le répertoire, mais tu peux indiquer d’autres noms…)
- tu termine avec un champ vide
- c’est fini, les formulaires sont compilés en un seul
[/list]@+
:bonjour:
bebarthMaître des clés…j’ai toujours dis UN icone !
Il est vrai que ce n’est pas très clair.
@+
:bonjour:
bebarthMaître des clésbonjour,
Sur MacOS X c’est entre 0 , 1 et 2 qu’il n’y a pas de différence pour le paramètre nIcon.
Petite correction : Sur MacOS X c’est entre 1 , 2 et 3 qu’il n’y a pas de différence pour le paramètre nIcon.
La valeur 0 du paramètre donne une icône différente.
Je viens de vérifier et je ne sais pas comment sont les autres icônes sur PC, ni pourquoi y a-t-il une différence Mac/PC ???
@+
:bonjour:
bebarthMaître des clésSi tu veux regarder les copies d’ecran De ce post, c’est exactement le même principe :
https://abracadabrapdf.net/forum/index.php?topic=3410.0
Sinon je te ferai des copies d’ecran Plus tard !@+
:bonjour:
bebarthMaître des clés…et pourquoi 2 boutons ?
@+
:bonjour:
bebarthMaître des clés
bebarthMaître des clésre-bonjour,
moi je n’y connais pas grand chose en porte document alors j’ai créé une action avec un script qui (je crois) correspond à ce que tu voulais faire.
Il faudra bien sur importer l’action la première fois puis on ouvre le fichier « Fusion de Formulaires » et on lance l’action.
Ici ça fonctionne avec les 2 fichiers joints mais if faudra adapter le script en fonction du formulaire final !
@+
:bonjour:
bebarthMaître des clésbonjour,
si ça marche comme ça, c’est plus simple !!!
@+
:bonjour:
bebarthMaître des clésUne action qui importerait chaque formulaire en indexant les champs qui n’auraien Donc plus les mêmes noms !
Les noms des fichiers ont-ils une base commune ?
@+
:bonjour:
bebarthMaître des clésje pense que comme ça il n’y a pas grand chose à faire… alors que peut-être avec un script !
bebarthMaître des clésA mon avis lorsqu’on insère une page à partir d’un template, cela devient une page et n’a plus de lien avec le template (c’est clair ??? :doute: ).
il faudrait donc vérifier par exemple le nom d’un champ de la dernière page et voir ce champ est également sur le template…
@+
:bonjour:
bebarthMaître des clés…ça j’ai bien compris, mais comment procèdes-tu ???
Tu ouvres un formulaire, puis avec le menu « Insérer des pages » tu importes l’autre ? ou avec un script ?
Comment se nomment et où se trouvent ces formulaires ? dans le même répertoire ?
Uniquement 2 formulaires à combiner ?
Ça demande un peu plus de précision…
@+
:bonjour:
bebarthMaître des clésbonjour,
on a le droit de voir le fichier ?
Sur le dernier que tu as posté il n’y a pas de bouton reset ni le template indiqué.- 3 fois delete… https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FDoc_methods.htm%23TOC_deletePagesbc-20&rhtocid=_6_1_8_23_1_19
- A mon avis tu devrais plutôt écrire :
this.spawnPageFromTemplate(« signatairesentrant », this.numPages, false, false);
Pourquoi nPage:16 si c’est pour insérer en dernière page ?
https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FDoc_methods.htm%23TOC_spawnPageFromTemplatebc-105&rhtocid=_6_1_8_23_1_104
[/list]@+
:bonjour:
bebarthMaître des clésbonjour,
comment les fusionnes-tu ? tu en importes un à la suite de l’autre… ou à partir d’un troisième document ?
Il faudrait indexer les champs importés ! aucun champ ne reste commun ???
@+
:bonjour:
bebarthMaître des clésbonjour,
dans ce cas, tu supprimes les lignes :Code://Créer un rectangle sur le mot trouvé
var q = this.getPageNthWordQuads(p, i);
…
// Epaisseur des bords
l.borderWidth = 2;@+
:bonjour:
bebarthMaître des clésbonsoir,
pourquoi ne charges-tu pas l’action ??? juste un double clique sur le fichier .sequ puis tu la lances (cf. copies d’écrans).
Je viens de chercher le mot « document » et extraire les pages dans l’api reference (779 pages) sans aucun problème en un peu plus de 5 minutes !!!
@+
:bonjour:13 février 2018 à 17:21 en réponse à : Assistant d’action / lancement d’une action depuis un script #63370
bebarthMaître des clés…j’ai encore un peu de mémoire ! :geek:
bebarthMaître des clésbonjour,
… je vais regarder cela.??? je ne sais pas ce que tu vas regarder car tu ne m’as pas dis quels champs devaient être réinitialisés !
… Cependant, la signature reste alors que je voudrais l’enlever.Comment veux-tu l’enlever et comment reste-t-elle ??? Aurais-tu un fichier à partager ?
…par contre, je ne vais pas être dispo aujourd’hui !!!
bonne journée.
@+
:bonjour:13 février 2018 à 06:58 en réponse à : Assistant d’action / lancement d’une action depuis un script #63367
bebarthMaître des clésbonjour,
Il me semble que tu as déjà eu une réponse il n’y a pas si longtemps que ça ! :Smiley03:
https://abracadabrapdf.net/forum/index.php/topic,3345.msg19643.html#msg19643
@+
:bonjour:
bebarthMaître des clésbonjour,
quels sont les champs à ne pas réinitialiser ou ceux à réinitialiser, selon…
@+
:bonjour:
bebarthMaître des clésbonjour,
essaie plutôt comme ça :Code:switch (this.getField(« Text5 »).value) {
case « Essai-1 »:
this.getField(« Donnees-1 »).display = display.visible;
this.getField(« Donnees-2 »).display = display.hidden;
this.getField(« Donnees-3 »).display = display.hidden;
this.getField(« Donnees-4 »).display = display.hidden;
break;
case « Essai-2 »:
this.getField(« Donnees-1 »).display = display.hidden;
this.getField(« Donnees-2 »).display = display.visible;
this.getField(« Donnees-3 »).display = display.hidden;
this.getField(« Donnees-4 »).display = display.hidden;
break;
case « Essai-3 »:
this.getField(« Donnees-1 »).display = display.hidden;
this.getField(« Donnees-2 »).display = display.hidden;
this.getField(« Donnees-3 »).display = display.visible;
this.getField(« Donnees-4 »).display = display.hidden;
break;
default:
this.getField(« Donnees-1 »).display = display.hidden;
this.getField(« Donnees-2 »).display = display.hidden;
this.getField(« Donnees-3 »).display = display.hidden;
this.getField(« Donnees-4 »).display = display.visible;
}@+
:bonjour:
bebarthMaître des clésbonjour,
voici donc une action que j’ai créé à partir de 2-3 scripts déjà réalisés (il reste peut être quelques variables inutiles…).
Ici, pour accélérer le processus, je ne vérifie qu’une fois si le mot est présent sur la page, puis passe à la page suivante.
J’ai fait quelques vérifications et cela fonctionne. J’espère n’avoir rien oublié, sinon merci de me signaler le/les problèmes(s).
@+
:bonjour:
bebarthMaître des clésbonjour,
je pense que je devrais avoir quelque chose pour toi !
Je n’aurais pas le temps de regarder ce weekend, mais promis dès lundi.
@+
:bonjour:
bebarthMaître des clésbonjour,
Ce n’ai pas du « tout simple » mais j’ai déjà fait quelque chose comme ça…
Même question que Merlin : au final tu veux des fichiers individuels ou un seul fichier final ?
@+
:bonjour:6 février 2018 à 15:23 en réponse à : Rendre le PDF non modifiable au moment de l’envoi par mail #58296
bebarthMaître des clésbonjour,
si l’on crée le bouton sur Acrobat Pro avec une action « Envoyer un formulaire », ça fonctionne également sur iPhone/iPdad !
Le souci c’est le javascript qui n’est pas totalement compris par ces téléphones et tablettes.
@+
:bonjour:
bebarthMaître des clésVoici une proposition qui devrait te permettre de voir ce que l’on peut faire.
J’espère que tu comprendra comment faire, sinon il faut te plonger dans ces 2 pages :
https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FDoc_methods.htm%23TOC_addField1bc-2&rhtocid=_6_1_8_23_1_1
et
https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FField_properties.htmJe ne sais pas s’il est possible de récupérer d’un seul coup TOUTES les propriétés d’un champ. Peut-être Merlin peut nous dire…
@+
:bonjour:5 février 2018 à 09:20 en réponse à : Rendre le PDF non modifiable au moment de l’envoi par mail #58289
bebarthMaître des clésbonjour,
Désolé mais je ne suis pas très au courant des problèmes rencontrés avec les tablettes… à par qu’il y a des soucis avec le javascript.
@+
:bonjour:
bebarthMaître des clésbonjour Merlin,
…dupliquer des rangées de champs ce n’est possible qu’avec LiveCycle Designer.
…disons que c’est assez compliqué avec Acrobat Pro ! Mais on peux créer des champs et en déplacer d’autres.
@+
:bonjour:
bebarthMaître des clésbonjour,
Personnellement je n’ai pas bien compris !
Tu veux rajouter des champs en décalant les autres ou une page de formulaire ?
@+
:bonjour:3 février 2018 à 14:48 en réponse à : Rendre le PDF non modifiable au moment de l’envoi par mail #58287
bebarthMaître des clés…je viens d’essayer et ça fonctionne.
Ne pas oublier de sauvegarder avant d’envoyer si tu veux garder le document non aplati en local…
@+
:bonjour: -
AuteurRéponses
