VBA实践+为PDF文档插入书签
声明:文章仅供参考,尝试请注意备份文件
作用:打开pdf文档,查找到指定字符串,然后插入书签
以下代码先设置一个待查找字符串,用findtext方法查找,然后用createchild方法插入书签。代码的运行环境为Win8.1,Word2010 VBA,Acrobat Pro DC,在本机测试成功。
使用到的主要方法为AVDoc.FindText和BookMark.createChild。
AVDoc.FindText有4个参数:
- szText,要查找的字符串
- bCaseSensitive,是否区分大小写,正数为区分,0为不区分
- bWholeWordsOnly,是否匹配整个单词,正数为匹配,0为不匹配
- bReset,查找开始的位置,正数则从第一页开始,0则从当前页开始
BookMark.createChild有3个参数
- cName,用户在导航面板中看到的书签的名称。
- cExpr,单击书签时要执行的表达式,为JavaScript
- nIndex,(可选)在书签的子数组中,创建新子书签的基于0的索引。默认值为0。
Sub Pdf添加书签()
'https://www.mrexcel.com/board/threads/create-pdf-bookmarks-while-combinding-files-with-vba-in-excel.847138/
'http://pharma-sas.com/how-to-add-multiple-levels-of-bookmark-into-pdf-via-vba/
'为某书添加书签
Dim App As New Acrobat.AcroApp
Dim PDoc As New Acrobat.AcroPDDoc, AVDoc As New Acrobat.AcroAVDoc
Dim Jso As Object
Dim BMark As Object '不能声明为Acrobat.AcroPDBookmark,否则createchild方法不可用。
Dim PFile As String, WordTF As String, PageNum As Long
PFile = "F:userdataDesktop提取PDF数据-需要修改客户需求2模具工业标准件目录.pdf" '要插入书签的pdf文件
WordTF = "A 型定位环"
If PDoc.Open(PFile) Then
Set Jso = PDoc.GetJSObject
Set AVDoc = PDoc.OpenAVDoc("") '获得一个可见文档
Jso.bookmarkroot.Remove '移除原有的所有书签
End If
If AVDoc.FindText(WordTF, 0, 0, 1) Then '从第一页开始,如果找到了字符串WordTF一次
PageNum = AVDoc.GetAVPageView.GetPageNum '获得当前页码
Set BMark = Jso.bookmarkroot '设置书签根对象
BMark.createChild WordTF, "this.pageNum=" & PageNum, 0 '创建一个书签
PDoc.Save 1, PFile
End If
PDoc.Close
App.CloseAllDocs
App.Hide
App.Exit
Set AVDoc = Nothing
Set PDoc = Nothing
Set App = Nothing
Set BMark = Nothing
Set Jso = Nothing
End Sub