This is the main procedure. It drives several other database related functions (not included)... all the bookmark "sendKeys" info is in here. We still use Acrobat 3 so some of the command structure may have changed... I just don't know.
I strongly recommend trying this technique on a small representative sample of your PDF. As it takes over your machine and halting the exe is problematic when using "sendKeys" in this way.
BTW I have sent Adobe several requests for information on automation over the years. I have only ever recieved canned replies. I guess they just don't get it.
Public Sub Bookmarks()
' 0) use the view.mde to filter out all but the mdesc records.
' 1) open ACROBAT EXCHANGE if not Already open by openning a
' PDF file.
' 2) Send commands to acrobat exchange for it to
' build index based on Mdesc section + " "+ desc
' 3) issue save command and exit ACROBAT EXCHANGE
Dim RStemp As Recordset
Dim DBview As Database
Dim toAcrobat, cLastSec, cThisSec As String
Dim myCount, recCount As Long
Dim chkAcrobat As Integer
' On Error GoTo errTrap
Set DBview = CurrentDb
Set RStemp = DBview.OpenRecordset("SELECT section, title FROM usc_spec ORDER BY section"

RStemp.Requery
Debug.Print DBview.Name, RStemp.RecordCount, RStemp!Section,
RStemp.MoveFirst
If vbOK = MsgBox("Open with ACROBAT EXCHANGE the *.PDF file you" + Chr(13) + "want to build an index for." + Chr(13) + Chr(13) + "Select OK when finished openning ACROBAT EXCHANGE and *.PDF file", vbExclamation + vbOKCancel, "USE THE START BUTTON TO:"

Then
GoTo Begin
Else
MsgBox "Operation Canceled"
GoTo allDone
End If
Begin:
'make ACROBAT EXCHANGE current Application
AppActivate "Acrobat Exchange" 'error is trapped if not open
recCount = RStemp.RecordCount - RStemp.AbsolutePosition 'count of records
cLastSec = ""
cThisSec = ""
For myCount = 1 To recCount 'from current pos to end of set
cThisSec = Left(Trim(RStemp!Section), 2)
If cLastSec <> cThisSec Then
toAcrobat = newSpecDivision(cThisSec)
'find first division in heading
Debug.Print toAcrobat
SendKeys "%{t}f" + toAcrobat + "%{f}", True 'search for division heading
SendKeys "%{d}n", True 'create bookmark
End If
'Acrobat Exchange text search string
'these are dumb commands the program has no
'way of knowing if they were successfull.
'If an error occurs you will have to adjust the
'data and rebuild the Acorbat
toAcrobat = "Section " + Trim(RStemp!Section) + " " + Trim(RStemp!title)
'the ( char gives trouble when sending
chkAcrobat = InStr(1, toAcrobat, "("

If chkAcrobat > 0 Then
toAcrobat = Left(toAcrobat, chkAcrobat - 1)
End If
'the ) char gives trouble when sending
chkAcrobat = InStr(1, toAcrobat, "

"

If chkAcrobat > 0 Then
toAcrobat = Left(toAcrobat, chkAcrobat - 1)
End If
toAcrobat = Trim(toAcrobat)
Debug.Print toAcrobat
SendKeys "%{t}f" + toAcrobat + "%{f}", True 'search for spec and title
SendKeys "%{d}n", True 'create bookmark
cLastSec = cThisSec 'update division check
RStemp.MoveNext
Next myCount
RStemp.Close
'AppActivate "Make View Database"
GoTo allDone:
errTrap:
Select Case Err.Number
Case 91
MsgBox "File not open " + Str(Err.Number) + Chr(13) + Chr(13) + Err.Description, vbOKOnly + vbCritical, "You Must Open the View First"
GoTo allDone
Case 5
MsgBox "Application not open " + Str(Err.Number) + Chr(13) + Chr(13) + Err.Description + Chr(13) + toAcrobat, vbOKOnly + vbCritical, "You must have ACROBAT EXCHANGE running!"
GoTo allDone
Case Else 'all other errors
MsgBox "Unknown Error " + Str(Err.Number) + Chr(13) + Chr(13) + Err.Description, vbOKOnly + vbCritical, "Error mnuBuildAdobe"
GoTo allDone
End Select
allDone: 'exit sub
End Sub
-Pete