#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
Walter detto
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.
Mario De Ghetto detto
Sono felice che questo articolo ti sia stato utile e grazie per avermelo fatto sapere!
diego detto
Scusa ma inserendo il codice su VS 2005 mi da errore su App dicendomi che non è definita…. devo includere qualche libreria in particolare?
Mario De Ghetto detto
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
diego detto
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.
Mario De Ghetto detto
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
wladipedia detto
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?
wladipedia detto
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
Icilio detto
Se posso vorrei fare una domanda, se ho archiviato in Access dei file PDF (tramite campo OLE)come posso fare per visualizzare i file PDF con vb.net.
P.S. sto leggendo il tuo libro, ma sull’argomento database in genere non c’è molto.