默认打印机设置被忽略

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

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

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

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

其他应用程序,如MS Word和Adobe尊重默认的打印机设置。

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

这个testing代码是独立的,所以你可以粘贴它来testing它…

使用以下命令填充打印机名称的combobox:

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; 

Solutions Collecting From Web of "默认打印机设置被忽略"

就像我知道你不能改变一个.xps文件的外观。

XPS代表XML Paper Specification,它实际上是一个“电子纸”,屏幕上和印刷品上的文档与作者的意图完全一致 。 任何有经验的人都知道,由于不同的默认打印机,共享计算机上的Office文档的页面布局已经发生了变化。

编辑

测试

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

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

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

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

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