Título: Imprimir usando la API Windows Publicado por: Becerra en 29 Julio 2016, 13:49 pm Hola
Estoy buscando la forma de mandar unos datos a una impresora usando la API de windows, nunca antes he programado directamente sobre la API, por lo que tengo un lío enorme. Lo que necesito es, primero obtener una lista de los nombres de las impresoras instaladas en el sistema, para que el usuario pueda seleccionar una. Los nombres puedo obtenerlos mediante las librerías Qt, lo que no sé es si a partir de solo el nombre luego puedo enviarle datos. Y una vez que el usuario haya seleccionado una, tengo que abrirla para poder enviarle una secuencia de bytes. Y ya está. Sencillo en principio, pero un lío para mi que nunca usé la API. Así que si podéis orientarme un poco de por donde empezar estaría muy agradecido :) Un saludo Título: Re: Imprimir usando la API Windows Publicado por: jorgediazbass en 29 Julio 2016, 21:57 pm Los lenguajes como C y C++ no definen una forma estandar de imprimir.
La razon es simple: el trabajo de impresion es una tarea específica de la plataforma, lo que implica: No hay una forma estandar de imprimir en C/C++ Se debe usar alguna caracteristica especifica de la plataforma (como codigo no portable) y/o del compilador para imprimir algo. Por ejemplo en Turbo C++ se puede usar stdprn para hacer referencia a la impresora e imprimir algo, tal como sigue: Código
Otra forma es funcionalmente similar a trabajar con archivos, pero en lugar de abrir un archivo del disco duro, haremos referencia a la impresora con uno de los siguiente valores: Código
Por ejemplo en Dev-C++ podemos usar: Código
El siguiente código me resulto, ya que es lo que buscaba. Impresión usando al API de Windows Si estamos trabajando con Windows, la mejor forma es usar la API, con esto logramos que sea el propio Windows, quien se encargue de ciertas tareas. Por ejemplo, con el siguiente código podemos imprimir un archivo de texto. Se mostrará el clásico cuadro de diálogo de impresión de Windows y podemos entonces seleccionar cualquier impresora, ya sea conectada al puerto paralelo, USB o de red: Código
Para que funcione el ejemplo debemos tener un archivo llamado texto.txt en el mismo directorio del programa ejecutable. Si trabajamos con Dev-C++, debemos ir a Project -> Project Options -> Parameters, y en el cuadro Linker agregamos las siguientes líneas en caso de no tenerlas: Código
En particular yo trabajo con Dev-C++. Título: Re: Imprimir usando la API Windows Publicado por: Becerra en 30 Julio 2016, 18:25 pm Hola
Otra forma es funcionalmente similar a trabajar con archivos, pero en lugar de abrir un archivo del disco duro, haremos referencia a la impresora con uno de los siguiente valores: Código
Así es como lo tengo ahora, es decir, cuando hice el programa todas las impresoras que tenía conectaban por puerto LPT1. El problema es que todas las que me están llegando ahora se conectan por USB y claro, tengo que actualizar el programa. Impresión usando al API de Windows Si estamos trabajando con Windows, la mejor forma es usar la API, con esto logramos que sea el propio Windows, quien se encargue de ciertas tareas. Por ejemplo, con el siguiente código podemos imprimir un archivo de texto. Se mostrará el clásico cuadro de diálogo de impresión de Windows y podemos entonces seleccionar cualquier impresora, ya sea conectada al puerto paralelo, USB o de red: Yo tengo que hacerlo de otra forma, no puedo abrir el diálogo de la impresora cada vez que el programa mande algo a ella, lo que tengo que hacer es en la ventana de configuración del programa añadir una lista de las impresoras disponibles en el sistema y guardar junto con el resto de la configuración la que se haya escogido. Y luego el programa mande los datos a la impresor que corresponde. Con Qt (que son las librerías con las que hice el programa) puedo hacer muy fácilmente la lista con las impresoras disponibles y guardar la selección del usuario. Entonces estoy buscando la forma de poder abrir y enviarle unos bytes a la impresora que yo quiera. No sé si a partir de solo el nombre se puede hacer o hay que usar la AP de window para obtener las que hay y algún identificador o ID que use windows para poder abrirla directamente. Un saludo Título: Re: Imprimir usando la API Windows Publicado por: Becerra en 30 Julio 2016, 21:21 pm Hola
Bueno, pues al final encontré un trozo de código que es lo que buscaba: http://stackoverflow.com/questions/26855598/how-to-use-qt-qprinter-to-send-cut-paper-command (Por favor, si no se pueden indicar enlaces externos, haganmelo saber). Tal como está, lo metí en una función que recibe un QString con el nombre de la impresora y un QByteArray con los datos y funciona sin problemas. (QString y QByteArray son clases de Qt). Ahora empieza el mismo problema, pero para linux XD Un saludo |