• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
4

How to get PDF to auto generate new invoice number everytime it is open

Guest
Jan 09, 2015 Jan 09, 2015

Copy link to clipboard

Copied

I need a unique invoice number to show in the corner of a form.  I was thinking of the best way (maybe the easiest?) to generate a number..  I want the form when opened to automatically create this number.  In addition, one the PDF has been filled out and so on, then saved, I dont want that invoice number to regenerate once its opened again for whatever the reason.  Does this sound possible?

TOPICS
PDF forms

Views

75.2K

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
1 ACCEPTED SOLUTION
Community Expert ,
Jan 12, 2015 Jan 12, 2015

Copy link to clipboard

Copied

My bad... The code should be:

this.getField("Invoice No").value = util.printf("%06d", Math.floor((Math.random() * 1000000) + 1));

View solution in original post

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
replies 139 Replies 139
Community Expert ,
Feb 25, 2015 Feb 25, 2015

Copy link to clipboard

Copied

Can you share the file, either via a file-sharing website (dropbox, acrobat.com, etc.) or via email?

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Feb 25, 2015 Feb 25, 2015

Copy link to clipboard

Copied

Sure what is your email?

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 25, 2015 Feb 25, 2015

Copy link to clipboard

Copied

try6767 at gmail

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Sep 18, 2015 Sep 18, 2015

Copy link to clipboard

Copied

Hello try67.

How do I get the form to keep the generated number without first saving the file?

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Sep 18, 2015 Sep 18, 2015

Copy link to clipboard

Copied

To save the data in a file (any file), it must be saved.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Sep 18, 2015 Sep 18, 2015

Copy link to clipboard

Copied

Hmmm. This may have seemed like a strange request but I had an older PDF version with a script which functioned that way. I would close the PDF without saving. On launching the file again it would advance sequentially to the next number.

Sent from my iPhone

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Sep 19, 2015 Sep 19, 2015

Copy link to clipboard

Copied

Then either the file saved itself (using a script), or the data was saved to a global (and persistent) variable and then used when the file got re-opened.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Sep 19, 2015 Sep 19, 2015

Copy link to clipboard

Copied

I understand what you are saying but respectfully, I was trying to pick your brain for a solution. I'm by no means savvy with script so I need your help.

I could share with you the script that I got from a post a few years back. Hopefully you can determine how it's functions. The post writer had said that Adobe updated the PDF form controls since he created the script.

Sent from my iPad

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Sep 19, 2015 Sep 19, 2015

Copy link to clipboard

Copied

Sure, share away...

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Sep 20, 2015 Sep 20, 2015

Copy link to clipboard

Copied

if (global.count == null) //checks to see if count exists

{

global.count = 1000000 //sets initial count, you can change to suite your needs

global.setPersistent("count",true) //makes the counter a global object so it is persistent data

}

else

global.count++ //increments the the counter by one when the document is opened

var f = this.getField("RECEIPT NUMBER") //creates a variable for the form field where the counter will be displayed

f.value = global.count //sets the form field to equal the counter

I placed the script in the document page properties. I also created a button and placed it in the actions section so I could manually advance the receipt number. As mentioned before, on closing the PDF without saving and then reopening, the new number followed on from the previous number.

The workflow I devised was to print each new invoice so there would be a copy for distribution and or achieve purposes.

I would also like to simplify the output process by printing to image file and hard copy in one function. Perhaps using a "watch folder” setup could take care of the print function.

Thanks for your patience.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Sep 20, 2015 Sep 20, 2015

Copy link to clipboard

Copied

Yes, this is the global variable approach I've described. It should work, but only if a certain preference is first set by the user in Acrobat/Reader.

They have to un-check the "Enable global object security policy" box under Edit - Preferences - JavaScript for it to work.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Sep 20, 2015 Sep 20, 2015

Copy link to clipboard

Copied

Yup, that works, you're the man!

Many thanks!

Sent from my iPad

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Jun 20, 2017 Jun 20, 2017

Copy link to clipboard

Copied

Good morning, I've been following this post and it has been extremely helpful in auto numbering my PDF form! I am a novice at scripting, so your script and other's notes have been invaluable. Thank you to all! The script is working wonderfully except that I cannot get it to start at the number that I want. I had it once, then the owners decided to up the number. I would like the numbering to start at 1701000. Following is the script I am using. Any advice is greatly appreciated.

if (this.documentFileName == "2017 Electronic Job Ticket FORM-js.pdf")

if (global.count == null) //checks to see if count exists

