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á 1345 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

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.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...

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]

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Basta enviar o comando de Alinhamento antes de enviar a impressão do BMP...

No Demo do ACBrPosPrinter isso é demonstrado 

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

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" ?

Link para o comentário
Compartilhar em outros sites

@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]

 

Link para o comentário
Compartilhar em outros sites

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

@dantemartins

Veja se usando o método que utilizei no arquivo ACBRPosPrinter.pas que enviei funciona.

Está nas linhas 1183 até  1999.

O que fiz foi "redesenhar" o BMP em outro Bitmap, mas reconfigurei p mesmo antes de usar o Draw.

Nelson Santos

 

Editado por Nelson Santos

nelconsult 3d.png

Desenvolvedor e Consultor

[email protected]

 

Link para o comentário
Compartilhar em outros sites

@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]

 

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...
  • Fundadores

@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.

Link para o comentário
Compartilhar em outros sites

  • Fundadores
  • Solution

@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 1
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á 1345 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.