Envío Directo Archivos a Impresora de Windows (RawPrint)

 


Estos días he estado intentado compilar mi aplicación principal en 64Bits y me he ido encontrado varios inconvenientes por el camino.

Hoy os voy a hablar de uno de ellos, y es que utilizo en muchas partes de mi aplicación un complemento OCX de Adobe Acrobat Reader para visualizar y imprimir los PDF y este sólo funciona en 32bits. 

Para visualizarlos, lo he resuelto con el nuevo control de PowerBuilder WebBrowser y he comprobado que se pueden abrir  en 32 y 64 bits. Pero con esta solución me han salido dos problemas mas:

El primero es que con el WebBrowser no puedo imprimir directamente sin abrir el cuadro de dialogo.

El segundo es que si utilizo el control de forma invisible, sólo para poder imprimir un PDF generado, si este tiene muchas páginas, no hay ningún evento que me diga cuando ha finalizado la carga del Pdf y la impresión puede fallar. Un pequeño truco podría ser poner un Sleep(2) para asegurar la carga, pero no me acaba de convencer....

Indagando por Internet he tropezado en Github con un projecto c# llamado RawPrint de Frogmore Computer Services Ltd que nos permite enviar un archivo directo a la impresora. 

Básicamente lo que he hecho es crear un nuevo projecto c# y he copiado las Clases del proyecto RawPrint eliminando una Interface, que hace que no sea compatible con el .Net Dll Importer de PowerBuilder.

Ya en PowerBuilder, el ejemplo que he creado es un visor básico de PDF utilizando el WebBrowser en el que he añadido un botón para hacer la impresión directa del fichero seleccionado.

Lo he compilado a 32Bits y a 64 Bits y funciona correctamente.

24-05-2022: Proyecto descrito en artículo archivado. Nueva versión en repositorio con librería en .Net6 y PowerBuilder 2022 R2 build 2693.

Nuevo artículo relacionado: Imprimir PDF's con el nuevo WebBrowser de PB 2022 R2

Os dejo el enlace de proyecto actual en GitHub:

github.com/rasanfe/pbRawPrint

Y proyecto en Visual Studio 2022:

github.com/rasanfe/RawPrint

Para los que necesiten versiones anteriores como la descrita en este artículo:

Proyecto PowerBuilder 11.5 Build 2506

Proyecto PowerBuilder 12.6 build 3506

Proyecto Visual Studio 2022 NetCore 3.1 COM/ActiveX

Proyecto PowerBuilder 2019 build 2779

Proyecto PowerBuilder 2021 build 1509

Proyecto Visual Studio 2022 NetCore 3.1


Comentarios

  1. Interesante propuesta, y no se me había ocurrido hacerlo de la forma en como tu lo as hecho, abriéndolo en un WebBrowser, yo al principio lo que hice era generar un archivo HTML, abrirlo con un OCX Word y desde ahí se enviaba la impresión, todo de manera oculta claro (ocurría error si el word no estaba instalado o estaba vencido o sin activar), pero el problema se me presentaba cuando se trataba de un ticket que dejaba mucho espacio al inicio de la hoja y al final (no habia la forma de personalizar la hoja de word en la que se abría el documento a imprimir), y cuando quise que imprima varias paginas no lo podía hacer. Así que investigando un poco me encontré con la opción de poder exportar mis DataWindows que eran para imprimir a PDF utilizando el programa pdf24 creator, que hace la exportación de manera "invisible" y luego para imprimir uso el programa Ghostscript de 64 o 32 bits según sea el caso, la impresión lo envio desde un comando CMD:
    PDFtoPrinter.exe "D:\\documento.pdf" "EPSON TM-T(203dpi)"

    Hace un par de años que vengo trabajando de la forma que indico en las ultimas líneas y hasta ahora me a ido muy bien, si bien es cierto tengo que instalar esas dos aplicaciones complementarias, pero se cumple con lo que se busca hacer.

    gracias por leerme

    ResponderEliminar
    Respuestas
    1. Gracias por comentar.
      Para ejecutar comandos desde PowerBuilder te recomendaría usar el objeto n_runandwait de Roland Smit (https://www.topwizprogramming.com/freecode_runandwait.html).
      No conocía la aplicación PDFtoPrinter.exe, esto hubiera resulto mi problema....
      Me gusta más interactuar con librerías C# que se integran muy con PowerBuilder desde la versión 2019 y el nuevo .Net DLL Importer.
      Antes recurría a programitas de este estilo para diferentes tareas como pdf_sign.exe (pdfsign v1.2.0 by Bruno Lowagie and Paulo Soares) para la firma digital de archivos PDF o pdftk.exe (https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/) para unir o dividir archivos PDF.
      En fin un saludo!

      Eliminar

Publicar un comentario