Ir para conteúdo
  • Cadastre-se

dev botao

ACBrPosPrinter ImprimirImagemStream Delphi 10.3 FMX


Ver Solução Respondido por Daniel Simoes,
  • Este tópico foi criado há 1589 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Abri o exemplo do ACBrPosPrinter no Delphi 10.3 Firemonkey, preciso imprimir um TBitmap e vi que tinha no próprio exemplo o código que preciso.

Minha frustração foi que o próprio demo está dando erro de "Imagem não é BMP Monocromática".

Lembrando que a imagem carregada no demo é o logo do "acebrmono.bmp".

Se imprimir o arquivo vai de boa, o problema é via stream.

  • 2 semanas depois ...
Postado

Bom dia,

Estou na fase final de uma alteração no ACBrPosPrinter sobre isto.

Estou conseguindo inclusive imprimir QRCode como BMP, útil para impressoras que não conseguem imprimir o QRCode pelo método normal ESC/Pos.

Esta alteração já consegue imprimir o QRCode normalmente. Entretanto, não estou conseguindo alinhá-lo horizontalmente, ou seja, se quiser alinha no Centro ou à Direita. Estou conseguindo só imprimir à esquerda. O QRCode está totalmente funcional.

Se alguém quiser me ajudar nesta etapa, ou seja, alinhamento de um Stream de BMP na impressora.

Estou usando uma impressora padrão P 58.

Caso consiga evoluir, posto o novo ACBrPosPrinter aqui....e se o pessoal o ACBr quiser utilizá-lo para colocar no Trunk, fiquem a vontade.

 

Nelson Santos

 

nelconsult 3d.png

Desenvolvedor e Consultor

[email protected]

 

Postado
Em 06/06/2020 at 08:47, Nelson Santos disse:

Bom dia,

Estou na fase final de uma alteração no ACBrPosPrinter sobre isto.

Estou conseguindo inclusive imprimir QRCode como BMP, útil para impressoras que não conseguem imprimir o QRCode pelo método normal ESC/Pos.

Esta alteração já consegue imprimir o QRCode normalmente. Entretanto, não estou conseguindo alinhá-lo horizontalmente, ou seja, se quiser alinha no Centro ou à Direita. Estou conseguindo só imprimir à esquerda. O QRCode está totalmente funcional.

Se alguém quiser me ajudar nesta etapa, ou seja, alinhamento de um Stream de BMP na impressora.

Estou usando uma impressora padrão P 58.

Caso consiga evoluir, posto o novo ACBrPosPrinter aqui....e se o pessoal o ACBr quiser utilizá-lo para colocar no Trunk, fiquem a vontade.

 

Nelson Santos

 

Olá Nelson, você tratou a imagem ou adaptou o método que verfíca se a imagem é monocromática ?
Qual a solução para não cair na excessão "Imagem não é BMP Monocromática" ?

Postado

@Daniel Simoes obrigado pela dica.

Mas a impressora que estou usando não funciona com os comandos de alinhamento para BMP, somente Txt.

Entretanto, já consegui fazer funcionar a impressão do QRCode como BMP.

 

Tive que fazer alguns ajustes, criando propriedades extras no ACBsPosPrinter.

No ACBrNFeDANFeESCPOS, algumas alterações foram feitas em algumas funções.

Estou anexando os arquivos já alterados aqui...

As alterações foram testadas no Delphi 2010 e Delphi 10.3 Rio:

ACBsPosPrinter , dentro da classe ConfigQRCode foram criadas as propriedades :

    QRCodeComoBMP - Boolean, define se é para gerar o QRCode como bitmap = True

    QRCodeBMPWidth QRCodeBMPHeight - Integer, Tamanho do QRCode BMP, sempre em multiplos de 8, valor padrão 192 x 192 pixels (25 mm)

   QRCodeBMPCenter - Boolean, define se centraliza horizontalmente = True.

Obs.: Para impressoras Pos-58, definir a propriedade ColunasFonteNormal em 32.

Anexei também o arquivo ACBrEscPos58.pas, pois estou tentando descobrir os comandos ESC/Pos para estes tipos de impressoras.

 

 

 

ACBrNFeDANFeESCPOS.pas ACBrPosPrinter.pas ACBrEscPos58.pas

nelconsult 3d.png

Desenvolvedor e Consultor

[email protected]

 

Postado (editado)
16 minutos atrás, Nelson Santos disse:

@dantemartins não precisei alterar o ACBrimagem.pas para isto.

Pra mim aqui, mesmo usando a imagem acbrmono.bmp que vem no demo dá a mensagem de que não é um bmp monocrmatico e não manda a impressão.

Gostaria de imprimir uma imagem que está em um componente FMX.Graphics.TImage na propriedade Bitmap (TBitmap), com fundo branco e texto preto.

Editado por dantemartins
Postado

@Daniel Simoes boa tarde,

Conforme o @dantemartins mencionou neste tópico, no ACBRImagem.ps tem uma função isBMP que testa se o stream é de um Bitmap e se o mesmo é monocromático.

Com um projeto VCL, funciona tudo bem.

Entretanto, com um projeto FMX esta função não tem efeito. Pelo menos foi o que detectei.

Em FMX gráfico contido no TBitmap na verdade é um PNG, pois as imagens em FMX são tratadas como 32 bits.

Se você usar a função Draw ou Pixel para pintar o Bitmap, como é feito pela função PintarQRCode (arquivo ACBrDFeReport;.pas) e depois verificar o stream, vai verificar que trata-se de um PNG....não possue o header de um BMP. Assim, o teste da função isBMP é sempre falso qundo compilado em FMX.

o que vc me sugere sobre isto.

O que estou fazendo é criar um bitmap do QRCode igual é feito pela função PintarQRCode e converter em Raster string.

 

 

 

nelconsult 3d.png

Desenvolvedor e Consultor

[email protected]

 

  • 1 mês depois ...
  • Fundadores
Postado

@Nelson Santos.. isso parece ser uma limitação da FMX.. onde isso não foi implementado... (Criar uma TBitMap com um PixelFormat diferente de 32 bits)

Veja esse link: https://stackoverflow.com/questions/46179542/how-to-create-fmx-graphics-tbitmap-with-specific-pixel-format

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.

  • Fundadores
  • Solution
Postado

@Nelson Santos... apliquei uma baita duma "gabiarra", que converte a Imagem em ASCII Art, e com isso, o ACBrPosPrinter consegue imprimir a imagem no modo Raster...

Atualize os fontes, e veja o método: TFrPosPrinterTeste.bImprimirImagemClick

  • Curtir 1
  • Obrigado 2
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.

  • Este tópico foi criado há 1589 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.