jueves, 28 de diciembre de 2017

Imprimir sin abrir desde vb.net

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 indiquemos

en 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

2 comentarios:

  1. 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! :(

    ResponderEliminar
  2. Hola prueba este codigo, solo que en este caso necesitas tener el acrobat instalado. me comentas si te a funcionado

    Dim 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()

    ResponderEliminar