Stampare un file e consentire di scegliere la stampante.

sabato 04 ottobre 2008 - 19.13

lukepet Profilo | Junior Member

Ho una applicazione in cui sto implementando una funzione per attivare la stampa di alcuni file pdf.

Volevo fare in modo che cliccando sul bottone di stampa venga mostrata la finestra per la selezione della stampante e cliccando su OK si avvii la stampa del file.

Ho provato utilizzando l'oggetto PrintDialog ma non riesco a passargli il file pdf da stampare.

Potete suggerirmi le istruzioni da utilizzare, grazie.

jtpsala Profilo | Senior Member

Ciao,
io in una applicazione simile ho fatto in questo modo:
nella mia form ho inserito una finestra di dialogo apri file e un controllo webbrowser.
Quando faccio click sul button1 parte la finestra di dialogo apri file, pesco il mio file .PDF e lo invio al controllo webbrowser per l'apertura (webbrowser1.Navigate())
Dopo di che utilizzo il controllo stampa che visualizza direttamente Acrobat nella WebBrowser.

Ciao.
Giuseppe

lukepet Profilo | Junior Member

Io però avrei l'esigenza di non avviare Acrobat e inviare direttamente il file in stampa senza visualizzarlo.

Sono riuscito ad implementare una cosa del genere avviando un processo "Print", il problema è che la stampa viene inviata direttamente alla stampante predefinita, invece io vorrei che venisse prima visualizzata la finestra per la scelta della stampante.

jtpsala Profilo | Senior Member

Usi vb 2008?
Prova cosi:
aggiungi alla tua form un combobox e nell'evento load del form scrivi questo:

Dim strPrinter As String
For Each strPrinter In Printing.PrinterSettings.InstalledPrinters
ComboBox1.Items.Add(strPrinter)
If strPrinter = strDefaultPrinter Then
ComboBox1.SelectedIndex = ComboBox1.Items.IndexOf(strPrinter)
End If
Next strPrinter

nello spazio dei nomi aggiungi:
Dim prtdoc As New Printing.PrintDocument
Dim strDefaultPrinter As String = prtdoc.PrinterSettings.PrinterName

Cosi dall'elenco della combobox potrai selezionare la stampante che ti interessa che si trova installata sul p.c..

Ciao e fammi sapare.
Giuseppe

lukepet Profilo | Junior Member

io ho utilizzato questo codice, ma non va:

Dim PrintDialog As New PrintDialog
Dim pDoc As Printing.PrintDocument
pDoc = New Printing.PrintDocument()
Dim result As DialogResult = PrintDialog.ShowDialog()
pDoc.PrinterSettings.PrinterName = PrintDialog.PrinterSettings.PrinterName
pDoc.PrinterSettings.PrintFileName = "fileprova.pdf"
PrintDialog.Document = pDoc
If result = DialogResult.OK Then pDoc.Print()

mi stampa un file bianco. Dov'è che sbaglio?

jtpsala Profilo | Senior Member

Fai cosi:

Dim myProcess As Process = New Process
'myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
myProcess.StartInfo.FileName = "file aperto nella dialog"
myProcess.StartInfo.Verb = "Print"
myProcess.StartInfo.UseShellExecute = True
myProcess.Start()
myProcess.WaitForInputIdle()

If myProcess.Responding Then
myProcess.CloseMainWindow()
Else
myProcess.Kill()
End If
End Sub

Fammi sapere ciao.
Giuseppe

lukepet Profilo | Junior Member

Ho letto solo ora il tuo suggerimento comunque sono riuscito a risolvere in questo modo:

Dim PrintDialog As New PrintDialog
Dim result As DialogResult = PrintDialog.ShowDialog()
Dim printer As String = PrintDialog.PrinterSettings.PrinterName
If result = DialogResult.OK Then
Dim PrcProcesso As New Process()
PrcProcesso.StartInfo.FileName = "nomefile.pdf"
PrcProcesso.StartInfo.Verb = "PrintTo"
PrcProcesso.StartInfo.Arguments = Chr(34) + printer + Chr(34)
PrcProcesso.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
PrcProcesso.StartInfo.UseShellExecute = True
PrcProcesso.StartInfo.CreateNoWindow = True
PrcProcesso.Start()
EndIf
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5