FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
No funciana mandar fichero txt a impresora con XE2
Hola a todos
Me surge un problema y haber si alguien me puede orientar. Antes trabajaba con D6 y utilizaba una funcion (que pongo más abajo) para mandar a imprimir un fichero txt con códigos de escape de una zebra, hasta aquí todo bien y utilizo este método porque es muy rápido ante un quickreport y demás. El problema viene cuando ahora estoy utilizando XE2 y utilizó la misma función, el compilador no dice nada pero no se imprime lo que mando. Yo creo que el problema tiene que ver con los arrays of char y unicode, pero la verdad no se por donde metermano. Por eso os pidó ayuda. procedure imprimir(const sFileName:string;impresora:integer); const iBufferSize = 32768; var Count, BytesWritten: Cardinal; hPrinter, hDeviceMode: THandle; sDevice : array[0..255] of Char; sDriver : array[0..255] of Char; sPort : array[0..255] of Char; DocInfo: TDocInfo1A; f: File; pBuffer: Pointer; begin Printer.PrinterIndex := impresora; Printer.GetPrinter(sDevice, sDriver, sPort, hDeviceMode); if not WinSpool.OpenPrinter(@sDevice, hPrinter, nil) then exit; DocInfo.pDocName := 'Probando'; DocInfo.pDatatype := 'RAW'; DocInfo.pOutputFile := nil; if StartDocPrinter(hPrinter, 1, @DocInfo) = 0 then begin WinSpool.ClosePrinter(hPrinter); exit; end; if not StartPagePrinter(hPrinter) then begin EndDocPrinter(hPrinter); WinSpool.ClosePrinter(hPrinter); exit; end; System.Assign(f, sFileName); try Reset(f, 1); GetMem(pBuffer, iBufferSize); while not eof(f) do begin Blockread(f, pBuffer^, iBufferSize, Count); if Count > 0 then begin if not WritePrinter(hPrinter, pBuffer, Count, BytesWritten) then begin EndPagePrinter(hPrinter); EndDocPrinter(hPrinter); WinSpool.ClosePrinter(hPrinter); FreeMem(pBuffer, iBufferSize); exit; end; end; end; FreeMem(pBuffer, iBufferSize); EndDocPrinter(hPrinter); WinSpool.ClosePrinter(hPrinter); finally System.Closefile(f); end; end; |
#3
|
||||
|
||||
#4
|
||||
|
||||
A qué ter refieres con "No se imprime lo que mando"
¿No se imprime nada? ¿Se imprime "basura"? ¿Se imprime solo parte? ¿Cómo generas el fichero? Es Unicode / UTF8 o algo parecido |
#5
|
|||
|
|||
Tomo nota Casimiro.
Y efectivamente engranaje, cuando llega a este punto no lo supera if StartDocPrinter(hPrinter, 1, @DocInfo) = 0 then begin WinSpool.ClosePrinter(hPrinter); exit; end; |
#6
|
||||
|
||||
Cita:
Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#7
|
|||
|
|||
Perdona ecfisa
Pero he puesto los tag y acabo de hacer la prueba en la vista previa y automáticamente los quita, por lo menos a mí |
#8
|
|||
|
|||
Hola duilioisola
Lo que mando es un fichero txt con código epl para que la impresora zebra los imprimá, pero como he comentado anteriormente cuando llegá a este paso entra y va al exit.
De antemano gracias a todos. Última edición por ecfisa fecha: 04-06-2014 a las 12:56:24. Razón: agregar etiquetas |
#9
|
||||
|
||||
Hola comba.
Cita:
Intenta la corrección usando las etiquetas manualmente de este modo: [delphi] tu_codigo [/delphi], de momento ya las agregué a tu último mensaje. Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 04-06-2014 a las 13:08:59. |
#10
|
|||
|
|||
has probado a modificar esto:
para pasar como poutputfile el puerto de la impresora en lugar de nulo? mas o menos asi:
Última edición por engranaje fecha: 04-06-2014 a las 13:16:58. |
#11
|
|||
|
|||
Hola engranaje
He modificado lo que me habias comentado pero me da este error. E2010 Incompatible types: 'PAnsiChar' and 'array[0..255] of Char' |
#12
|
|||
|
|||
cierto, puedes probar con:
Aunque lo cierto es que creo que es mejor trabajar directamente sobr Pchar, declarando las variables asi:
cargandolas asi:
y liberando la memoria cuando corresponda:
|
#13
|
||||
|
||||
Hola, Comba.
He probado tu código en un XE2 y en un XE5, sin cambiar nada, y en ambos casos ha funcionado correctamente. Eso si, no tengo ninguna impresora de tickets, pero lo he lanzado a una LaserJet 4200 y ha ido de lujo. El problema seguramente lo tendrás en otro sitio. Saludos |
#14
|
||||
|
||||
Imprimir sobre Zebra desde XE4
Hola amigo Comba,
Parece mentira que a estas alturas tenga el mimo problema. Por necesidades (ilogicas) hemos mudado el codigo del viejo D7 hacia un XE4 y, entre otras, la funcion de impresion siobre impresoras Zebra no ha funcionado nunca más. En mi caso tambien, llega hasta el mismo punto y no produce ninguna salida. Aqui parte de mi código muy similar al tuyo:
Como lo has resuelto?
__________________
Gracias de antemano por vuestra ayuda. ·.:*:.·Yako·.:*:.· |
#15
|
||||
|
||||
Actualizo la data.
Modifique la instruccion original: ...por esta nueva instruccion sugerida por otro amigo: ...pero tampoco funciona. No sale nada por la impresora y en cambio con Delphi7 si lo hace. ¿Alguna idea o sugerencia?
__________________
Gracias de antemano por vuestra ayuda. ·.:*:.·Yako·.:*:.· |
#16
|
||||
|
||||
A lo mejor el problema está en el soporte para caracteres Unicode de las últimas versiones de Delphi.
Desde la versión 2009 de Delphi se incluye soporte a caracteres Unicode por defecto, por lo que la clase String equivale a la antigua WideString. Lo mismo pasa con los tipos Char. Si quieres que las cosas funcionen como estaban en versione anteriores de Delphi tienes que sustituir los String por AnsiStirng, y los Char por AnsiChar A lo mejor tienes que cambiar todas las transformaciones tipo PChar(...) a PAnsiChar(...) Espero que te sirva Un saludo |
#17
|
||||
|
||||
Solucionado
Bueno amigos, luego de mucho andar, he aqui la solución.
La instruccion original, debe modificarse de esta forma:
Con esto, sencillamente, funciona.
__________________
Gracias de antemano por vuestra ayuda. ·.:*:.·Yako·.:*:.· |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
seleccion de impresora y letra de la impresora | emeceuy | Impresión | 6 | 13-08-2017 14:11:05 |
Mandar a Puerto de Impresora | Carliviris | Varios | 1 | 11-01-2007 21:31:29 |
Obtener un fichero adjunto a un nodo de un fichero XML | muntasil | Internet | 0 | 18-07-2006 12:57:57 |
Como mandar datos a la impresora | Felix el Gato | JAVA | 3 | 27-04-2004 22:13:11 |
Mandar dos impresiones y cambiar de impresora Quick Report | MRSAM | Impresión | 2 | 18-02-2004 11:18:51 |
|