Печать в порт принтера

Previous  Top  Next

    
 

 

{1.}

 

Code:

procedure TForm1.Button1Click(Sender: TObject);

var

port, prnfile: file;

buffer: array [1..128] of Char;

Read: Integer;

begin

// Specify a file to print

AssignFile(prnfile, 'filetoprint');

Reset(prnfile, 1);

// specify printer port

AssignFile(port, 'LPT1');

Rewrite(port, 1);

repeat

   BlockRead(prnfile, buffer, SizeOf(buffer), Read);

   BlockWrite(port, buffer, Read);

   // Application.ProcessMessages;

until EOF(prnfile) or (Read <> SizeOf(buffer));

CloseFile(prnfile);

CloseFile(port);

end;

©Drkb::03251

 

 

{2.}

Code:

{

Question:

How do I write a raw string of a data to the printer?

 

The following unit "PrtRaw.pas" demonstrates a 16/32 bit

raw printing unit for Delphi and Borland C Builder.

 

Following the unit, is an exmaple on using the

PrtRaw unit.

 

Notes:

 

1) You are responsible for embedding all necessary

control codes that the printer may require (including

form feed codes).

 

2) You must specify a valid printer and port name.

 

}

 

unit PrtRaw;

 

{Copyright (c) 1998 by Joe C. Hecht - All rights Reserved}

{joehecht@gte.net You may use and share this unit}

{providing my name and the copyright notice stays intact.}

 

interface

 

uses

WinTypes;

 

{$IFDEF WIN32}

type SpoolInt = DWORD;

{$ELSE}

type SpoolInt = integer;

{$ENDIF}

 

function StartRawPrintJob(PrinterName : pChar;

                         Port : pChar;

                         DocName : pChar) : THandle;

 

function StartRawPrintPage(hPrn : THandle) : integer;

 

function PrintRawData(hPrn : THandle;

                     Buffer : pointer;

                     NumBytes : SpoolInt) : integer;

 

function EndRawPrintPage(hPrn : THandle) : integer;

 

function EndRawPrintJob(hPrn : THandle) : integer;

 

 

implementation

uses

  WinProcs,

{$IFDEF WIN32}

WinSpool;

{$ELSE}

Print;

{$ENDIF}

 

 

function StartRawPrintJob(PrinterName : pChar;

                         Port : pChar;

                         DocName : pChar) : THandle;

{$IFDEF WIN32}

var

  hPrn : THandle;

  DocInfo1 : TDocInfo1;

{$ENDIF}

begin

{$IFDEF WIN32}

  if (OpenPrinter(PChar(PrinterName),

                  hPrn,

                  nil) = FALSE)  then

  begin

    Result := THandle(-1);

    Exit;

  end;

  DocInfo1.pDocName := DocName;

  DocInfo1.pOutputFile := Port;

  DocInfo1.pDataType := 'RAW';

  if (StartDocPrinter(hPrn,

                      1,

                      @DocInfo1) = 0) then

  begin

    Result := THandle(-1);

    Exit;

  end;

  Result := hPrn;

{$ELSE}

result := OpenJob(Port,

                   DocName,

                   0);

{$ENDIF}

end;

 

function StartRawPrintPage(hPrn : THandle) : integer;

begin

{$IFDEF WIN32}

  if (StartPagePrinter(hPrn) = FALSE) then

  begin

    Result := -1;

    Exit;

  end;

  result := 1;

{$ELSE}

result := StartSpoolPage(hPrn);

{$ENDIF}

end;

 

 

function PrintRawData(hPrn : THandle;

                     Buffer : pointer;

                     NumBytes : SpoolInt) : integer;

{$IFDEF WIN32}

var

BytesWritten : DWORD;

{$ENDIF}

begin

if (NumBytes = 0) then

begin

   Result := 1;

   Exit;

end;

{$IFDEF WIN32}

  if (WritePrinter(hPrn,

                   Buffer,

                   NumBytes,

                   BytesWritten) = FALSE) then

  begin

    Result := -1;

    Exit;

  end;

  if (NumBytes <> BytesWritten) then

  begin

    Result := -1;

    Exit;

  end;

  Result := 1;

{$ELSE}

result := WriteSpool(hPrn,

                      Buffer,

                      NumBytes);

{$ENDIF}

end;

 

 

function EndRawPrintPage(hPrn : THandle) : integer;

begin

{$IFDEF WIN32}

  if (EndPagePrinter(hPrn) = FALSE) then

  begin

    Result := -1;

    Exit;

  end;

  Result := 1;

{$ELSE}

result := EndSpoolPage(hPrn);

{$ENDIF}

end;

 

 

function EndRawPrintJob(hPrn : THandle) : integer;

begin

{$IFDEF WIN32}

  if (EndDocPrinter(hPrn) = FALSE) then

  begin

    Result := -1;

    Exit;

  end;

  if (ClosePrinter(hPrn) = FALSE) then

  begin

    Result := -1;

    Exit;

  end;

  Result := 1;

{$ELSE}

result := CloseJob(hPrn);

{$ENDIF}

end;

 

 

end.

 

 

// Example of use:

Code:

uses

PrtRaw;

 

 

procedure TForm1.Button1Click(Sender: TObject);

var

hPrn : THandle;

Data : array[0..31] of char;

begin

 

hPrn := StartRawPrintJob('Generic / Text Only',

                          'LPT1:',

                          'My Document');

if (integer(hPrn) < 0) then

begin

   ShowMessage('StartRawPrintJob Failed');

   Exit;

end;

 

if (StartRawPrintPage(hPrn) < 0) then

begin

   ShowMessage('StartRawPrintPage Failed');

   EndRawPrintJob(hPrn);

   Exit;

end;

 

Data[0] := 'P';

Data[1] := 'a';

Data[2] := 'g';

Data[3] := 'e';

Data[4] := #32;

Data[5] := '1';

Data[6] := #13;

Data[7] := #10;

 

if (PrintRawData(hPrn,

                  @data,

                  8) < 0) then

begin

   ShowMessage('PrintRawData Failed');

   EndRawPrintPage(hPrn);

   EndRawPrintJob(hPrn);

   Exit;

end;

 

if (EndRawPrintPage(hPrn) < 0) then

begin

   ShowMessage('EndRawPrintPage Failed');

   EndRawPrintJob(hPrn);

   Exit;

end;

 

if (StartRawPrintPage(hPrn) < 0) then

begin

   ShowMessage('StartRawPrintPage Failed');

   EndRawPrintJob(hPrn);

   Exit;

end;

Data[0] := 'P';

Data[1] := 'a';

Data[2] := 'g';

Data[3] := 'e';

Data[4] := #32;

Data[5] := '2';

Data[6] := #13;

Data[7] := #10;

 

if (PrintRawData(hPrn,

                  @data,

                  8) < 0) then

                  begin

   ShowMessage('PrintRawData Failed');

   EndRawPrintPage(hPrn);

   EndRawPrintJob(hPrn);

   Exit;

end;

 

if (EndRawPrintPage(hPrn) < 0) then

begin

   ShowMessage('EndRawPrintPage Failed');

   EndRawPrintJob(hPrn);

   Exit;

end;

 

if (EndRawPrintJob(hPrn) < 0) then

begin

   ShowMessage('EndRawPrintJob Failed');

   Exit;

end;

 

end;

 

end.

©Drkb::03252

 

 

Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php