Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试使用FlattPages()展平PDF,但什么也没有发生_Javascript_Vba_Pdf_Acrobat_Acrobat Sdk - Fatal编程技术网

Javascript 尝试使用FlattPages()展平PDF,但什么也没有发生

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

我尝试从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("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()时,结果如何?