Skip to main content
Menni
Participating Frequently
Jun 5, 2020 10:31 AM UTC
Question

Instead of rename many fields -> Add and remove fields

Hello everybody,
I created a form from an Excel sheet. Acrobat has badly named many fields. I don't want to rename them all by hand. Instead I want to "read" the original fields, create a new one with a different name in the same position and then delete the old one.

I would like to test this in 12 fields (there is one on each of the 12 pages of the form). When creating the form, they were named as follows: Name / Name_2 / Name_3 / ... / Name_12.
To do this, I tried the following code in the console:

 

for(var i = 0; i < this.numFields; i++){
	var fName = this.getNthFieldName(i);
		
	if(fName.indexOf("Name") !== -1){
		var f = this.getField(fName);
		var fCoords = [];
		var fPage = (f.page + 1);

		fCoords = f.rect;
		this.addField(("Name." + fPage), "text", f.page, fCoords);
		this.removeField(f.name);
		fCoords.length = 0;
	}
}

 

It works as it should on 10 pages.

Only on page 1 (.page 0 / .name: "Name") and on page 10 (.page 9 / .name: "Name_10") not. On page 1, the field is only deleted, but no new one is created. Nothing happens on page 10. The Name_10 field remains and no new field is created.
I don't understand why this happens and would be very happy if someone can explain it to me and how I can solve the problem or do it better.

 

Thanks in advance for your help.

This topic is closed to new replies. Start a new post to keep the conversation going.

3 replies

Bernd Alheit
Community Expert
Community Expert
Jun 5, 2020 10:42 AM UTC

First create a array or list of the fields. Then use the array or list in the for loop.

Translate
Menni
MenniAuthor
Participating Frequently
Jun 5, 2020 1:17 PM UTC

Thank you both for the quick help!

Translate
Legend
Jun 5, 2020 10:41 AM UTC

Don't loop in this way. You are deleting something from the list you are processing. Every programmer does this at some time, it is like sitting on a tree branch you are sawing off. Normally, I'd say you must go BACKWARDS through the list of fields, not forwards. But even that doesn't seem safe because nowhere is there a rule that the new added field will be at the end of the list. I suggest that after each replace, you start the whole scan again. So use the loop to find a candidate, don't make the change inside the loop.

Translate