viverosjosem
12-02-2021, 20:53:00
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.
...
...
...
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:
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.
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.
...
...
...
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:
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.