Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-02-2021
viverosjosem viverosjosem is offline
Baneado
 
Registrado: dic 2017
Posts: 64
Poder: 0
viverosjosem Va por buen camino
Question Imprimir contenido Base64 como Binario

Hola amigos del foro.

Tengo la siguiente situacion:
Recibo un string en Base64 desde un servidor WebService. Este contenido Base64 se procesa y se graba en disco como un Archivo PDF.

Código Delphi [-]
...
...
...

   sB64 := jValue.ToString;

   a := copy(sB64, pos('PDF":"', sB64)+6, length(sB64)-2);

   if (pos('error', sB64) > 0) then begin
      MemoContent.Text := jValue.ToString;
      PageControl1.ActivePage := TsErrores;

      lFlag := True;  // Detenemos el timer
      lError := True;

      lResult := False;
   end
   else begin
      sFF := Folder_ArchiDTE + '\PDF\';
      DecodeFile(a, sFF + sNumBFDte + '.PDF');

...
...
...

procedure TArchiDTE.DecodeFile(const base64: String; const FileName: string);
var
  stream: TBytesStream;
begin
  stream := TBytesStream.Create(TNetEncoding.Base64.DecodeStringToBytes(base64));
  try
    stream.SaveToFile(Filename);
  finally
    stream.Free;
  end;
end;

Una vez que el archivo PDF, esta grabado en disco, lo tomo con una aplicacion externa y lo envio a la impresora de Tikets (80x80).
La forma que uso para imprimirlo es esta:

Código Delphi [-]
ShellExecute(Handle, 'open', PChar(Folder_ArchiDTE + '\PdfToPrinter.exe'), PChar(sFF + sNumBFDte + '.PDF' + ' ' + EdPrinter.Text), nil, SW_HIDE).

Esto Funciona bien!, La boleta en PDF se imprime correctamente. Pero el proceso es muy lento. Mas de 20 segundos, entre grabar el archivo, rescatarlo, y luego imprimirlo.


La pregunta es:

¿Existe la manera de poder tomar el contenido en Base64, llevarlo a binario, y luego imprimirlo en la impresora de tikets directamente? (sin tener que grabar para luego rescatar y luego imprimir).

De antemano gracias.

Saludos
Jose Miguel.
Responder Con Cita
  #2  
Antiguo 13-02-2021
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por viverosjosem Ver Mensaje
Pero el proceso es muy lento. Mas de 20 segundos, entre grabar el archivo, rescatarlo, y luego imprimirlo.
Yo revisaría dónde está perdiendo realmente tanto tiempo, porque guardar un archivo y leerlo no debería tardar ni un segundo.
Responder Con Cita
  #3  
Antiguo 14-02-2021
viverosjosem viverosjosem is offline
Baneado
 
Registrado: dic 2017
Posts: 64
Poder: 0
viverosjosem Va por buen camino
Hola Casimiro.
La verdad es que el internet, en la localidad de mi cliente, es malo. Entonces desde que la boleta va al Servicio de Impuestos internos, vuelve, y se imprime. Pasan cerca de 20 segundos. Por eso quiero ver la posibilidad, de prescindir de la aplicacion externa, para enviar directamente el archivo a la impresora.

De todas maneras. Gracia por responder.

Saludos.
Jose Miguel.
Responder Con Cita
  #4  
Antiguo 14-02-2021
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si dices que lo lento es la conexión a internet, entonces ese es el problema, ¿no?
Porque una vez que tienes el fichero a imprimir, da igual que lo guardes en disco o no, eso no lleva ni un segundo.
Seguramente no te he entendido.
Responder Con Cita
  #5  
Antiguo 14-02-2021
viverosjosem viverosjosem is offline
Baneado
 
Registrado: dic 2017
Posts: 64
Poder: 0
viverosjosem Va por buen camino
Hola Casimiro.
Como te comente. El internet es lento. Pero tambien estoy usando una aplicacion externa para abrir el archivo PDF, e imprimirlo. La aplicacion: "PdfToPrinter". Entonces el internet Lento, sumado a que cada vez que llega el archivo PDF, hay que abrir la aplicacion "PDFToPrinter", para que imprima, lo hace mas lento aun. Por eso pense, que imprimiendo el PDF, en forma directa podria ahorrar unos valiosos segundos, como 6 u 8 segundos. nose.. cualquier segundo menos, me suma rapidez.

De todas maneras, como me comentas, revisare el codigo, para ver donde puedo agilizar algo el proceso. Pero si, de todas maneras, conoces una forma de impresion directa, lo agradeceria.

Saludos.

Jose Miguel.
Responder Con Cita
  #6  
Antiguo 14-02-2021
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola, pero has hecho cálculos en cuánto tarda cada apartado.
Dudo mucho que abrir un pdf con un soft externo tarde 8 segundos. Y si es así, cámbialo por otro.
Pon un temporizador en tu código y calcula cuánto tarda cada parte, algo así como:
Código Delphi [-]
timer1.enabled:=true;
descargar fichero de internet;
tiempo = now-timer1.datetime;
guardar en disco;
tiempo = now-timer1.datetime;
abrir pdftoprint;
tiempo = now-timer1.datetime;
Responder Con Cita
  #7  
Antiguo 26-02-2021
viverosjosem viverosjosem is offline
Baneado
 
Registrado: dic 2017
Posts: 64
Poder: 0
viverosjosem Va por buen camino
Hola Casimiro.
Logre reducir los tiempos de impresion a 10segundos. Pero aun queda la duda, de como imprimir directamente un PDF en BASE64, directo a la impresora. Sin utilizar un lector de PDF?

Saludos.
JoseMiguel.
Responder Con Cita
  #8  
Antiguo 27-02-2021
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Es simple, ¿la impresora entiende base64?
Si la respuesta es 'SÍ' entonces envíalo a la impresora directamente.
Si la respuesta es 'NO' entonces tendrás que decodificarlo para obtener el PDF y luego imprimirlo.
El que lo mantengas en memoria, o lo guardes en disco antes de enviarlo a la impresora, es algo que apenas afectará al tiempo, serán décimas de segundo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Leer imagen y convertir su contenido a base64 Ramsay Varios 16 18-05-2018 20:37:04
¿Cómo imprimir el contenido de un memo en una impresora de ticket? Master23 Impresión 2 20-03-2010 21:15:28
como imprimir el contenido del webBrowser Velia Varios 2 16-12-2005 14:28:56
Como imprimir el contenido de un TwwDBGrid Esti Impresión 1 31-10-2005 15:29:05
Como puedo imprimir un contenido CI>140 Impresión 2 05-10-2003 00:03:40


La franja horaria es GMT +2. Ahora son las 19:45:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi