默认打印机设置被忽略

时间:2012-05-28 09:49:42

标签: windows delphi printing spooler printer-properties

使用Windows Print Spooler API,我们可以打印出XPS文件。

问题是打印假脱机程序忽略 默认打印机设置

(我们已经放弃尝试apply printer settings。默认打印机设置就足够了。)

例如......无论控制面板中的设置是什么,打印输出总是以彩色和每页一张纸出现:黑色&白色/彩色,双面/非双面打印,每张纸多页/每张单页。

其他应用程序(如MS Word和Adobe)遵循默认的打印机设置。

我们正在使用Delphi XE2和Windows 7 64位。

此测试代码是自包含的,因此您只需将其粘贴以进行测试即可...

使用以下命令填充带有打印机名称的组合框:

uses
  Printers

ComboBox1.Items.Assign(Printer.Printers);

印刷程序:

uses
  Winapi.WinSpool

procedure PrintXPS(PrinterName, FileNameXPS: string; ParentFormHandle: THandle = 0);

  //  Printer handle

  procedure Printer_Open(out Printer: THandle; Defaults: PPrinterDefaultsW = nil);
  begin
    if  not OpenPrinterW(PWideChar(PrinterName), Printer, Defaults) then
      RaiseLastOSError;
  end;

  procedure Printer_Close(Printer: THandle);
  begin
    if  not ClosePrinter(Printer) then
      RaiseLastOSError;
  end;

  //  Print jobs

  function  JobCreate(Printer: THandle; FileName: string): Cardinal;
  var
    lBufferSize: Cardinal;
    lAddJobInfo: PAddJobInfo1W;
  begin
    //  Create job
    AddJobW(Printer, 1, nil, 0, lBufferSize);
    GetMem(lAddJobInfo, lBufferSize);
    try
      if  not AddJobW(Printer, 1, lAddJobInfo, lBufferSize, lBufferSize)  then
        RaiseLastOSError;
      Result  := lAddJobInfo.JobId;
      //  Copy the file into place
      CopyFile(PWideChar(FileName), lAddJobInfo.Path, True);
    finally
      FreeMem(lAddJobInfo, lBufferSize);
    end;
  end;

  procedure JobStart(Printer: THandle; JobID: Cardinal);
  begin
    if  not ScheduleJob(Printer, JobID) then
      RaiseLastOSError;
  end;

var
  PrinterA: THandle;
  JobID: Cardinal;
begin
  if  not FileExists(FileNameXPS)  then
    raise Exception.Create('File not found: ' + FileNameXPS);

  Printer_Open(PrinterA, nil);
  try
    JobID := JobCreate(PrinterA, FileNameXPS);
    JobStart(PrinterA, JobID);
  finally
    Printer_Close(PrinterA);
  end;

end;

1 个答案:

答案 0 :(得分:0)

据我所知,你无法改变.xps文件的外观。

XPS代表XML Paper Specification,它实际上是一种“电子纸”,屏幕上的文件和印刷版正是作者的意图。任何曾经历过的人,如果由于不同的默认打印机而导致共享计算机上的Office文档的页面布局发生了变化,请欣赏它。

修改

测试

1。)默认的黑白打印机设置。打开。 xps文件打印。

  • 使用IE ==彩色输出。
  • 使用XPS Viewer EP ==彩色输出。

默认打印机设置==忽略。

2。)对话框:手动打印机设置以打印黑白设置。

  • IE ==黑白输出。
  • XPS Viewer EP ==黑白输出。