Ir para conteúdo
  • Cadastre-se

dev botao

ACBRPOSPrinter em rede


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

Recommended Posts

olá amigos , estou criando a parte de impressão de recibos em uns do meus sistemas e resolvo utilizar o  ACBRPOSPrinter que é um exelente componente , em impressão local funciona 100% mas como meu cliente tem alguns terminais para impressão de recibos tenho que utilizar a MP4200TH na rede só que no windows na paxina de teste ele imprime perfeito só no sistema não estou conseguindo imprimir , ja testei varios metodos das portas mas nada , antigamente utilizava \\micro01\mp como porta de impressão , mas neste tipo de componente ja vi que ele nao esta aceitando ou pode ser do windows 7 tb , algum saberia me explicar como imprimir via rede com este componente

 

grato

 

http://www.rdwtecnologia.com.br/

Rodnei Hernandes Lino

Um pouco ce conhecimento é uma coisa perigosa.

Então é muito. (-Albert Einstein)

Guaíra-SP

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Sim, ele aceita a sintaxe de porta como \\ip_nome_maquina\nome_Impressora

Verifique as permissões do Windows ou da pasta Spool

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

gozado , aki esta normal , foi so passar pro win7 q começo esses erros , tenho q seixar a pasta winspool leitura e gravaçao pra todos os usuarios/convidados ?

 

estava pensando já q no windows funciona grava ele em arquivos e depois abrir em um TstringList

e mandar direto pra impressora padrao

  Printer.BeginDoc;
    Printer.Canvas.TextOut(0, 0,StringList[f]);
  Printer.EndDoc;

será que ele vai mandar os comando ESC junto ?


 

http://www.rdwtecnologia.com.br/

Rodnei Hernandes Lino

Um pouco ce conhecimento é uma coisa perigosa.

Então é muito. (-Albert Einstein)

Guaíra-SP

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Não funciona... pois nesse caso você estará enviando uma imagem  ( Canvas ) e não comandos de impressão em EscPos 

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

sim era só um exemplo da classe tprinter da borland , na verdade tem como manda em raw mod

Printer.GetPrinter(aDevice, aDriver, aPort, aMode); 
OpenPrinter(aDevice, HPrinter, nil); 
Doc.pDocName := 'Teste'; 
Doc.pOutputFile := ''; 
Doc.pDatatype := 'RAW'; 
StartDocPrinter(HPrinter, 1, @Doc); 
s := String('teste') + #10; 
iSize := Strlen(PChar(s)); 
WritePrinter(HPrinter, @s[1], iSize , iRet); 
EndDocPrinter(HPrinter); 
ClosePrinter(HPrinter); 
 

 

http://www.rdwtecnologia.com.br/

Rodnei Hernandes Lino

Um pouco ce conhecimento é uma coisa perigosa.

Então é muito. (-Albert Einstein)

Guaíra-SP

Link para o comentário
Compartilhar em outros sites

bom os resultados foi exelente , imprimiu perfeito vo posta a unit que fiz para testes para analizarem e tb para possivel implementação no componente

Unit UPrinterFunc;

Interface
Uses Messages, SysUtils, Variants, types, Classes, Printers, WinSpool, Dialogs, Controls;
Const
  BufSize = 16384;

Procedure ImprimeTextFile(Filename: String; DocName: String = 'Imprimindo ..');
Implementation
//------------------------------------------------------------------------------
Procedure ImprimeTextFile(Filename: String; DocName: String = 'Imprimindo ..');
Var
  Handle: THandle;
  Documento: TDocInfo1;
  NamePrinter: String;
  Arquivo: File;
  Buffer: Pointer;
  Count, BytesWritten: Cardinal;
Begin
  If (Printer.PrinterIndex > 0) Then
    NamePrinter := Printer.Printers[Printer.PrinterIndex]
  Else
    NamePrinter := 'Erro Nenhuma impressora Padrão foi detectada';
  If Not WinSpool.OpenPrinter(Pchar(NamePrinter), Handle, Nil) Then
    Begin
      ShowMessage('Impressora não encontrada');
      Exit;
    End;
  Documento.pDocName := PChar(DocName);
  Documento.pOutputFile := Nil;
  Documento.pDataType := 'RAW';
  StartDocPrinter(Handle, 1, @Documento);
  StartPagePrinter(Handle);
  If Not fileexists(Filename) Then
    Raise Exception.CreateFmt('Arquivo não encontrado %s  ', [Filename]);
  AssignFile(Arquivo, Filename);
  reset(Arquivo, 1);
  GetMem(Buffer, BufSize);
  While Not eof(Arquivo) Do
    Begin
      Blockread(Arquivo, Buffer^, BufSize, Count);
      If Count > 0 Then
        If Not WritePrinter(Handle, Buffer, Count, BytesWritten) Then
          Begin
            EndPagePrinter(Handle);
            EndDocPrinter(Handle);
            FreeMem(Buffer, BufSize);
            WinSpool.ClosePrinter(Handle);
            CloseFile(Arquivo);
            exit;
          End;
    End;
  EndPagePrinter(Handle);
  EndDocPrinter(Handle);
  FreeMem(Buffer, BufSize);
  WinSpool.ClosePrinter(Handle);
  CloseFile(Arquivo);
End;

End.

 

http://www.rdwtecnologia.com.br/

Rodnei Hernandes Lino

Um pouco ce conhecimento é uma coisa perigosa.

Então é muito. (-Albert Einstein)

Guaíra-SP

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Notei muito uso de API do Windows... (não seria compatível com Linux)

Não seria possível usar a Classe "TPrinter" ?

Em Lazarus seria possível... poderia por favor verificar em Delphi ?

Veja o exemplo do Lazarus em:

http://wiki.freepascal.org/Using_the_printer

unit unitmain;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,
  Buttons, Printers;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    ListBox1: TListBox;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
    procedure PrintString(S:String);
    procedure PrintStream(St:TStream);
    procedure PrintSample;
  public
    { public declarations }
  end; 

var
  Form1: TForm1; 

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  // fill in the printer list
  Listbox1.Items.Assign(Printer.Printers);
end;

procedure TForm1.PrintString(S: String);
var
  Written: Integer;
begin
  Printer.Write(S[1], Length(S), Written);
end;

const
  MaxBufSize = 256;

procedure TForm1.PrintStream(St: TStream);
var
  Written: Integer;
  Buffer: array[0..MaxBufSize-1] of byte;
begin
  while St.Position<St.Size do begin
    Written := St.Read(Buffer, MaxBufSize);
    Printer.Write(Buffer, Written, Written);
  end;
end;

procedure TForm1.PrintSample;
var
  S: TStringStream;
begin
  // print a plain string
  PrintString('===   FIRST A STRING   ==='+LineEnding);
  PrintString(Memo1.Text);
  PrintString('=== NOW USING A STREAM ==='+LineEnding);
  // print using a stream
  S := TStringStream.Create(Memo1.Text);
  PrintStream(S);
  S.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Listbox1.ItemIndex<0 then begin
    ShowMessage('Select a printer from the list');
    exit;
  end;

  // on a freshly retrieved printer list, either method could
  // be used to select a printer: SetPrinter or PrinterIndex
  //Printer.PrinterIndex := Listbox1.ItemIndex;
  Printer.SetPrinter(ListBox1.Items[Listbox1.ItemIndex]);
  Printer.Title := Caption;
  Printer.RawMode := True;
  Printer.BeginDoc;
  PrintSample;
  Printer.EndDoc;

end;
end.

 

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

  • 2 meses depois ...
  • Este tópico foi criado há 2768 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.