{

global.count = 1701000 //sets initial count, you can change to suite your needs

global.setPersistent("count",true) //makes the counter a global object so it is persistent data

}

else

global.count++ //increments the the counter by one when the document is opened

var f = this.getField("Order #") //creates a variable for the form field where the counter will be displayed

f.value = global.count //sets the form field to equal the counter

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Jun 20, 2017 Jun 20, 2017

Copy link to clipboard

Copied

currently the script still remembers the number I somehow initially set.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jun 20, 2017 Jun 20, 2017

Copy link to clipboard

Copied

Run this command from the JS Console:

delete global.count;

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Jun 20, 2017 Jun 20, 2017

Copy link to clipboard

Copied

Thank you! Worked perfectly.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Jun 26, 2017 Jun 26, 2017

Copy link to clipboard

Copied

I have one other issue if anyone has a suggestion. My consecutively numbered form is on a central iMac running OS 10.10.5 that two of us in the department connect to via Mac File Sharing. I created the form from my iMac, but have always saved and worked on it via File Sharing. The numbers change consecutively perfectly for me. I open the original form I created, Save As, with a name reflecting the new number and job name. The next time I open the original form, the job number increased, save as, etc. When either of the other two gals open the form, it does not reflect the time I have opened the form and doesn't increase consecutively. It does for each of them individually, but we all need to access the same form and have the number increase each time. Does that make sense? ANy suggestions appreciated. Following is my script:

if (this.documentFileName == "2017 Electronic Job Ticket FORM-js.pdf")

if (global.count == null) //checks to see if count exists

{

global.count = 1701000 //sets initial count, you can change to suite your needs

global.setPersistent("count",true) //makes the counter a global object so it is persistent data

}

else

global.count++ //increments the the counter by one when the document is opened

var f = this.getField("Order #") //creates a variable for the form field where the counter will be displayed

f.value = global.count //sets the form field to equal the counter

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jun 26, 2017 Jun 26, 2017

Copy link to clipboard

Copied

In that case you can't use the global variable. You will need to simply increment the field's value by one each time the file is opened.

The code for that would be:

this.getField("Order #").value = Number(this.getField("Order #").valueAsString)+1;

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Mar 12, 2020 Mar 12, 2020

Copy link to clipboard

Copied

Hi try,

 I am spawning my 2 page PDF form from the below code

var a =this.getTemplate("p1" ); //using my page 1 template
var b =this.getTemplate("p2" ); //using my page 2 template


a.spawn(1,true, false);
b.spawn(1,true, false);


this.pageNum++;

 

but I want to increase my one of the field value by 1 on every spawning and this can be done from the above code you gave but I think it will not work because on spawning the field name on new page will change to something else then how we will do it?

 

Thanks in advance 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Aug 23, 2022 Aug 23, 2022

Copy link to clipboard

Copied

Hi, Thanks For Code Please Ineed reset Count to 1 how can i do it

 

Regards

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Feb 27, 2017 Feb 27, 2017

Copy link to clipboard

Copied

This thread has been really helpful! Thanks to everyone involved.

However, I'm a little stuck. I have the field in the PDF generating the random number upon document opening, however it keeps changing each time it is opened after that.

I'm using the this.getField("Invoice No").value = util.printf("%06d", Math.floor((Math.random() * 1000000) + 1)); script.

Is there a way of making this script only run if the field is empty?

Ideally the user will open the "master.pdf" which has an empty field (which generates the number upon open), and then fill out other forms, then save as a new name. I can't have it generating new numbers each time it opens after saving.

Any help out there?

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 28, 2017 Feb 28, 2017

Copy link to clipboard

Copied

Sure. Use this code:

if (this.getField("Invoice No").valueAsString=="") {

    this.getField("Invoice No").value = util.printf("%06d", Math.floor((Math.random() * 1000000) + 1));

}

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Feb 28, 2017 Feb 28, 2017

Copy link to clipboard

Copied

Thank you so much!

Do you know if there is a better way to generate the number? I've read that it may be better to generate it based on date with milliseconds, as to avoid the possibility of repeated numbers. If so, would you know how to do it?

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 28, 2017 Feb 28, 2017

Copy link to clipboard

Copied

Sure, that's easily done.

Replace the second line of code with this one to achieve it:

this.getField("Invoice No").value = new Date().getTime();

This will generate a number such as: 1488321852191

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 28, 2017 Feb 28, 2017

Copy link to clipboard

Copied

The nice thing about it is that it's not only a unique number, it's also a time-stamp, ie you can use it to know when the file was opened.

However, you have no guarantees that the computer clock is accurate on the user's end...

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines