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.