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