Acrobat PDF-如何在文档打开时生成唯一编号-仅当字段为空时-使用Javascript?

Acrobat PDF-如何在文档打开时生成唯一编号-仅当字段为空时-使用Javascript?,javascript,pdf,adobe,user-experience,acrobat,Javascript,Pdf,Adobe,User Experience,Acrobat,我已经报名专门问这个问题。我花了很长时间研究,但仍未解决这个问题 我有一个PDF,我正在AcrobatDC编辑。在这个PDF中,我有一个文本字段(只读),打开PDF时需要用唯一的数字填充。我使用以下方法完成了此操作: this.getField("Invoice No").value = util.printf("%06d", Math.floor((Math.random() * 1000000) + 1)); 当我打开文件时,它会在正确的字段中生成一个数字,但是如果我保存(或不保存),然后

我已经报名专门问这个问题。我花了很长时间研究,但仍未解决这个问题

我有一个PDF,我正在AcrobatDC编辑。在这个PDF中,我有一个文本字段(只读),打开PDF时需要用唯一的数字填充。我使用以下方法完成了此操作:

this.getField("Invoice No").value = util.printf("%06d", Math.floor((Math.random() * 1000000) + 1));
当我打开文件时,它会在正确的字段中生成一个数字,但是如果我保存(或不保存),然后关闭并再次打开它,它会生成一个新的数字

我对JavaScript一点经验都没有,但我知道我缺少一点简单的代码。简单地说,我想:

“在文档被打开的情况下,将脚本应用于字段-仅当字段为空时”我希望这将避免每次打开页面时填充它。用户将以“主文件”的形式打开此文件,其中字段将为空,但当用户打开它时,它将填充,用户将保存该文件,然后具有唯一的表单编号


我希望我说得有道理。任何帮助都将是惊人的

这可以通过测试字段是否具有与其默认值相同的值来实现,如:

if (this.getField("Invoice No").value == this.getField("Invoice No").defaultValue) {
this.getField("Invoice No").value = util.printf("%06d", Math.floor((Math.random() * 1000000) + 1));
}
这应该可以做到

更新:如果对号码的唯一性有疑问,可以使用当前日期作为基础。可以这样做:

var myInvNumber = new Date().getTime() ;

由于这个数字相当长,并且在过去有很长的时间(事实上,到目前为止,37年相当于毫秒),因此可以设置一个偏移量,对应于初始日期,并从上述代码生成的数字中减去它。

您知道是否有更好的方法生成该数字吗?我已经读到,最好是基于毫秒的日期生成,以避免重复数字的可能性。如果是这样的话,你会知道怎么做吗?首先,你可能需要检查你的发票号码是否必须是数字,并且必须是升序(你可以问你的会计师)。如果没有,您确实可以在JavaScript(核心)中使用Date对象。同样,我将代码添加到我的答案中(因为它可以在那里格式化)。