如何查找文本并获取页面编号.用于使用vba的acrobat [英] How to finda text and get the page no. for acrobat using vba

查看:61
本文介绍了如何查找文本并获取页面编号.用于使用vba的acrobat的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想查找文本并使用VBA获取在acrobat中找到的文本的页码,我能够找到文本,但无法获取页码.为此

I want to find the text and get the page number of text found in acrobat using VBA, I am able to find the text but not able to get the page number. for that

Sub Main()

Dim acrApp, acrAVDoc
Set acrApp = CreateObject("AcroExch.app")
Set acrAVDoc = CreateObject("AcroExch.AVDoc")
acrApp.Show
If acrAVDoc.Open("FileName", "") Then
    Ok = acrAVDoc.FindText("Text to search", 0, 1, 1)
    MsgBox (Ok)
End If

Set acrAVDoc = Nothing
Set acrApp = Nothing

End Sub

我无法为

Set acrPDDoc = CreateObject("Acrobat.AV_PAGE_VIEW")

推荐答案

我知道这是一个老问题,但是当我寻找相同信息时,它是搜索量最高的结果之一.我从来没有发现任何能真正满足我需求的东西,所以我通过组合几种不同的资源来弥补了一些不足.

I know this is an old question, but it was one of the top search results when I was looking for the same info. I never found anything that truly met my needs so I made something up by combining several different resources.

即使在非常大的文档上,下面的功能也可以接受.它逐页搜索,而不是逐字搜索,因此它将找到多字匹配和带破折号的字(不区分大小写).它返回所有用逗号分隔的页面的匹配项.

The function below is acceptably fast, even on very large documents. It searches page by page, not word by word, so it will find multi-word matches and words with dashes (case insensitive). It returns the matches for all pages separated by commas.

希望这对以后的人很有帮助.

Hope this is helpful to someone in the future.

Sub Demo()
Dim SearchResult As String    
SearchResult = AdobePdfSearch("my search string", "C:\Demo\Demo.pdf")
MsgBox SearchResult
End Sub


Function AdobePdfSearch(SearchString As String, strFileName As String) As String
'Note: A Reference to the Adobe Library must be set in Tools|References!
'Note! This only works with Acrobat Pro installed on your PC, will not work with Reader
Dim AcroApp As CAcroApp, AcroAVDoc As CAcroAVDoc, AcroPDDoc As CAcroPDDoc
Dim AcroHiliteList As CAcroHiliteList, AcroTextSelect As CAcroPDTextSelect
Dim PageNumber, PageContent, Content, i, j, iNumPages
Dim strResult As String

Set AcroApp = CreateObject("AcroExch.App")
Set AcroAVDoc = CreateObject("AcroExch.AVDoc")
If AcroAVDoc.Open(strFileName, vbNull) <> True Then Exit Function

Set AcroPDDoc = AcroAVDoc.GetPDDoc
iNumPages = AcroPDDoc.GetNumPages
For i = 0 To iNumPages - 1

    Set PageNumber = AcroPDDoc.AcquirePage(i)
    Set PageContent = CreateObject("AcroExch.HiliteList")
    If PageContent.Add(0, 9000) <> True Then Exit Function
    Set AcroTextSelect = PageNumber.CreatePageHilite(PageContent)
    ' The next line is needed to avoid errors with protected PDFs that can't be read
    On Error Resume Next
    For j = 0 To AcroTextSelect.GetNumText - 1
        Content = Content & AcroTextSelect.GetText(j)
    Next j
    If InStr(1, LCase(Content), LCase(SearchString)) > 0 Then
        strResult = IIf(strResult = "", i + 1, strResult & "," & i + 1)
    End If
    Content = ""
Next i

AdobePdfSearch = strResult

'Uncomment the lines below if you want to close the PDF when done.
'AcroAVDoc.Close True
'AcroApp.Exit
'Set AcroAVDoc = Nothing: Set AcroApp = Nothing

End Function

这篇关于如何查找文本并获取页面编号.用于使用vba的acrobat的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