Jump to content

dev botao

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


  • Este tópico foi criado há 969 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

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

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

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

  • Este tópico foi criado há 969 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

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.

The popup will be closed in 10 seconds...