Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Customer submitted FAQ - How to print raw data!!!

2,233 views
Skip to first unread message

Joe C. Hecht

unread,
Dec 14, 1998, 3:00:00 AM12/14/98
to
Customer submitted FAQ - How to print raw data!!!
[by Joe C. Hecht]

Writting raw data to the printer.
Category :Windows API
Platform :All
Product :All 16/32 bit

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;

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:

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.

--
Joe C. Hecht
joeh...@gte.net
(850) 689-0877 121 Louise Dr. Crestview, FL 32536
http://home1.gte.net/joehecht/index.htm

0 new messages