数据是被发送到指定的打印机了,打印机任务列表中也列出了任务,大小等信息,但是页数为空值。也不进行打印停留在那里!!有过这方面开发经验的高手,希望指点弥精。分数不是问题,可以再补的。type
TDataBuf = array [0..DataLen - 1] of Char; { 数据包缓存 }var
Form1: TForm1;
DevMode: TDeviceModeA;
PrJob: dword;
lhPrinter: THandle;------------------------------------------------------
procedure TForm1.JLOpenPrinter;
var
lReturn: LongBool;
sPrtName: String;
pdi: PDocInfo1;
pd: TPrinterDefaults;
begin
sPrtName := ListBox1.Items[ListBox1.ItemIndex];
lReturn := OpenPrinter(PChar(sPrtName), lhPrinter, 0);
if not lReturn then begin
ShowMessage('The Printer Name you typed wasn''t recognized.');
Exit;
end; DevMode.dmCopies:=2;
DevMode.dmFields:=DM_COPIES;
pd.pDatatype:='RAW';
pd.pDevMode:=@DevMode;
pd.DesiredAccess:=PRINTER_ACCESS_USE;
if Win32Check(OpenPrinter(PChar(sPrtName),lhPrinter,0)) then begin
new(pdi);
with pdi^ do begin
pDocName:='test doc';
pOutputFile:=nil;
pDatatype:='RAW';
end;
PrJob:=StartDocPrinter(lhPrinter,1,pdi);
if PrJob=0 then Win32Check(false);
end;
end;function TForm1.JLWritePrinter(sFileName: String):String;
var
lReturn: LongBool;
iCount: Int64;
LastLen: Integer;
lpcWritten: Cardinal;
DBuf: TDataBuf;
FStream: TFileStream;
begin
FStream := TFileStream.Create(sFileName, fmOpenRead);
iCount := FStream.Size div DataLen;
LastLen := FStream.Size mod DataLen;
while (iCount > 0) do begin
FStream.ReadBuffer(DBuf, DataLen);
result := DBuf;
lReturn:=WritePrinter(lhPrinter, Addr(DBuf), Length(DBuf), pcWritten);
Dec(iCount);
end;
if LastLen > 0 then begin
FStream.ReadBuffer(DBuf, LastLen);
lReturn:=WritePrinter(lhPrinter, Addr(DBuf), Length(DBuf),lpcWritten);
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
JLOpenPrinter();
if OpenDialog1.Execute then
JLWritePrinter(OpenDialog1.filename);
end;
TDataBuf = array [0..DataLen - 1] of Char; { 数据包缓存 }var
Form1: TForm1;
DevMode: TDeviceModeA;
PrJob: dword;
lhPrinter: THandle;------------------------------------------------------
procedure TForm1.JLOpenPrinter;
var
lReturn: LongBool;
sPrtName: String;
pdi: PDocInfo1;
pd: TPrinterDefaults;
begin
sPrtName := ListBox1.Items[ListBox1.ItemIndex];
lReturn := OpenPrinter(PChar(sPrtName), lhPrinter, 0);
if not lReturn then begin
ShowMessage('The Printer Name you typed wasn''t recognized.');
Exit;
end; DevMode.dmCopies:=2;
DevMode.dmFields:=DM_COPIES;
pd.pDatatype:='RAW';
pd.pDevMode:=@DevMode;
pd.DesiredAccess:=PRINTER_ACCESS_USE;
if Win32Check(OpenPrinter(PChar(sPrtName),lhPrinter,0)) then begin
new(pdi);
with pdi^ do begin
pDocName:='test doc';
pOutputFile:=nil;
pDatatype:='RAW';
end;
PrJob:=StartDocPrinter(lhPrinter,1,pdi);
if PrJob=0 then Win32Check(false);
end;
end;function TForm1.JLWritePrinter(sFileName: String):String;
var
lReturn: LongBool;
iCount: Int64;
LastLen: Integer;
lpcWritten: Cardinal;
DBuf: TDataBuf;
FStream: TFileStream;
begin
FStream := TFileStream.Create(sFileName, fmOpenRead);
iCount := FStream.Size div DataLen;
LastLen := FStream.Size mod DataLen;
while (iCount > 0) do begin
FStream.ReadBuffer(DBuf, DataLen);
result := DBuf;
lReturn:=WritePrinter(lhPrinter, Addr(DBuf), Length(DBuf), pcWritten);
Dec(iCount);
end;
if LastLen > 0 then begin
FStream.ReadBuffer(DBuf, LastLen);
lReturn:=WritePrinter(lhPrinter, Addr(DBuf), Length(DBuf),lpcWritten);
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
JLOpenPrinter();
if OpenDialog1.Execute then
JLWritePrinter(OpenDialog1.filename);
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货