MartyConnelly
martyconnelly at shaw.ca
Wed Mar 14 20:40:45 CDT 2007
Re: Open a PDF file from MS Access Here is another method I used with Acrobat 6.0, may have to be modified with 7.0 You can then open pdf file with a specific zoom, at a specific page or bookmark Sub RunAdobe() 'for list of opening options see ' http://partners.adobe.com/asn/acrobat/sdk/public/docs/PDFOpenParams.pdf Dim intRet As Integer Dim intPage As Integer Dim strPDF As String Dim strCommandLine As String intPage = 3 'note extra quotes needed for shell command strPDF = """C:\records management\aircanadacasestudy.pdf""" strCommandLine = """C:\Program Files\Adobe\Acrobat 6.0\Reader\AcroRd32.exe""" & _ " /A " & "page=" & intPage & "&zoom=50,250,100 " & strPDF Debug.Print strCommandLine intRet = Shell(strCommandLine, vbMaximizedFocus) End Sub To go further you would need full version of Acrobat and purchase SDK to get Adobe API for $100 and run code like this Public Function BookM1(a as String) On Error GoTo ErrorHandler 'Function adds a bookmark for each page in document : a - full path and filename Dim JSO As Object Dim Path As String Dim r Dim PGE(2) Set GApp = CreateObject("Acroexch.app") Set AVDoc = CreateObject("AcroExch.AVDoc") Set PDDoc = CreateObject("Acroexch.pddoc") Path = a 'open avdoc object If (AVDoc.Open(Path, Path)) Then ' THIS IS THE BIT MISSING FROM THE BOOKS YOU MUST USE AVDOC 'Avdoc opened Set AVPageView = AVDoc.GetAVPageView Set PDDoc = AVDoc.GetPDDoc() Set JSO = PDDoc.GetJSObject If Not JSO Is Nothing Then 'JSObject opened PGE(2) = 0 'set ref page to Page 1 PGE(1) = PDDoc.GetNumPages() ' set total number of pages Do Until PGE(2) = PGE(1) r = JSO.bookmarkroot.createchild("Page " & PGE(2) + 1, "this.pageNum=" & PGE(2), PGE(2)) PGE(2) = PGE(2) + 1 Loop PDDoc.Save PDSaveFull, Path Else MsgBox "JSO Failed to Open " & Path End If Else MsgBox "AVDocFailed to Open " & Path End If 'Exit the function. exit_BookM1: r = GApp.CloseAllDocs Set MyJSObject = Nothing Set MyPDFDoc = Nothing Set MyPDFApp = Nothing r = GApp.Exit Exit Function ErrorHandler: 'Filter out the errors. Select Case Err.number Case Else 'Display the error number and description. MsgBox "Error: " & Err.number & ", " & Err.DESCRIPTION & Chr(13) & Chr(10) & "Error occurred in BookM1." End Select Resume exit_BookM1 End Function Rocky Smolin at Beach Access Software wrote: >Thanks David. I switched over to this instead of the FollowHyperlink >approach. Worked perfectly once I figured out about getting the API >function declared. > >The FollowHyperlink approach seems cleaner but there must be some drawback >to it. > >Anyway, your code works fine with a second from Andy. So I'll use it. > >Thanks, > >Rocky > > > > > > > > >-----Original Message----- >From: accessd-bounces at databaseadvisors.com >[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of David Emerson >Sent: Wednesday, March 14, 2007 2:02 PM >To: Access Developers discussion and problem solving >Subject: Re: [AccessD] Open PDF > >Rocky, > >I use this function (Not sure where I came across it). StrFile is the full >path to the file to open. It used Windows file association to know what >program to open the file in: > >Function RunApp(strFile As String, bytSize) As Boolean > Dim lngRet As Long > Dim varTaskID As Variant > Dim strRet As String > > ' Enclose FilePath within double quotes so as to take care of embedded >spaces if any. > strFile = Chr(34) & strFile & Chr(34) > ' bytSize = 1 for Normal Window, 3 for Maximized Window > > lngRet = ShellExecute(hWndAccessApp, vbNullString, strFile, >vbNullString, vbNullString, bytSize) > If lngRet > 32 Then 'Success > strRet = vbNullString > lngRet = -1 > RunApp = True > Else > RunApp = False > Select Case lngRet > Case 0 'InadequateMemory > MsgBox "Error: Out of Memory/Resources!" > Case 2 'FileNotFound > MsgBox "Error: " & strFile & " not found." > Case 3 'PathNotFound > MsgBox "Error: Path not found for file " & strFile & "." > Case 11 'BadFormat > MsgBox "Error: Bad File Format for file " & strFile & "." > Case 5 > MsgBox "Error: Unauthorized due to Security restrictions!" > Case Else > MsgBox "Error: Unexpected error (Number " & lngRet & >") for file " & strFile & "." > End Select > End If > >End Function > >Regards > >David Emerson >Dalyn Software Ltd >999 Moonshine Rd, RD 1 >Judgeford, Porirua >New Zealand 5381 >Phone 0064 4 235-6782 >Fax 0064 4 235-6783 > >At 15/03/2007, you wrote: > > >>Dear List: >> >>What is the best way to open a PDF file through VBA. I have the full >>path and file name of the PDF file, but I can't count on the version or >>location of Acrobat on the target machines. >> >>MTIA, >> >>Rocky >>-- >>AccessD mailing list >>AccessD at databaseadvisors.com >>http://databaseadvisors.com/mailman/listinfo/accessd >>Website: http://www.databaseadvisors.com >> >> > >-- >AccessD mailing list >AccessD at databaseadvisors.com >http://databaseadvisors.com/mailman/listinfo/accessd >Website: http://www.databaseadvisors.com > >-- >No virus found in this incoming message. >Checked by AVG Free Edition. >Version: 7.5.446 / Virus Database: 268.18.11/721 - Release Date: 3/13/2007 >4:51 PM > > > > -- Marty Connelly Victoria, B.C. Canada