Ir para conteúdo
  • Cadastre-se

dev botao

Imprimir em impressora o Texto escrito em Timage


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

Recommended Posts

Boa noite pessoal

Com o uso do acbrPosPrinter, pensei seriamente em matar o uso do RDPrint, pois o RDPrint 4 não consegue utilizar os recursos dessas impressoras térmicas.

A única dificuldade foi a falta do preview no acbrPosprinter e não imprimir em impressora matricial, além de que quando uso a função ImprimeLinha ele só funciona com o modelo Epson tanto para Bematech, Daruma ou a propria epson Termica, mas, brincando de programar, acabei criando um preview próprio, pelo menos pra resolver a questão de visualizar a impressão exceto a impressão do CF-e, pois, meus clientes usam muito essas termicas devido ao baixo custo de manutenção.

Estava eu brincando com um Timage e fiz uso de image.canvas.textout, textwidth, TextHeight e praticamente quase gerado um gerador de relatório semelhante ao Rave, QR Forts etc.

Minha única dificuldade está sendo em imprimir o que escrevi usando TextOut para uma impressora qualquer, jato, laser, etc

já tentei pelo Printer.Canvas.Draw(..... ele até imprime mas o tamanho fica miudinho

Como fiz:

Criei um Form com ScrollBox e 1 Timage

Depois fiz um unit com a função Imprime e nela coloquei todos os atributos do texto tais como, cor, tamanho,fonte, stilo, etc;

**************************************************

procedure TF_PreviewNarezzi.Imprima(aLinha,aColuna,aSize:Integer;aStyle:TFontStyles;aTexto:string;aFonte:String='Courier New';aCor:TColor=clBlack);
Var
  TamanhoCaracter,iCol:Integer;
begin
  With Image do begin
    Canvas.Font.Name  :=aFonte;
    Canvas.Font.Size  :=aSize;
    Canvas.Font.Color :=aCor;
    Canvas.Font.Style :=aStyle;
    if aColuna<0 then begin
      iCol:=Round((Width-Canvas.TextWidth(aTexto))/2);
      Canvas.TextOut(iCol,aLinha,aTexto);
    end else begin
      Canvas.TextOut(aColuna,aLinha,aTexto);
    end;
  end;
end;
*********************************************

procedure TF_P.Button1Click(Sender: TObject);
Var
  L,C:Integer;
  marD,marE:integer;
  Rect: TRect;
Begin
  if F_PreviewNarezzi=Nil then F_PreviewNarezzi:=TF_PreviewNarezzi.Create(Nil);
  With F_PreviewNarezzi do Begin
    With Image do begin
      Height:=1122;
      Width :=793;
      MarginE:=20;
      MarginD:=Width-20;
      Canvas.Font.Name:='Courier New';
      Canvas.Font.Size:=6;
      Canvas.Font.Style:=[];
      Canvas.Font.Color:=clBlack;
      L:=1*Canvas.TextHeight('A');
      C:=marginE;
      Imprima(L,-1,24,[fsBold,fsItalic],'Narezzi Consultoria','Courier New',clGreen);
      L:=(1*Canvas.TextHeight('A'));
      Linha(L,C,L,marD,1,psDash,clGreen);
      L:=Round(1.1*Canvas.TextHeight('A'));
      Imprima(L,C,10,[],'Relatório de Vendas');
      Imprima(L,marginD-56,10,[],'Período');
      L:=L+16;
      Linha(L,C,L,marginD,1,psSolid,clRed);
      L:=L+3;
      Imprima(L,marginD-78,10,[],FormatDateTime('dd/mm/yyyy',Date));

      L:=L+(3*16);
      Imprima(L,-1,36,[fsBold,fsItalic,fsUnderline],'Caio Narezzi','Times New Roman',clBlue);

      Printer.BeginDoc;
      Printer.Canvas.Draw(0,0,image.Picture.Graphic);
      Printer.EndDoc;

    end;
  end;
  F_PreviewNarezzi.ShowModal;
end;
********************************

Não consigo imprimir esse conteudo em qualquer impressora de forma que saia nas mesmas dimensoes do A4 cujo foi criado Timage.

Se alguem puder dar alguma dica, ficarei feliz, pois é mais um conhecimento que me agrega.

Obrigado

 

 

Link para o comentário
Compartilhar em outros sites

Bom dia Tiago Ravache

Obrigado por responder

Ontem, madrugada afora, eu achei uma função que imprimi o Timage, mas fiquei um pouco decepcionado;

Hoje, testei as funçoes que voce me indicou nos links e ficou bem mais controlável (muito boa)

procedure DrawImage(Canvas: TCanvas; DestRect: TRect; ABitmap: TBitmap); 

procedure PrintImage(Image: TImage; ZoomPercent: Integer); 

Mas a minha decepção continua, pois como estou escrevendo no Timage, não encontrei nenhuma possibilidade que permita quebrar a página ou indicar ao Timage.Heigth que atingiu um certo tamanho, além do que, eu preciso saber qual o tamanho do Heigth antes de começar a escrever no Timage, de outra forma ele não se altera.

Também já pensei em deixar essa questão de lado e partir pro repaginamento apenas no momento da impressão. Mas como sou brasileiro, e se tem geradores de relatório que permitem controlar o paginamento na tela, então nós somos capazes, talvez adiar, mas desistir nunca.

Estive pensando também que uma boa saída talvez para impressão, seria a impressão pixel a pixel, infelizmente eu tentei criar essa possibilidade mas meus poucos conhecimento de programação mais avançada não me permitiram criá-lo.

Antes de mais nada, vamos deixar claro, qual é a minha necessidade.

a) Criar uma forma de imprimir para impressoras Térmicas utilizando os recursos das mesmas, evitando a generic Text (Resolvido - AcbrPosPrinter);
b) Criar um visualizador daquilo que seria impresso através do PosPrinter (Resolvido - Usando Form+TImage com impressão canvas lendo StringList);
c) Já saudável os fatos acima, me ocorreu a possibilidade de ter um Gerador de Relatório baseado nos fatos acima, onde até já criei funções que permitem facilitar "o escrever o relatório usando canvas";
d) Diante dessas circunstâncias é que me pego na luta em entender como funciona um gerador de relatório;

Os amigos vão ler essa mensagem e dizer "O Marcelo burro, está querendo reinventar a roda", digo sim, e por que não. Afinal, os concorrentes de Gerador de Relatório estão ai a todo vapor, se ninguem tentasse reinventar a roda, não teríamos concorrentes.

Detalhes que faltam

a) Saber se o Timage seria o componente ideal ou se tem algum outro que permita a quebra de pagina;
B) Qual a possibilidade de escrever a impressão usando TPrinter.Canvas e ao invés de enviar para impressora, poder salvar como arquivo, para que possa talvez ser carregado no visualizador no momento da escolha do usuário (Imprimir ou Visualizar);
c) Como imprimir o Timage de forma que o mesmo quebre páginas conforme o tamanho e formato A4 por exemplo.

Desculpe me estender

Se alguem tiver o prazer de compartilhar seus conhecimentos nós ficamos lisonjeados

Muito obrigado

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

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