Skip to content

Instantly share code, notes, and snippets.

@cesarjr
Created December 16, 2012 21:58
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save cesarjr/4313561 to your computer and use it in GitHub Desktop.
Save cesarjr/4313561 to your computer and use it in GitHub Desktop.
Impressão direta em Delphi utilizando o Gerenciador de Impressões do Windows sem passar pelo driver do fabricante.
uses
WinSpool;
procedure TFrmMain.btnImprimir(Sender: TObject);
var
Handle: THandle;
CaracteresImpressos: DWORD;
Documento: TDocInfo1;
TextoAnsiString : AnsiString;
TextoUnicode: string;
begin
if not OpenPrinter(PChar('Epson LX-300'), Handle, nil) then
begin
ShowMessage('Impressora não encontrada');
Exit;
end;
Documento.pDocName := PChar('Minha impressão');
Documento.pOutputFile := nil;
Documento.pDataType := 'RAW';
//Inicia um novo documento no Spool do Windows
StartDocPrinter(Handle, 1, @Documento);
//Apenas notifica o Windows que uma nova página começará.
//Nenhum controle é aplicado a impressora.
StartPagePrinter(Handle);
TextoUnicode := #15'Esta linha será impressa em condensado'#18#13#10;
TextoAnsiString := AnsiString(TextoUnicode);
WritePrinter(Handle, PAnsiChar(TextoAnsiString), Length(TextoAnsiString), CaracteresImpressos);
TextoUnicode := #27#69'Esta linha será impressa em negrito'#27#70#27#53#13#10;
TextoAnsiString := AnsiString(TextoUnicode);
WritePrinter(Handle, PAnsiChar(TextoAnsiString), Length(TextoAnsiString), CaracteresImpressos);
//Manda um Form Feed para LX-300 quebrar a página
TextoUnicode := #12;
TextoAnsiString := AnsiString(TextoUnicode);
WritePrinter(Handle, PAnsiChar(TextoAnsiString), Length(TextoAnsiString), CaracteresImpressos);
//Apenas notifica o Windows que a página finalizou.
//Nenhum controle é aplicado a impressora.
EndPagePrinter(Handle);
StartPagePrinter(Handle);
TextoUnicode := #27#45#49'Esta linha será impressa em sublinhado'#27#45#48#13#10;
TextoAnsiString := AnsiString(TextoUnicode);
WritePrinter(Handle, PAnsiChar(TextoAnsiString), Length(TextoAnsiString), CaracteresImpressos);
TextoUnicode := 'Esta é uma linha normal'#13#10;
TextoAnsiString := AnsiString(TextoUnicode);
WritePrinter(Handle, PAnsiChar(TextoAnsiString), Length(TextoAnsiString), CaracteresImpressos);
EndPagePrinter(Handle);
//Finaliza o documento no Spool
EndDocPrinter(Handle);
//Fecha a impressora
ClosePrinter(Handle);
end;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment