Copy link to clipboard
Copied
I feel like this should be easy to find, but for some reason it isn't.
If I have fields named Strata.1, Strata.2, Strata.3, Strata.4 etc... and I want to return the sum of all the Strata fields in a field named Strata_Total.
I know I can use the pull down menu and just choose Sum and select the checkbox for Strata.
But what is the actual script that is happening behind the curtain?
Copy link to clipboard
Copied
You can read about basic field scripting here:
https://www.pdfscripting.com/public/PDF-Form-Scripting.cfm
And specically about calculations here:
https://acrobatusers.com/tutorials/how-to-do-not-so-simple-form-calculations/
But since you've done such a great job of naming your fields, here's an advanced calculation script:
var sum = 0;
this.getField("Strata").getArray().forEach(a=> sum+=Number(a.value));
event.value = sum;
Copy link to clipboard
Copied
I would advise against using this type of notation. It's not compatible with earlier versions of Acrobat and Reader and will not work there. Instead, you should stick to plain "vanilla" JS syntax, like this:
var sum = 0;
var fields = this.getField("Strata").getArray();
for (var i in fields) sum+=Number(fields[i].value);
event.value = sum;
Copy link to clipboard
Copied
Hi There!
I am completely new to Java and working through building a PDF menu that will be sent through email and also accessed online for ordering purposes. I have a ton of fields (imagine foods on a restaraunt menu) and a variety of pricing for each item. I have created editable fields for the quantities of each item, which would be filled out by the person placing the order, and I have the pricing visible separately, not listed in a field.
Is there a way to create script to calculate each field by it's own price and then total at the bottom next to my "submit order button" that I've already connected?
This is the text I've entered into my Product_Total calculation script:
event.value = Number(this.getField("Product.1").valueAsString) * 12;
event.value = Number(this.getField("Product.2").valueAsString) * 10.5; event.value = Number(this.getField("Product.3").valueAsString) * 12; event.value = Number(this.getField("Product.4").valueAsString) * 9.5; event.value = Number(this.getField("Product.5").valueAsString) * 12; event.value = Number(this.getField("Product.6").valueAsString) * 9.5;
However, this doesn't create a summed total in the Product_Total box, just the last number in the script (9.5)
What should I be doing differently? Again, I know almost nothing at this stage, just learning by reading online and trial and error with the calculations, so any pointers would be helpful! Thank you in advance!
Copy link to clipboard
Copied
You doesn't create a sum of the values.
Copy link to clipboard
Copied
Okay, so it sounds like a sum of the values isn't possible? Or the way I'm creating the fields won't allow me to create a sum of
values?
Copy link to clipboard
Copied
To create a sum you must add the values.
Copy link to clipboard
Copied
Put the prices in an array and use this:
var price = [12,10.5,12,9.5,12,9.5];
var fields = this.getField("Product").getArray();
var total = 0;
for( var i=0; i<fields.length; i++){
if(fields[i].valueAsString !== "")
total += Number(fields[i].valueAsString)*price[i];}
event.value = total;
Copy link to clipboard
Copied
Thank you so much for sending this -- I tried entering this array as my script, and it seems to be totalling everything slightly off-kilter. If I enter values of 3 for each of these values on the editable form, I should get a sum of 198, but the form generates a total of 196.5. I've reviewed my fields in order to make sure they are listed correctly and that the values in the array correspond with the Field label and actual order on the menu; I've also tried plugging numbers in, but it looks like this script is also assigning the values to the fields in order from smallest to largest without regard to the typed order in the script, and not according to the order that they are input it. So, in other words, even though the script is entered as this:
var price = [12,10.5,12,9.5,12,9.5];
What is actually being applied to my form is:
var price = [9.5,9.5,10.5,12,12,12];
Any thoughts or other things that I could try to get this tightened up?
Copy link to clipboard
Copied
@Macaeli305345004brc It works correctly for me, do you have any other calculations?
Can you share your file?
Copy link to clipboard
Copied
You've written
event.value = Number(this.getField("Product.3").valueAsString) * 12; event.value = Number(this.getField("Product.4").valueAsString) * 9.5; event.value = Number(this.getField("Product.5").valueAsString) * 12; event.value = Number(this.getField("Product.6").valueAsString) * 9.5;
Let's tidy that up, it's very hard to see mistakes if it's untidy.
event.value = Number(this.getField("Product.3").valueAsString) * 12;
event.value = Number(this.getField("Product.4").valueAsString) * 9.5;
event.value = Number(this.getField("Product.5").valueAsString) * 12;
event.value = Number(this.getField("Product.6").valueAsString) * 9.5;
Do you see a problem yet? Ok, think about this
event.value=1;
event.value=2;
event.value=3;
What this does is set event.value first to 1; then it throws away the 1 and sets it to 2. Then it throws away the 2 and sets it to 3. So the problem is that you aren't doing anything to add the numbers together, you're just throwing all of them away except the last.
Copy link to clipboard
Copied
Gotcha! I really appreciate all the responses!
So what magic can I use to instruct these event numbers to update into the total field as the order quantities are updated by the person typing into the form?
Copy link to clipboard
Copied
You just have to add the numbers together
event.value = first thing + second thing + third thing + ...
Copy link to clipboard
Copied
Copy link to clipboard
Copied
@JR Boulaythat is old post.
Copy link to clipboard
Copied
Yes, I realised that too late.
😉