默认的打印机设置被忽略(Default printer settings are ignored)

2019-09-17 14:13发布

使用Windows打印后台处理程序的API,我们可以打印出XPS文件。

问题是,打印后台处理程序忽略 默认打印机设置

(我们已经放弃了尝试应用打印机设置 。默认打印机设置将不得不就够了。)

例如...打印输出总是出来的颜色和每一个页纸张,无论什么设置在控制面板设置为:黑白/彩色,双面打印/双面不是每纸上打印多页/单页每片。

如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;

Answer 1:

虽然我知道你不能改变一个.XPS文件的外观。

XPS代表XML纸张规范,这几乎是一个“电子纸”,屏幕上的文件和打印正是它的目的是由作者的方式 。 谁曾经经历过,如何在共享计算机上,因为不同的默认打印机的Office文档的页面布局发生了转变,欣赏它。

编辑

测试

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

  • 随着IE ==彩色输出。
  • 随着XPS查看器EP ==彩色输出。

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

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

  • IE ==黑白输出。
  • XPS查看器EP ==黑白输出。


文章来源: Default printer settings are ignored