Javascript 尝试使用FlattPages()展平PDF,但什么也没有发生
我尝试从VBA调用Acrobat Javascript API,以使用以下代码展平文档中的所有注释:Javascript 尝试使用FlattPages()展平PDF,但什么也没有发生,javascript,vba,pdf,acrobat,acrobat-sdk,Javascript,Vba,Pdf,Acrobat,Acrobat Sdk,我尝试从VBA调用Acrobat Javascript API,以使用以下代码展平文档中的所有注释: Sub flattenPDF() Dim AcroApp As Acrobat.AcroApp Dim AcroDoc As Acrobat.AcroPDDoc Dim jso As Object Dim path As String path = "C:\Users\userID\Desktop\thisfile.pdf" Set AcroApp = CreateObject("Acro
Sub flattenPDF()
Dim AcroApp As Acrobat.AcroApp
Dim AcroDoc As Acrobat.AcroPDDoc
Dim jso As Object
Dim path As String
path = "C:\Users\userID\Desktop\thisfile.pdf"
Set AcroApp = CreateObject("AcroExch.App")
Set AcroDoc = CreateObject("AcroExch.PDDoc")
AcroDoc.Open path
Set jso = AcroDoc.GetJSObject
jso.flattenPages
AcroDoc.Save PDSaveFull, path
AcroDoc.Close
AcroApp.Exit
End Sub
代码运行成功,但是当我打开PDF时,所有的注释仍然可以编辑——扁平化应该使它们成为只读的,对吗
编辑:我将AcroDoc.Save
的第一个参数从“1”更改为“PDSaveFull”,现在如果我运行两次脚本,注释将变平。为什么它们不第一次就变平呢
更新:
根据joelgaraci的建议,我修改了脚本以获取页面计数并将其传递给flattPages()
,同时将PDF路径传递给函数:
Sub flattenPDF(pdfPath As String)
Dim AcroApp As Acrobat.AcroApp
Dim AcroDoc As Acrobat.AcroPDDoc
Dim pageCount As Integer
Dim jso As Object
Set AcroApp = CreateObject("AcroExch.App")
Set AcroDoc = CreateObject("AcroExch.PDDoc")
AcroDoc.Open pdfPath
pageCount = AcroDoc.GetNumPages
Set jso = AcroDoc.GetJSObject
jso.flattenPages 0, pageCount - 1
AcroDoc.Save PDSaveFull, pdfPath
AcroDoc.Close
AcroApp.Exit
End Sub
但这得到了相同的结果:注释只有在我运行两次脚本后才会变平。我只是想添加我的解决方案,以防它对某人有所帮助。。。 我想把所有的PDF文件放在一个文件夹中,这似乎就达到了目的
Sub Flatten_Folder()
Dim MyFile As String
Mypath = InputBox("Enter the path to the folder where the PDF files are
Located **MUST END WITH \**")
MyFile = Dir(Mypath)
Do While MyFile <> ""
If MyFile Like "*.PDF" Or MyFile Like "*.pdf" Then
Fullpath = Mypath & MyFile
Set App = CreateObject("AcroExch.app")
Set avdoc = CreateObject("AcroExch.AVDoc")
Set pdDoc = CreateObject("AcroExch.PDDoc")
Set AForm = CreateObject("AFormAut.App")
pdDoc.Open (Fullpath)
Set avdoc = pdDoc.OpenAVDoc(Fullpath)
js = "this.flattenPages();"
'//execute the js code
AForm.Fields.ExecuteThisJavaScript js
Set pdDoc = avdoc.GetPDDoc
pdDoc.Save PDSaveFull, Fullpath
pdDoc.Close
Set AForm = Nothing
Set avdoc = Nothing
Set App = Nothing
End If
MyFile = Dir
Loop
End Sub
子展平文件夹()
将MyFile设置为字符串
Mypath=InputBox(“输入PDF文件所在文件夹的路径
已定位**必须以“\**”结尾)
MyFile=Dir(Mypath)
当我的文件“”时执行此操作
如果我的文件像“*.PDF”或我的文件像“*.PDF”,那么
Fullpath=Mypath&MyFile
Set App=CreateObject(“AcroExch.App”)
设置avdoc=CreateObject(“AcroExch.avdoc”)
设置pdDoc=CreateObject(“AcroExch.pdDoc”)
设置AForm=CreateObject(“aformout.App”)
pdDoc.Open(完整路径)
设置avdoc=pdDoc.OpenAVDoc(完整路径)
js=“this.flattPages();”
'//执行js代码
AForm.Fields.executeThisJS
设置pdDoc=avdoc.GetPDDoc
pdDoc.Save PDSaveFull,Fullpath
pdDoc.Close
设为形式=无
设置avdoc=Nothing
设置App=Nothing
如果结束
MyFile=Dir
环
端接头
运行宏时,会出现一个消息框提示,提示您粘贴文件夹路径。
此外,此方法似乎避免了OP遇到的问题。获取文档中的页数,然后尝试jso。FlattPages(0,numPages-1)@joelgeraci,我尝试了此方法,但脚本仍需要运行两次才能展平批注(请参阅OP中的更新)。插件加载延迟可能会导致页面在第一次运行时充耳不闻。也有可能注释也没有被读取。尝试在展平线上方添加jso.syncAnnotScan。这将迫使JavaScript引擎在您尝试展平之前可以使用注释。@joelgeraci,
jso.syncAnnotScan
没有更改任何内容。但是我也注意到有些PDF在第一次运行时会变平,所以可能是关于这个特定PDF是如何构造的?当您在Acrobat JavaScript控制台上对需要两次传递的文件运行这个.flattPages()时,结果如何?