Imprimir un documento sin abrirlo desde vb.net
La idea es poder abrir un documento en PDF y enviarlo a la impresora que nosotros le indiquemosen la linea p.StartInfo.Arguments hemos puesto como impresora la XPS de microsoft, pero podemos poner la nuestra "HP Deskjet" o cualquier otra. Esto permite abrir el documento y enviarlo a imprimir por la impresora especifica
En la linea p.WaitForExit(5000) espera 5 segundos (5000 milisegundos) para procesar, realmente no es necesario pero lo he utilizado para envie correctamente el archivo a la cola de impresión, solo me he encontrado alguna vez que si el archivo es muy grande, no envia el doumento correctamente a imprimir (faltan hojas)
Closemainwindow será el proceso que cierre la ventana principal, yo lo he sustituido por kill, porque se quedaba la aplicación del adobe reader abierta.
Using p As New Process
p.StartInfo.FileName = "C:\ruta\del\documento.pdf"
p.StartInfo.Verb = "PrintTo"
p.StartInfo.Arguments = Chr(34) & "Microsoft XPS Document Writer" & Chr(34)
p.StartInfo.CreateNoWindow = True
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
p.Start()
p.WaitForExit(5000)
'p.CloseMainWindow()
p.Kill()
p.Close()
End Using
Espero que os sirva
Hola, estoy probando tu código, pero no me manda a imprimir a la impresora que puse en Arguments, me manda a la impresora que tengo por defecto! :(
ResponderEliminarHola prueba este codigo, solo que en este caso necesitas tener el acrobat instalado. me comentas si te a funcionado
ResponderEliminarDim Path As String = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
Dim Adjunto As String = Path & "\Reporte" & InstanciaID & ".pdf"
Dim pathToExecutable As String = "AcroRd32.exe"
Dim SPrinter As String
SPrinter = NombreImpresora
Dim starter As New ProcessStartInfo(pathToExecutable, "/t """ + Adjunto + """ """ + SPrinter + """")
Dim Process As New Process()
Process.StartInfo = starter
Process.Start()
Process.StartInfo.WindowStyle = ProcessWindowStyle.Minimized
Process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
Process.WaitForExit(7000)
Process.Kill()
Process.Close()