Escribir una impresora virtual en .NET

Estoy buscando crear una impresora virtual que transfiera datos a mi aplicación .NET. Entonces quiero crear un instalador que instale tanto la impresora como la aplicación .NET. Sería realmente agradable poder escribirlo todo en C #, pero tengo la sensación de que esto requerirá que se escriba un controlador de impresora sin código administrado. ¿Alguien sabe de un tutorial bastante limpio o un ejemplo de cómo hacer esto?

Visite http://www.printerplusplus.com . Es una impresora virtual .NET de código abierto. Le proporciona un instalador y una clase .NET para escribir código y procesar sus “datos de impresora”.

Creo que tendrás que hacer un montón de envoltorios de WinAPI. Comience a investigar sobre el Kit de desarrollo de controladores de Windows para encontrar las cosas que debe hacer.

También encontré este Printer Engine Resource Toolkit comercial para .NET …

Simplemente podría hacer que su aplicación se exponga como una impresora de tipo LPD o monitorizar el puerto 9100. Luego puede instalar cualquier controlador de impresión que desee, y apuntarlo a su aplicación.

Hizo exactamente lo que está preguntando utilizando el proyecto Github: Microsoft / Windows-driver-samples / print / XPSDrvSmpl

https://github.com/Microsoft/Windows-driver-samples/tree/master/print/XPSDrvSmpl

Instalador: http://wixtoolset.org/

Aplicación: escuchar el puerto interno

Flujo: instale la impresora y la aplicación desde un único instalador. El usuario imprime algo con su controlador y mientras la aplicación escucha el puerto interno. Cuando se envían datos, la aplicación los recoge. Esto es para XPS, se puede convertir a PDF, pero el flujo es similar sin importar lo que está imprimiendo. Si necesita algo más, consulte Microsoft / Windows-driver-samples / print / en GitHub u otras fonts específicas para sus necesidades.

Actualizar:

Muchas preguntas sobre cómo hacer que el conductor funcione así que aquí es un ejemplo rápido:

Comience descargando Windows Driver Kit (WDK) si no lo tiene instalado ya. Al instalar, elija agregar la extensión para Visual Studio también en el paso final. En su instalación de Visual Studio 2017 necesita tener el Desktop development with C++ para tener los SDK correctos. Si no lo tiene, vea la respuesta a continuación sobre cómo agregarlo.

¿Cómo agrego funciones a Visual Studio 2017?

https://developer.microsoft.com/en-us/windows/hardware/windows-driver-kit

A continuación, descargue el archivo .zip para Windows-driver-samples master:

https://github.com/Microsoft/Windows-driver-samples/archive/master.zip

Navegue a la carpeta \print\XPSDrvSmpl y abra XPSDrvSmpl.sln en Visual Studio.

Luego siga la guía propia de Microsofts en GitHub. Como puede ver, es para Visual Studio 2015, pero creo que es el mismo para 2017 (aún no probado):

Para crear una solución de controlador utilizando Windows Driver Kit (WDK) 10 y Visual Studio 2015, realice los siguientes pasos.

  1. Abra el archivo de solución en Visual Studio 2015.
  2. Agregue todos los archivos no binarios (generalmente ubicados en el directorio \ install de la muestra) al proyecto de paquete: a. En el Explorador de soluciones, haga clic con el botón derecho en Archivos de controladores b. Seleccione Agregar, luego haga clic en Artículo existente c. Navegue hasta la ubicación donde descargó la muestra y seleccione todos los archivos en el directorio de instalación o el conjunto equivalente de archivos no binarios como INF, INI, GPD, PPD, etc. d. Haga clic en Agregar
  3. Configure estos archivos para agregarlos al paquete del controlador: a. En el Explorador de soluciones, haga clic con el botón derecho en la solución y seleccione Agregar> Nuevo proyecto. Elija el paquete de instalación del controlador en Visual C ++ / Windows Driver / Package. segundo. En el Explorador de soluciones, haga clic con el botón derecho en el proyecto Paquete y seleccione Propiedades. do. En el panel izquierdo, haga clic en Propiedades de configuración> Instalación del controlador> Archivos de paquete. re. En el panel derecho, use el botón de puntos suspensivos (…) para buscar el conjunto de archivos que debe agregarse al paquete del controlador. Se deben agregar todos los archivos de datos que agregó en el Paso 2-c, excepto el archivo INF. Esta configuración es por architecture, por lo que esta configuración debe repetirse para cada architecture que se construirá. mi. Haga clic en Aceptar.
  4. Abra el archivo INF y edítelo para que coincida con la salida construida. a. Abra el archivo INF. segundo. En la sección Versión, agregue una referencia a un archivo de catálogo como este: CatalogFile = XpsDrvSmpl.cat. do. En la sección SourceDisksFiles, cambie la ubicación de los archivos DLL que está creando, a = 1. Esto indica que no hay un directorio específico de architecture en este controlador. Si envía varias architectures simultáneamente, deberá cotejar manualmente el controlador INF.

En este punto, Visual Studio 2015 podrá construir un paquete de controladores y generar los archivos en el disco. Para configurar la firma e implementación de controladores, consulte Desarrollo, prueba e implementación de controladores.

https://github.com/Microsoft/Windows-driver-samples/tree/master/print/XPSDrvSmpl#build-the-sample

Estaba buscando una respuesta para una pregunta similar, y encontré este enlace a través de Wikipedia – http://www.colorpilot.com/emfprinterpilot.html (permite crear impresoras virtuales en diferentes idiomas)

¿Por qué no considerar usar un enfoque alternativo? Como utilizar un progtwig de impresión intermedio ya preparado, como la aplicación de impresión a PDF disponible gratuitamente. Entonces, todo lo que necesita es decodificar PDF utilizando una biblioteca de terceros (que también tiene varianza libre y de código abierto) en lugar de romperse la cabeza para reinventar la rueda. Hay otra aplicación de impresión a XXX que también podría considerar dependiendo del formato que considere oportuno.

No me parece que interpretar el enfoque PDF sea bueno tampoco. No sé por qué quieres hacer lo que quieres hacer. Tal vez estés tratando de escribir una impresora PDF tuya.

Creo que deberías darle un vistazo al desarrollo del controlador de Windows. Si desea desarrollar un controlador de impresora, creo que tendrá que hacerlo en C ++.

Buena suerte.

No puedes. El modelo de controlador de Windows es nativo.

Si recuerdo correctamente, Microsoft no admite .NET dentro del desarrollo del controlador de la impresora. Todavía tengo que encontrarme con un controlador de impresora .NET puro. ¡Serás un hombre muy valiente para hacerlo! El sitio web “Printer Driver Resource Toolkit” no dice que el controlador se haya escrito en .NET

    Intereting Posts