数据是被发送到指定的打印机了,打印机任务列表中也列出了任务,大小等信息,但是页数为空值。也不进行打印停留在那里!!有过这方面开发经验的高手,希望指点弥精。分数不是问题,可以再补的。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;