Jump to content

Assista click.png tectoy.png

C6 chamada_c6.png botao.png

ACBrNFeDANFeESCPOS - Impressoras que não suporta QrCode - Usando bitmap


Recommended Posts

Olá,

Esta aparecendo direto algumas impressoras "baratas importadas" que não esta suportando a impressão do QrCode - muitas seguindo mudanças sugeridas aqui no forum funcionam mais outras apenas enviando a imagem do "qrcode", acabei fazendo um certo "xunxo" no ACBrNFeDANFeESCPOS, um meio de customizar já no componente a função patra transformar a url da nfce para bitmap e desta fazer a rasterização com base nos métodos aqui fornecido no forum.

Inclui estas propriedades

    property SuportaTagQRCode  : Boolean         read FSuportaTagQRCode  write FSuportaTagQRCode default True;
    property TamQRCodeBMP      : Integer         read FTamQRCodeBMP      write FTamQRCodeBMP default 300;

 

e alterando o método: 

function TACBrNFeDANFeESCPOS.GerarInformacoesQRCode(const DadosQRCode: String;
  Cancelamento: Boolean): String;

 

Função:

 

function TACBrNFeDANFeESCPOS.GerarInformacoesQRCode(const DadosQRCode: String;
  Cancelamento: Boolean): String;
var
  InfoQrCode: TStringList;
begin
  InfoQrCode := TStringList.Create;
  try
    if Cancelamento then
    begin
      InfoQrCode.Add('</fn></linha_simples>');
      InfoQrCode.Add('</ce>Consulta via leitor de QR Code');
    end;

    if FSuportaTagQRCode then
    begin
      InfoQrCode.Add( '<qrcode_tipo>'+IntToStr(FPosPrinter.ConfigQRCode.Tipo)+'</qrcode_tipo>'+
                      '<qrcode_error>'+IntToStr(FPosPrinter.ConfigQRCode.ErrorLevel)+'</qrcode_error>'+
                      '<qrcode_largura>'+IntToStr(FPosPrinter.ConfigQRCode.LarguraModulo)+'</qrcode_largura>'+
                      '<qrcode>'+DadosQRCode+'</qrcode>');
    end else
    begin
      var bmp : TBitmap := TBitmap.Create;
      PintarQRCode(DadosQRCode, bmp, qrAuto);
      var buffer: TBitmap;
      buffer := TBitmap.Create;
      try
        buffer.SetSize(TamQRCodeBMP, TamQRCodeBMP);
        buffer.Canvas.StretchDraw(Rect(0, 0, TamQRCodeBMP, TamQRCodeBMP), bmp);
        bmp.SetSize(TamQRCodeBMP, TamQRCodeBMP);
        bmp.Canvas.Draw(0, 0, buffer);
      finally
        buffer.Free;
      end;
      var SL : TStringList := TStringList.Create;
      var MS : TMemoryStream := TMemoryStream.Create;
      var AWidth, AHeight: Integer;
      var ARasterStr: AnsiString;

      try
        bmp.SaveToStream(MS);
        MS.Position := 0;
        BitmapToRasterStr(bmp, True, AWidth, AHeight, ARasterStr);
        RasterStrToBMPMono(ARasterStr, AWidth, True, MS);
        BMPMonoToRasterStr(MS, True, AWidth, AHeight, ARasterStr);
        RasterStrToAscII(ARasterStr, AWidth, False, SL);
        InfoQrCode.Add('<bmp>');
        InfoQrCode.AddStrings(SL);
        InfoQrCode.Add('</bmp>');
      finally
        MS.Free;
        SL.Free;
      end;
    end;

    if Cancelamento then
    begin
      InfoQrCode.Add(ACBrStr(TagLigaCondensado+'Protocolo de Autorização'));
      InfoQrCode.Add(TagLigaCondensado + Trim(FpNFe.procNFe.nProt) + ' ' +
         IfThen(FpNFe.procNFe.dhRecbto <> 0, DateTimeToStr(FpNFe.procNFe.dhRecbto),
                '') + '</fn>');
      InfoQrCode.Add('</linha_simples>');
    end;
  finally
    Result := InfoQrCode.Text;
    InfoQrCode.Free;
  end;

end;

 

Atendeu de momento meu problema, gostaria de melhorar isso, pois tbm teria de colocar lá na impressão da CF-e esta funcionalidade, deixar um código mais legal - padronizado, seria este o meio correto - tem tem algo mais pratico.

 

 

 

 

ACBrNFeDANFeESCPOS.pas

Link to comment
Share on other sites

22 horas atrás, Daniel Simoes disse:

Que bacana.. realmente é uma boa alternativa...

o comando de impressão de BMP, tem funcionado bem, nessa impressoras genéricas ?

- Testes:

RoHS PT-80A 80mm 

POS-58 Thermal Printer mais antiga

Bematech 2500TH (Esta com problema já firmware ou placa - horas funcionava ESC/POS horas não, a modo grafico ficava lento e cortava quando muitos itens - (apesar que bema demais funciona no ESC/POS certo)) - mudemos pra este modo - assim aguenta mais um tempo.

 

 

 

Link to comment
Share on other sites

  • 4 weeks later...
  • Administradores

Obrigado pela contribuição, em breve será validada para possível inclusão ao svn

TK-2452

Consultora SAC ACBr

Juliana Tamizou
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.