如何在PDF文档中重绘条码对象?解决值更新后仅显示文本问题
问题描述
我想要制作一份PDF文档,以条码对象的形式显示当前日期以及5个工作日后的日期。我已通过一段JavaScript代码实现了条码值更新为当前日期:
var today = new Date(); event.value = util.printd("dd-mmm-yy", today);
但这段代码仅设置了条码的值,并未更新其外观,因此条码仅显示为文本。请问条码对象是否具备可重绘或更新外观的属性或函数?
另外,我使用以下代码获取5个工作日后的日期,同样存在仅更新值不更新外观的问题:
var today = new Date(); var numToAdd = 5; var i = 1; for (i = 1; i <= numToAdd; i++) { today.setDate(today.getDate() + 1); if (today.getDay() === 6) { today.setDate(today.getDate() + 2); } else if (today.getDay() === 0) { today.setDate(today.getDate() + 1); } } event.value = util.printd("dd-mmm-yy", today);
解决方案
在Acrobat的JavaScript环境中,条码字段更新值后需要主动触发重绘才能同步外观,以下两种方法都能解决问题:
调用
forceValidate()方法
对目标字段调用该方法会触发验证流程,同时自动重绘条码外观,是最直接的方式:event.target.forceValidate();强制切换字段可见性触发刷新
通过重新设置字段的可见属性,让Acrobat重新渲染条码:this.getField(event.target.name).display = display.visible;
修改后的代码示例
更新当前日期的代码:
var today = new Date(); event.value = util.printd("dd-mmm-yy", today); event.target.forceValidate();更新5个工作日后日期的代码:
var today = new Date(); var numToAdd = 5; var i = 1; for (i = 1; i <= numToAdd; i++) { today.setDate(today.getDate() + 1); if (today.getDay() === 6) { today.setDate(today.getDate() + 2); } else if (today.getDay() === 0) { today.setDate(today.getDate() + 1); } } event.value = util.printd("dd-mmm-yy", today); this.getField(event.target.name).display = display.visible;
注意:确保你使用的是PDF表单中的条码字段(而非静态文本或图片),只有表单字段才能通过JavaScript动态更新外观。
内容的提问来源于stack exchange,提问作者Dejagg
相关产品推荐
相关产品推荐

