无法获取 VBA 代码来检查 pdf 复选框
Cannot get VBA code to check pdf check box
我正在尝试制作一个程序来读取一个 pdf 和一个 vba 用户表单,然后填写另一个 pdf。我成功地编写了代码来读取 pdf 中的所有文本,然后根据我可以在字符串中找到的标记找到某些子字符串。它旨在根据子字符串填充目标 pdf 中的字段,并根据用户表单检查相应的文本框。我可以获得填充子字符串的代码,然后保存文档,但它不会选中复选框。在代码使用 AVDoc 之前,但我切换到 JSO 因为我不想弹出 pdf,而 jso 成功地避免了这个问题。我尝试了各种代码方法,例如 pdfBool.value = cBool(vbaBool), pdfBool.value = 1, pdfBool.value = "1", jso.setValue(" checked"), jso.setValue("yes"), 等等。这段代码将 运行 而不会崩溃。为了示例,我将变量的数量减少到一个字符串和一个布尔值。
Sub main()
‘findString grabs all text from a pdf file. This code works.
Dim mystr As String
If findString(mystr) = False Then
Application.StatusBar = "Cannot find Source PDF"
Exit Sub
End If
Dim mypath As String
mypath = ActiveWorkbook.Path & "\destination.pdf"
Dim aApp As acrobat.AcroApp
Dim pdfDoc As acrobat.CAcroPDDoc
Dim jso As Object
Set aApp = CreateObject("AcroExch.App")
Set pdfDoc = CreateObject("AcroExch.PDDoc")
If pdfDoc.Open(mypath) = True Then
Set jso = pdfDoc.GetJSObject
Dim vbaText As String
Dim vbaBool As String
vbaText = returnString("Token1")
vbaBool = userForm.checkBox1.value
Dim pdfText As Object
Dim pdfBool As Object
Set pdfText = jso.getField("TextField1")
Set pdfBool = jso.getField("CheckBox1")
pdfText.Value = vbaText
pdfBool.Value = vbaBool
'save pdffile
Dim fileSavePath As String
fileSavePath = ActiveWorkbook.Path & "\My Save File.pdf"
pdfDoc.Save PDSaveFull, fileSavePath
‘clean up memory
Set pdfDoc = Nothing
Set pdfText = Nothing
Set pdfBool = Nothing
Set jso = Nothing
End If
aApp.Exit
Set aApp = Nothing
Unload userForm1
End Sub
好的,经过一番搜索,我找到了解决方案。基本上,使用 Living Cycle 创建的表单不适用于复选框。我问过我组织中的某个人,他们确认 Living Cycle 在表单上使用了一段时间,直到我们摆脱它。老实说,我不知道 Living Cycle 是什么,但解决方案似乎有效,所以我认为无论什么问题都与称为“Living Cycle”的东西有关。
解决办法?重做 pdf 表单:我将 pdf 导出到一个封装的 PostScript 文件。这剥夺了所有领域。之后,我使用了自动找到所有相关字段的准备表单工具。幸运的是,对于我的 pdf,它完美地找到了所有字段,尽管我不得不删除一两个额外的字段。字段名称和代码需要匹配,因此需要对 PDF 或代码进行调整,但一旦我进行了调整,一切就完美了。
我正在尝试制作一个程序来读取一个 pdf 和一个 vba 用户表单,然后填写另一个 pdf。我成功地编写了代码来读取 pdf 中的所有文本,然后根据我可以在字符串中找到的标记找到某些子字符串。它旨在根据子字符串填充目标 pdf 中的字段,并根据用户表单检查相应的文本框。我可以获得填充子字符串的代码,然后保存文档,但它不会选中复选框。在代码使用 AVDoc 之前,但我切换到 JSO 因为我不想弹出 pdf,而 jso 成功地避免了这个问题。我尝试了各种代码方法,例如 pdfBool.value = cBool(vbaBool), pdfBool.value = 1, pdfBool.value = "1", jso.setValue(" checked"), jso.setValue("yes"), 等等。这段代码将 运行 而不会崩溃。为了示例,我将变量的数量减少到一个字符串和一个布尔值。
Sub main()
‘findString grabs all text from a pdf file. This code works.
Dim mystr As String
If findString(mystr) = False Then
Application.StatusBar = "Cannot find Source PDF"
Exit Sub
End If
Dim mypath As String
mypath = ActiveWorkbook.Path & "\destination.pdf"
Dim aApp As acrobat.AcroApp
Dim pdfDoc As acrobat.CAcroPDDoc
Dim jso As Object
Set aApp = CreateObject("AcroExch.App")
Set pdfDoc = CreateObject("AcroExch.PDDoc")
If pdfDoc.Open(mypath) = True Then
Set jso = pdfDoc.GetJSObject
Dim vbaText As String
Dim vbaBool As String
vbaText = returnString("Token1")
vbaBool = userForm.checkBox1.value
Dim pdfText As Object
Dim pdfBool As Object
Set pdfText = jso.getField("TextField1")
Set pdfBool = jso.getField("CheckBox1")
pdfText.Value = vbaText
pdfBool.Value = vbaBool
'save pdffile
Dim fileSavePath As String
fileSavePath = ActiveWorkbook.Path & "\My Save File.pdf"
pdfDoc.Save PDSaveFull, fileSavePath
‘clean up memory
Set pdfDoc = Nothing
Set pdfText = Nothing
Set pdfBool = Nothing
Set jso = Nothing
End If
aApp.Exit
Set aApp = Nothing
Unload userForm1
End Sub
好的,经过一番搜索,我找到了解决方案。基本上,使用 Living Cycle 创建的表单不适用于复选框。我问过我组织中的某个人,他们确认 Living Cycle 在表单上使用了一段时间,直到我们摆脱它。老实说,我不知道 Living Cycle 是什么,但解决方案似乎有效,所以我认为无论什么问题都与称为“Living Cycle”的东西有关。
解决办法?重做 pdf 表单:我将 pdf 导出到一个封装的 PostScript 文件。这剥夺了所有领域。之后,我使用了自动找到所有相关字段的准备表单工具。幸运的是,对于我的 pdf,它完美地找到了所有字段,尽管我不得不删除一两个额外的字段。字段名称和代码需要匹配,因此需要对 PDF 或代码进行调整,但一旦我进行了调整,一切就完美了。