windows - 默认打印机设置被忽略

标签 windows delphi printing spooler printer-properties

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

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

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

例如...无论控制面板中的设置如何,打印输出始终是彩色的并且每页一张纸:黑白/彩色、双面/非双面、每张多页/每张单页。

MS Word 和 Adob​​e 等其他应用程序遵循默认打印机设置。

我们使用的是 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;

最佳答案

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

XPS 代表 XML Paper Specification,它实际上是一种“电子纸”,屏幕上的文档和打印的方式完全符合作者的意图。任何曾经经历过共享计算机上的 Office 文档的页面布局如何由于不同的默认打印机而发生变化的人,都会感激不已。

编辑

测试

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

  • 使用 IE == 彩色输出。
  • 使用 XPS 查看器 EP == 彩色输出。

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

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

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

关于windows - 默认打印机设置被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10782586/

相关文章:

python - Pylint 在 Windows 上安装失败

windows - 我可以让这个脚本更快吗?

delphi - for all/for every 循环遍历 Delphi TCollection?

delphi - 数组按字母顺序排序?

c - 为什么我的窗口每次移动时都不会覆盖自己?

windows - 如何在多个文件上调用动词

windows - 安装 .net 2008 Windows 服务

windows - 如何在 win32 上调试文件系统 "access denied"错误?

windows - 如何从字体文件中获取字体名称?

css - 打印 Textarea 文本 - 全长(高度)?