In questo post vediamo come poter aprire un PDF da un'applicazione e come poter aprire il file specificando la pagina desiderata.
Se si apre una command line e si prova ad aprire un file direttamente da qui alla pagina desiderata basterà scrivere:
C:\Programmi\Adobe\..\acrobat.exe /A page=2 C:\abc.pdf
Ovvero con l'opzione "/A" si specificano i parametri con cui aprire il pdf e di seguito si indica il path dello stesso file da aprire.
Per maggiori informazioni sui parametri da specificare basta guardare qui.
In questo caso però nella mia macchina è installato Adobe Acrobat, se invece è installato solamente l'Acrobat Reader allora da command line si dovrà scrivere:
C:\Programmi\Adobe\..\acrord32.exe /A page = 2 C:\abc.pdf
A questo punto dobbiamo fare lo stesso da codice!
Dobbiamo recuperare il path di Installazione di Adobe, prestando attenzione alla versione e a quale Adobe è stato installato.
(Codice VB.NET)
Dim buf As String = "C:\abc.pdf" 'Path del file PDF da aprire
Dim pathKey As String
Dim key As RegistryKey
'Setto il percorso di Adobe nel Registro di Sistema
'Controllo prima la presenza di Acrobat Reader e in seguito quella di Adobe Acrobat standard.
pathKey = "Software\Adobe\Acrobat Reader\"
key = Registry.LocalMachine.OpenSubKey(pathKey)
If (key Is Nothing) Then
pathKey = "Software\Adobe\Adobe Acrobat\"
key = Registry.LocalMachine.OpenSubKey(pathKey)
End If
If (key Is Nothing) Then
'Non sono state trovate nè le chiavi di Acrobat Reader nè quelle di Adobe Acrobat
'Viene aperto il pdf sulla prima pagina!
ApriFile(buf, Nothing)
Return
End If
'Per trovare dove è installato l'Adobe dobbiamo trovare la chiave di registro corretta che solitamente si trova in:
' Software\Adobe\Adobe Acrobat\7.0\InstallPath oppure
' Software\Adobe\Acrobat Reader\5.0\InstallPath
'Quello che è importante trovare è la versione di Adobe installata. Se ci sono più versioni installate,
'viene presa l'ultima versione presente.
Dim values As String() = key.GetSubKeyNames()
Dim maxVersion As String = "0"
For Each s As String In values
Try
If (Double.Parse(s) > Double.Parse(maxVersion)) Then
maxVersion = s
End If
Catch ex As Exception
End Try
Next
If (maxVersion = "0") Then
'Se non è stata trovata una versione di Adobe installata, il pdf viene aperto sulla prima pagina
ApriFile(buf, Nothing)
Else
'Il percorso nel registro è stato costruito. Estraiamo il percorso di installazione di Adobe che solitamente è:
' C:\Programmi\Adobe\Acrobat 7.0\Acrobat oppure C:\Programmi\Adobe\Acrobat 7.0\Reader
pathKey = pathKey & maxVersion & "\InstallPath\"
key = Registry.LocalMachine.OpenSubKey(pathKey)
'La variabile pathAdobe dovrà contenere il percorso di installazione di Adobe.E' necessario controllare su è presente Acrobat Reader
'(l'eseguibile è acrord32.exe) oppure Adobe Acrobat (l'eseguibile è acrobat.exe)
Dim pathAdobe As String
pathAdobe = key.GetValue("") & "\acrord32.exe"
If (New FileInfo(pathAdobe).Exists = False) Then
pathAdobe = key.GetValue("") & "\acrobat.exe"
If (New FileInfo(pathAdobe).Exists = False) Then
ApriFile(buf, Nothing)
Return
End If
End If
ApriFile(pathAdobe, "/A page=" & pagina & " " & buf)
End If
Infine il metodo per lanciare l'apertura del pdf:
Private Sub ApriFile(ByVal pathFile As String, ByVal argomenti As String)
Dim info As System.Diagnostics.ProcessStartInfo = New System.Diagnostics.ProcessStartInfo(pathFile)
info.UseShellExecute = True
info.Verb = "Open"
If (argomenti <> Nothing And argomenti <> "") Then
info.Arguments = argomenti
End If
System.Diagnostics.Process.Start(info)
End Sub
P.S: Questo post l'ho potuto scrivere anche grazie all'aiuto di Raffaele Rialdi che mi ha aiutato nella risoluzione del problema nel forum di microsoft (qui). Quindi un doveroso grazie va anche a lui!!!