Copy link to clipboard
Copied
I feel like I have asked this question before on the old acrobatusers.com forum but can't seem to find it...
Anyway, I create a lot of forms and use a lot of JavaScript in them. The form designs/features/functions are updated quite regularly, and I'd like to find out a way to make the process of adding the scripting back in not so tedious.
I can't seem to just copy and paste in JavaScript Panel > All JavaScripts or JavaScript Panel > Document Actions > Edit All
Is there a script or another way to do this or am I stuck with recreating document scripts and pasting scripts in each individual interactive object?
A little about my workflow:
I use InDesign CC to create the form layouts and fields and try to do as much in InDesign as possible. There are a few caveats and possibilities of issues between the two programs, but more often than not, I can manage around those issues.
Prior to InDesign having the capabilities of creating forms, I used to design the form in InDesign, export then lay out all of the fields by hand, which was again tedious. When I made updates to the design, I would replace the background in the PDF and move the fields around.
I learned the answer to this issue about two or three years ago.
It's to create a master script using the setAction Field Method as defined in the SDK. For document level scripts, I use the addScript method.
Once I create a master script, I'm able to make updates and then just run the script in the console. I put each string i
...Copy link to clipboard
Copied
Use your old workflow.
Copy link to clipboard
Copied
One can take of copy of the form you want the scripts and form fields from and replace the original page with the new page.
You can insert the old form into the new form and delete the old form, this will add all the document level scripts.
One can use and FDF to import document level scripts and other scripts.
Copy link to clipboard
Copied
Thank you gkaiseril​ for your suggestions. I've done both of your first two suggestions before in other forms.
I'm really looking for a scripted solution of some sort, if possible.
The issue with #1 is replacing pages will only bring over the layout graphics and nothing interactive on the new page, so that's not viable unless the update was something getting omitted.
#2 is more viable and could work, but more work to me than just adding the JavaScript actions. Again, it would add all the doc level scripts, but I'd be stuck with having to align all of the form fields to the "new" form as it won't merge the mouse-up script for the individual fields, just creates a new instance of it.
#3: I've done a little with FDF data. The issue with a lot of the forms I do is that for some reason, FDF data will destroy my button icons, so I typically use it in text only forms. I'm not familiar with how to import scripts with it, however.
Copy link to clipboard
Copied
I learned the answer to this issue about two or three years ago.
It's to create a master script using the setAction Field Method as defined in the SDK. For document level scripts, I use the addScript method.
Once I create a master script, I'm able to make updates and then just run the script in the console. I put each string in single quotes and concatenate with the + symbol. For scripts that I want a carriage return, I put \n before the ending single quote.
Here's an example:
//set buttons to read only, text to uppercase, and Title text color
for (var i = 0; i < this.numFields; i++) {
var fname = this.getNthFieldName(i);
var f = this.getField(fname);
var readoBtn = /(hover.+?\d+|blank\d+|click.\d+|cont_hide|hide\d+|hf\d+)/;
var sTitle = /title.+/;
if(f.name.match(readoBtn)) {
f.readonly = true;
}
if(f.type === "text"|f.type === "combobox") {
f.setAction("Keystroke", "event.change = event.change.toUpperCase();");
/**f.textFont = "MyriadPro-Regular";**/
if(f.name.match(sTitle)) {
f.textColor = ["RGB", (68/255), (158/255), (72/255)];
}
if(f.type === "combobox") {
f.commitOnSelChange = true;
}
}
}