Copy link to clipboard
Copied
I have created a pdf file and I'd like to have a field with sequential numbers.
For instance, if I open my pdf now and it has number 1 in the field, 'd like to have number 2 in the field the next time that I open the file, and so on...
Copy link to clipboard
Copied
Go to Tools - JavaScript - Document JavaScripts and create a new script with the following code (remove any default code that's inside the window when you first open it):
var f = this.getField("Serial Number");
f.value = Number(f.value)+1;
f.defaultValue = f.value;
Of course, you'll might need to adjust the field name in the first line of code.
Copy link to clipboard
Copied
Go to Tools - JavaScript - Document JavaScripts and create a new script with the following code (remove any default code that's inside the window when you first open it):
var f = this.getField("Serial Number");
f.value = Number(f.value)+1;
f.defaultValue = f.value;
Of course, you'll might need to adjust the field name in the first line of code.
Copy link to clipboard
Copied
Thank you so much. It worked.
Copy link to clipboard
Copied
This solution works great if you save the form each time after the new number count is generated.
Is there a way to have a form do a +1 each time it is opened without having to save the form?
I want to be able to give a customer a bill of lading and each time they open the blank form it generates a new auto BOL number that is +1 from the last time they opened it.
Copy link to clipboard
Copied
How do you want the serial number field to act if the form has been assigned a serial number?
There are a lot of issues that need to be worked out for this to work well.
If the customer has it on his/her own machine how do you control the numbers across all your customers?
Will the form always be open on a machine that is always connected to the internet?
Copy link to clipboard
Copied
It will be a unique identifier number for that document whether printed, saved or emailed.
It is a pdf form with submit buttons, so the form information can be submitted via email as well as saved to the users computer if they wish.
If the number happens to reset with a new user on a different computer that is fine. I have decided that each user will have another field to enter their initials or a number unique only to them that will prevent confusion on duplicate numbers. For example: AB4583 (hard coded #)-______ (unique number propagates here) - _____ (User enters their initials or # here)
The primary goals is for each individual user to be able to reopen the same blank form and not see the same number twice.
I read about global objects but the document was a little more advanced than my skill level and I was not sure how to proceed with that set up. It was also a fairly old article.
Thank you
Copy link to clipboard
Copied
The script works great when opening the file. I am looking for a way to do a +1 every time the document is printed. Is there a way to do that?
Copy link to clipboard
Copied
Move the code to the document's Will Print event, which you can find under Tools - JavaScript - Set Document Actions.
Edit: If you want the number to change after the file is printed use the Did Print event in the same location...
Copy link to clipboard
Copied
Hi,
Firstly, thank you for all the brilliant information and your help. I am trying to achieve something similar for my document. I have a master file that I need to be numberefd sequentially everytime it is printed. I have achieved this using the code you have shared here and it works perfect. However, this works best when the file is saved after each print. If the file is not saved, the sequential print number is always default value + increment (i.e., 0+1). Is it possible to generate next sequential number everytime the file is printed without the need to save file each time? The master file sits on a shared network folder and accessible to a bunch of people who will print it. I can password protect the master file if required. Please let me know if it is possible to achieve it? Thank you in advance!
Copy link to clipboard
Copied
The problem with a sequential number is maintaining the previous value. If the value is stored on the document, then only that specific document will produce true unique serial numbers. Copies of that document will not be unique. If the number is stored on the system, then only users of that system will have unique sequential numbers. If the number is on the document on a server, then users must always save the document back, and can only use it when no one else has the document open.
The solution for a universal unique sequential number is to create a number server. The number on the server is stored in a database that can only be accessed by one user at a time. The PDF accesses the server with a submit operation.
A simpler version of this is to store the number in a PDF file on the shared network folder. A script on the user document will open the PDF, increment the number and then save and close the number PDF. This way the saving is done automatically and doesn't depend on the users.
Copy link to clipboard
Copied
Hi Thom, thank you very much for detailed explanation, much appreciated. Could I please ask your help in achieving this auto saving on a shared network folder that doesn't depend on the users? How do I acheive this in practice? What script should I be referring to and how do I add it to the document? Thank you very much!
Copy link to clipboard
Copied
There are multiple parts to making this process work. Each users system will need to be setup for it.
Since the number is incremented on Print, the script is placed in the "WillPrint" script on the PDF that will display the sequential number. .
But the first thing to do is to create the PDF where the number is stored. Call it the "Number PDF". In the simplest case this is a one page, blank, PDF containing a single form field. Call it "SeqNum". If you want to capture other information, such as the last date/time used, user name, or anything else, then you'll need more fields. It also might help if there was some explanatory text on the page. And finally, add this line of code to a document level script.
this.disclosed = true;
It's also helpful if the Number PDF contains a document level function for performing the necessary increment opertation.
For example:
function GetSeqNum(){
var nSeq = Number(this.getField("SeqNum").value) + 1;
this.getField("SeqNum").value = nSeq;
return nSeq;
}
This is just an example. The function could be expanded to include some validation and to store other information.
Next, add a WillPrint script to the target PDF form. This script opens the Number PDF from a hard coded location, as a hidden file. Acquires the number using the "GetSeqNum()" function, then saves and closes the file.
This is were it gets tricky. Saving a PDF requires a privileged context. There are a few ways to add privilege, but the simplest is to add a special folder level Acrobat script to each user's system. You can read about it here:
https://www.pdfscripting.com/public/How-to-Save-a-PDF-2.cfm
Copy link to clipboard
Copied
Hi Thom,
Thank you again for your guidance. I have a couple of more follow up questions on your previous guidance. I tried creating the 'Number PDF' and added the following sciprts to the 'document will print' option -
this.disclosed = true;
function GetSeqNum(){
var nSeq = Number(this.getField("SeqNum").value) + 1;
this.getField("SeqNum").value = nSeq;
return nSeq;
}
1. I want to check if this script should be added to the 'document will print' option or not?
2. In the target PDF what script should I add to be able to get the seq number incremnented, printed and saved from 'Number PDF'?
Both 'Number PDF' and 'Target PDF' are in the same networked folder.
Apologoes for these questions, I have no background/experience of java scripts or coding for that matter, I appreciate your time on this immensly! Thank you.
Copy link to clipboard
Copied
This is a complicated process, so it's important to understand how the different pieces fit together. And you'll also need a good understanding of the Acrobat JavaScript model. If you are not a programmer already and are not interested in learning how to program, then I'd suggest engaging a developer. But if you are, here's a better explanation of the process.
There are two PDFs, Lets call them the ToPrintPdf and the NumberPDF.
PM me through this forum if you are interested in some Paid for consulting/developement.
Copy link to clipboard
Copied
Hello,
I'm trying to collect data about surgery results at 1 week, 1 month, 6 months.... is it possible to recover an autunumbered form so I can continue filling more fields?
for example. patient 1 - form assign 1 in id field, then I collect data of first week, but the form is already prepared for 1 month, 6 months, etc... Can I recover later the form number 1 so I con continue filling the rest of the form?
Thanks in advance
Copy link to clipboard
Copied
That choice is entirely with the form designer, you need to discuss your needs with them.
Copy link to clipboard
Copied
I would add some code to test if the "defaultValue" is empty and then add the serial number and if it is not empty then do not update the number. Your source document will have to be saved with the "defaultValue" of the field cleared.
Copy link to clipboard
Copied
Hi! Hopefully you are still helping others with PDF forms.
I am also trying to do this- sequential numbering on a PDF form when it is opened a new number is genertated based on the previous number used. I am not a programmer, and I am not really familiar with javascript.
I used the script that you provided as an answer to the post here- obviously I did not do something right.
This is what I used-
var f=this.getField("WORK ORDER");
f.value=002038(f.value)+1;
f.defaultValue=f.value;
I deleted -( not sure if I was supposed to)
function SEQ NUMBERS()
{
}
I will also attach a copy of my form.
Thank you in advance for your assistance.
Copy link to clipboard
Copied
This line doesn't make sense:
f.value=002038(f.value)+1;
What did you try to achieve there?
Copy link to clipboard
Copied
As I said- I am not a programmer and not really familiar with javascript. I thought that's where the starting number might go.
Copy link to clipboard
Copied
I'm not exactly sure how it works.
Copy link to clipboard
Copied
It's not. And it's never a good idea to code by guessing... It's better to ask first, or read the documentation. Use the code as I provided it, only adjusting the field name in the first line, if needed.
The initial number should be placed as the default value of that field. However, the current code will strip any zeros from the start of it. If you want to include those the code will need to be adjusted.
Copy link to clipboard
Copied
Thank you. I truly appreciate your time for people like me.
I don't necessarily need the zeros, so that's ok. Where do I put the first number? On my form- in the 2nd cell over from the WORK ORDER cell?
Copy link to clipboard
Copied
You should go to the field's Properties, then place the default value under the Options tab, like this:
Copy link to clipboard
Copied
Ok. So if I save that form, and name it 2038- when I open the orginal form shouldn't it advance to 2039?
Find more inspiration, events, and resources on the new Adobe Community
Explore Now