Acrobat VBA处理PDF后未关闭文档致锁定,求程序化关闭方案
解决Acrobat Pro VBA添加水印后文件无法关闭的问题
原代码仅将对象设为Nothing,但未主动保存修改并关闭Acrobat文档对象,导致文件始终被Acrobat进程占用。以下是修改后的代码,实现程序化保存并干净关闭文件:
'Add PRELIMINARY Watermark If Report_Type = "Preliminary" Then Dim AVDoc As Object Dim AForm As Object Dim PDDoc As Object ' 用于操作文档保存的对象 Set AVDoc = CreateObject("AcroExch.AVDoc") Set AForm = CreateObject("AFormAut.App") 'from AFormAPI 'Open the file and add a watermark based on text (using AcroJs) If AVDoc.Open(OutFileName, "") Then ' 执行添加水印的JavaScript AForm.Fields.ExecuteThisJavaScript "this.addWatermarkFromText({cText: ""PRELIMINARY"", cFont: ""Times-Roman"", nFontSize: 100, aColor: color.black, nRotation: 45, nOpacity: 0.05});" ' 获取文档对象并保存修改 Set PDDoc = AVDoc.GetPDDoc() PDDoc.Save 1, OutFileName ' 参数1代表完整保存(对应Acrobat常量PDSaveFull) PDDoc.Close ' 关闭文档底层对象 ' 关闭AVDoc界面文档,False表示不弹出保存提示(已手动完成保存) AVDoc.Close False End If ' 按顺序释放所有COM对象 Set PDDoc = Nothing Set AVDoc = Nothing Set AForm = Nothing End If
关键修改说明:
- 新增
PDDoc对象:通过AVDoc.GetPDDoc()获取文档底层对象,调用Save方法确保水印修改被写入文件 - 调用
AVDoc.Close(False):主动关闭Acrobat的文档窗口,避免进程占用文件 - 按顺序释放对象:先关闭
PDDoc,再释放AVDoc和AForm,确保资源完全回收
内容的提问来源于stack exchange,提问作者Ryan MacDicken
相关产品推荐
相关产品推荐

