#14 Aprire un file PDF
Pubblicato da Mario De Ghetto su 21 Gennaio 2008
Per aprire un file PDF in VB6/VBA, con il programma predefinito (solitamente Acrobat Reader), è possibile utilizzare il seguente codice:
' Sezione dichiarazioni
Public Declare Function ShellExecute _
Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpszOp As String, _
ByVal lpszFile As String, ByVal lpszParams As String, _
ByVal LpszDir As String, ByVal FsShowCmd As Long) As Long
Public Declare Function GetDesktopWindow Lib "user32" () As Long
Public Sub ApriPDF(NomeFile As String)
Const SW_SHOWNORMAL As Long = 1
Const ERROR_BAD_FORMAT As Long = 11
Const SE_ERR_ACCESSDENIED As Long = 5
Const SE_ERR_ASSOCINCOMPLETE As Long = 27
Const SE_ERR_DDEBUSY As Long = 30
Const SE_ERR_DDEFAIL As Long = 29
Const SE_ERR_DDETIMEOUT As Long = 28
Const SE_ERR_DLLNOTFOUND As Long = 32
Const SE_ERR_FNF As Long = 2 ' file non trovato
Const SE_ERR_NOASSOC As Long = 31
Const SE_ERR_PNF As Long = 3 ' percorso non trovato
Const SE_ERR_OOM As Long = 8 ' memoria esaurita
Const SE_ERR_SHARE As Long = 26
Dim Scr_hDC As Long
Dim ret As Long
Dim sMsg As String
Dim risposta As Long
Scr_hDC = GetDesktopWindow()
ret = ShellExecute(Scr_hDC, "Open", _
App.Path & "\RELAZIONI\" & _
NomeFile, "", App.Path & _
"\RELAZIONI", SW_SHOWNORMAL)
If ret <= 32 Then ' Si è verificato un errore
Select Case ret
Case SE_ERR_FNF
sMsg = "File non trovato"
Case SE_ERR_PNF
sMsg = "Percorso non trovato"
Case SE_ERR_ACCESSDENIED
sMsg = "Accesso negato"
Case SE_ERR_OOM
sMsg = "Memoria esaurita"
Case SE_ERR_DLLNOTFOUND
sMsg = "DLL non trovata"
Case SE_ERR_SHARE
sMsg = "Violazione di condivisione"
Case SE_ERR_ASSOCINCOMPLETE
sMsg = "Associazione di file " & _
incompleta o non valida"
Case SE_ERR_DDETIMEOUT
sMsg = "DDE Time out"
Case SE_ERR_DDEFAIL
sMsg = "DDE transazione fallita"
Case SE_ERR_DDEBUSY
sMsg = "DDE occupato"
Case SE_ERR_NOASSOC
sMsg = "Nessuna associazione per " & _
"l'estensione del file"
Case ERROR_BAD_FORMAT
sMsg = "File EXE non valido o errore " & _
"nell'immagine EXE"
Case Else
sMsg = "Errore sconosciuto"
End Select
If ret = 31 Then
' non è installato Acrobat Reader
risposta = MsgBox("ATTENZIONE: in questo sistema " & _
"non è installato Acrobat Reader, necessario " & _
"per visualizzare documenti PDF." & vbCrLf & vbCrLf & _
"Per installare Acrobat Reader (vers. 5.1 italiana): " & _
"premere SI" & vbCrLf & "Per annullare l'apertura " & _
"del documento PDF: premere NO", _
vbYesNo Or vbCritical, "Installare Acrobat Reader?")
If risposta = vbYes Then
' risposta = SI
' ATTENZIONE: se il programma di setup di Acrobat Reader
' si trova in un altro percorso, modificare l'istruzione
' seguente
Shell App.Path & "\SETUP\AdbeRdr60_ita_full_WinXP.exe", _
vbNormalFocus
Else
' risposta = NO
MsgBox "Apertura documento PDF annullata.", vbInformation
End If
Else
ret = MsgBox("ERRORE: n. " & ret & " - " & _
sMsg, vbCritical, "ApriPDF")
End If
End If
End Sub
22 Gennaio 2008 a 12:29
Ti ringrazio per il codice. Avevo un sacco di problemi con l’utilizzo delle DLL di acrobat per la sola visualizzazione di pdf (cambiano le dll al cambiare della versione) e il tuo codice mi ha risolto il problama in modo pulito.
Ciao e Grazie.
22 Gennaio 2008 a 12:31
Sono felice che questo articolo ti sia stato utile e grazie per avermelo fatto sapere!
18 Giugno 2008 a 12:03
Scusa ma inserendo il codice su VS 2005 mi da errore su App dicendomi che non è definita…. devo includere qualche libreria in particolare?
18 Giugno 2008 a 13:05
Il codice pubblicato in questo post si riferisce a VB 6.0 oppure a VBA (es. in Access) non a Visual Basic .NET/2005/2008, come specificato all’inizio del post stesso.
Per aprire un PDF in VB.NET è molto più semplice: basta utilizzare Process.Start, passandogli un oggetto ProcessStartInfo opportunamente inizializzato.
Per esempio per stampare un file PDF puoi utilizzare una procedura come quella spiegata qui:
http://www.eggheadcafe.com/software/aspnet/30193766/printing-pdf-from-vbnet.aspx
18 Giugno 2008 a 13:55
Grazie per la risposta e per il link ma soprattutto per la celerità!!!
Scusa per l’ignoranza ma sopra al titolo del tuo post c’è la dicitura:
Flash Control for ASP.NET 2.0
Ancora grazie mille!!
Ciao.
18 Giugno 2008 a 13:59
Quello è il link all’articolo precedente (in ordine cronologico)
Nella riga dopo vedi “#14 Aprire un file PDF”
Poi “Pubblicato da …”
… e infine “Per aprire un file PDF in VB6/VBA …”
Ciao
12 Luglio 2008 a 11:44
Ho messo in un modulo il tuo codice, poi nel form principale creato un tasto con il seguente codice:
Private Sub Command1_Click()
Dim Nome As String
Nome = App.Path & “\prova.pdf”
MsgBox Nome
ApriPDF(Nome)
End Sub
Quando premo il tasto, mi dice:
“Errore di compilazione: prevista variabile o routine e non modulo”
Uso VB6 e ho imparato con il “fai da te” potresti aiutarmi?
12 Luglio 2008 a 14:05
Ho risolto, con questo comando applicato ad un bottone, apro tutti i file che mi interessano con il programma predefinito di windows!
Private Sub BT_SchedaTecnica_Click()
Shell “rundll32.exe url.dll,FileProtocolHandler ” & (TXT_FileTecnica), vbMaximizedFocus
End Sub