Newsgroup: it.comp.lang.visual-basic
Titolo: Stampa PDF

Salve a tutti,
avrei la necessit� di stampare dei pdf e per il momento lo faccio da 
shell... ma mi piacerebbe se fosse possibile lanciare la stampa senza che 
l'acrobat reader compaia a monitor... come potrei fare?
grazie 1000
A. 



Quale comando utilizzi?

"Andrea [Work]" <andrea.isw...@gmail.invalid> ha scritto nel 
messaggio news:lp6onsg00a06$.1by50uu0y6fsk$.dlg@40tude.net...

Shell ("C:\Programmi\Adobe\Reader 9.0\Reader\AcroRd32.exe /t " & f)
dove f � il nome del file con il percorso...
Il shellexecute lo voglio evitare perch� c'ho perso diverso tempo a farlo 
andare ma non va :(
grazie 1000
A. 

 andare ma non va :(
Hai verificato se puoi usare un activex di acrobat o simile?

 Hai verificato se puoi usare un activex di acrobat o simile?
ma pdfCreator non lo puoi installare?
http://sourceforge.net/projects/pdfcreator/
Lo puoi programmare ed ha pure la possibilità di essere "silente"...

 l'acrobat reader compaia a monitor... come potrei fare?
In fondo troverai le istruzioni da inserire in un modulo
che eseguir� ci� che cerchi.
StampaDisegno(NomeFileCompetoDiPercorso)
Il tutto imita questi comandi windows:
- Risorse del computer
- Ricerca del file
- Tasto destro del mouse
- Print o Stampa
Dimenticavo:
Il tutto con XP, non so in seguito
Saluti.
Sauro
' Module dedicated to Shell command functions.
Private Declare Function ShellExecute Lib "shell32.dll" Alias 
"ShellExecuteA" _
                                    (ByVal nHwnd As Long, _
                                     ByVal sLpszOp As String, _
                                     ByVal sLpszFile As String, _
                                     ByVal sLpszParams As String, _
                                     ByVal sLpszDir As String, _
                                     ByVal nFsShowCmd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Const SW_SHOWNORMAL As Long = 1
Private Const SW_SHOWMINIMIZED As Long = 2
Public Const SE_ERR_FNF = 2&                ' File not found
Public Const SE_ERR_PNF = 3&                ' Path not found
Public Const SE_ERR_ACCESSDENIED = 5&       ' Access denied
Public Const SE_ERR_OOM = 8&                ' Out of memory
Public Const SE_ERR_DLLNOTFOUND = 32&       ' DLL not found
Public Const SE_ERR_SHARE = 26&             ' A sharing violation occurred
Public Const SE_ERR_ASSOCINCOMPLETE = 27&   ' Incomplete or invalid file 
association
Public Const SE_ERR_DDETIMEOUT = 28&        ' DDE Time out
Public Const SE_ERR_DDEFAIL = 29&           ' DDE transaction failed
Public Const SE_ERR_DDEBUSY = 30&           ' DDE busy
Public Const SE_ERR_NOASSOC = 31&           ' No association for file 
extension
Public Const ERROR_BAD_FORMAT = 11&         ' Invalid EXE file or error in 
EXE image
Public Function StampaDisegno(NomeFileDis As String) As Long
    Dim nResult As Long, sMsg As String, Stato As Long
    Stato = 0
    ''''''''''''''''''''''''Errore'''''''''''''''''''''''''
'    Stato = 0    Stampa OK
'    Stato = 1    File non trovato
'    Stato = 2    Path non trovata
'    Stato = 3    Altro errore
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''
    nResult = PrintFile(NomeFileDis)
    If nResult <= 32 Then
        Stato = 3
        'There was an error
        Select Case nResult
            Case SE_ERR_FNF
                sMsg = "File non trovato"
                Stato = 1
                StampaDisegno = Stato
                Exit Function
            Case SE_ERR_PNF
                sMsg = "Cartella non trovata"
                Stato = 2
                StampaDisegno = Stato
                Exit Function
            Case SE_ERR_ACCESSDENIED
                sMsg = "Accesso negato"
            Case SE_ERR_OOM
                sMsg = "Out of memory"
            Case SE_ERR_DLLNOTFOUND
                sMsg = "DLL not found"
            Case SE_ERR_SHARE
                sMsg = "A sharing violation occurred"
            Case SE_ERR_ASSOCINCOMPLETE
                sMsg = "Incomplete or invalid file association"
            Case SE_ERR_DDETIMEOUT
                sMsg = "DDE Time out"
            Case SE_ERR_DDEFAIL
                sMsg = "DDE transaction failed"
            Case SE_ERR_DDEBUSY
                sMsg = "DDE busy"
            Case SE_ERR_NOASSOC
                sMsg = "Per questa estensione non esite un EXE adeguato"
            Case ERROR_BAD_FORMAT
                sMsg = "Invalid EXE file or error in EXE image"
                sMsg = "Errore nell'EXE"
            Case Else
                sMsg = "Errore sconosciuto"
        End Select
        MsgBox sMsg
    End If
    StampaDisegno = Stato
End Function
Public Function PrintFile(ByVal sFileName As String) As Long
    Dim nResult As Long
    Dim nScr_hDC As Long
    Dim Fso As Object
    Dim Comando As String
   On Error GoTo 0
    Set Fso = CreateObject("Scripting.FileSystemObject")
    If Not Fso Is Nothing Then
        sFileName = Fso.GetAbsolutePathName(sFileName)
    End If
    nScr_hDC = GetDesktopWindow()
    nResult = ShellExecute(nScr_hDC, "Print", sFileName, "", "\", 
SW_SHOWMINIMIZED)
Stampato:
    PrintFile = nResult
End Function


Questa funziona... ma se passo alla ShellExecute il valore 0 (Hide) acrobat 
rimane lo stesso visibile... capita anche a te?
grazie 1000
A.

 Lo puoi programmare ed ha pure la possibilit� di essere "silente"...
si... posso installarlo ma a cosa mi serve? Io devo stampare i pdf, non 
generarli :)
A. 

"Andrea [Work]" <andrea.isw...@gmail.invalid> ha scritto nel 
messaggio news:11obu4rqhtnj5.n...@40tude.net...

ho provato... ma mi da sempre errore la createobject... non so se � colpa di 
acrobat 9.0... da quanto ho letto in rete fino alla 7.0 non c'erano problemi 
ma con la 9 ho letto diverse lamentele...
A. 

 
Questo ï¿œ uno di quei problemi che ho in todolist del tipo
"Non mi piace, ma la soluzione attuale funzionicchia, undi ci penserï¿œ 
dopo" per un mio software.
Ho provato il tuo cmando, digitando dentro start--> esegui
"C:\Programmi\Adobe\Reader 9.0\Reader\AcroRd32.exe" /t c:\lbtx.log
dove c:\lbtx.log ï¿œ un file realmente esistente, con tre righe di testo 
asciii al suo interno.
Solo che Acrobat parte correttamente ma mi dï¿œ errore
lamentandosi che
"Adober reader non ï¿œ in grado di aprire il file lbtx.log
perchï¿œ ï¿œ un file non supportato oppure perchï¿œ il file ï¿œ stato 
danneggiato...blablabla..."
ERGO:
non ho capito la tua soluzione....
illuminami :D

 Lo puoi programmare ed ha pure la possibilit� di essere "silente"...
Wodkino :)
Questo mi interessa:
Mi perdoni se approfitto di te, che sto pieno di lavoro e non ho tempo 
di guardarmelo ora?
Vorrei sapere, in brevissimo, se:
a) rilasciano un ocx che permetta di stampare quello che c'� in una 
picturebox ad esempio.
b) Se tramite questo, posso evitare di passare per stampanti predefinite 
di sistema per generare un pdf.
Cio�:
Quello che faccio io attualmente �:
Riempi la picture box,
Passa la picture box a stampante predefinita di sistema
(che nel mio caso � quella di PRIMO PDF).
Poi, da primo pdf, creo il pdf.
Il problema amaro � che in questo modo, non ho controllo sul nome del 
file :( primo pdf mi genera sempre un VB6.PDF, che io dopo devo 
rinominare...

rinominare...
Quello si risolve con BullZip che consente di selezionare il nome in diversi
modi, o su un file .ini o anche da codice.
http://www.bullzip.com/
Era anche stato postato un esempio di codice utile per partire qui:
http://tinyurl.com/yb8wtal
 
--
ciao
  Stefano


beh... tu li dai in pasto un .log... la mia soluzione � per i file .pdf :) 
Se invece di un.log li passi
un .pdf vedi che ti si apre acrobat reader e ti stampa automaticamente il 
pdf :) tutto qui :P
A. 

 
;) ah, giusto :)

 acrobat rimane lo stesso visibile... capita anche a te?
Veramente non capisco la domanda.
La funzione da utilizzare �:
Stampa Disegno(NomeFile)
Naturalmente bisogna prima verificare che il file
esista.
Saluti, Sauro