Ir para conteúdo
  • Cadastre-se

dev botao

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


  • Este tópico foi criado há 751 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 para o comentário
Compartilhar em outros sites

  • Fundadores

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

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

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

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

Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

  • 4 semanas depois ...
  • 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 para o comentário
Compartilhar em outros sites

  • Fundadores

Commiters... lembrando que as Units e Classes que injetam dependência Gráfica devem ser cercados da diretiva ($IFNDEF NOGUI}

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

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

Link para o comentário
Compartilhar em outros sites

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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.