Acrobat中addWatermarkFromText()无法循环,仅第一页生效求助
解决PDF全页添加双水印问题
问题描述
拼凑代码实现PDF加水印功能,但仅第一页生效,需求为给所有页面添加两类水印:用条码字体显示文件名/工单编号,用普通字体显示页码。
初始失效代码
for (var p = 0; p < this.pageNum; p++); var cMyText = event.target.documentFileName.replace(/\.pdf$/i,""); event.target.addWatermarkFromText({ cText: cMyText, nFontSize:10, aColor: color.black, cFont: "LibreBarcode39Text-Regular", nHorizAlign:app.constants.align.left, nHorizValue: 36, nVertAlign:app.constants.align.top, nVertValue: -3, nStart: p }) for (var s=0; s<this.pageNum; s++); var cMyText = "\nPage " + (s+1) + " of " + numPages; event.target.addWatermarkFromText({ cText: cMyText, nFontSize:8, aColor: color.black, nHorizAlign:app.constants.align.left, nHorizValue: 36, nVertAlign:app.constants.align.top, nVertValue: -10, nStart: s })
失效原因
循环语句末尾的分号导致循环体为空,后续的水印添加代码仅执行一次,使用的是循环结束后的变量值(此时p/s等于总页数,对应第一页),因此仅第一页生效。
修正后可行代码
/*print identifier script by Chris B. Castonguay 2022*/ /*打开对话框请求工单编号并存储值*/ var cRtn = app.response("工单编号(格式:x1-23456-x)","条码生成器2000","roll-up-33","","工单#"); /*在左上角打印"工单#"文本水印*/ for (var p = 0; p < this.numPages; p++){ var cMyText = "工单# "; event.target.addWatermarkFromText({ cText: cMyText, nFontSize:10, aColor: ["CMYK", 0,0,0,.85], nHorizAlign:app.constants.align.left, nHorizValue: 36, nVertAlign:app.constants.align.top, nVertValue: 0, nStart: p }) } /*根据输入生成条码水印*/ for (var p = 0; p < this.numPages; p++){ var cMyText = "*" + cRtn + "*"; event.target.addWatermarkFromText({ cText: cMyText, nFontSize:30, aColor: ["CMYK", 0,0,0,.85], cFont: "LibreBarcode39Text-Regular", nHorizAlign:app.constants.align.left, nHorizValue: 100, nVertAlign:app.constants.align.top, nVertValue: 0, nStart: p }) } /*添加页码水印*/ for (var s = 0; s < this.numPages; s++){ var cMyText = "\n第 " + (s+1) + " 页,共 " + numPages + " 页"; event.target.addWatermarkFromText({ cText: cMyText, nFontSize:8, aColor: ["CMYK", 0,0,0,.85], nHorizAlign:app.constants.align.left, nHorizValue: 36, nVertAlign:app.constants.align.top, nVertValue: -15, nStart: s }) }
核心修正说明
- 移除循环末尾的分号,让水印添加代码成为循环体的一部分,遍历所有页面
- 替换
this.pageNum为this.numPages,确保获取正确的总页数 - 优化了水印颜色、位置参数,新增工单编号交互功能(可按需修改为直接读取文件名)
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

