0

在过去的几天里,我一直被这件事难住了。我需要检测打印机是否支持双面打印。

我使用如下代码取得了部分成功:

NSPrinter * printer = [NSPrinter printerWithName:pname];

[printInfo setPrinter:printer];

PMPrintSettings settings = printInfo.PMPrintSettings;
PMDuplexMode pmDuplexMode = 0;
OSStatus status = PMGetDuplex(settings, &pmDuplexMode);
supportsDuplex = (status >= 0);

但这只有在我通过 NSPrintPanel 捕获完整的打印机配置时才有效。我需要一种方法来检测具有特定名称的打印机是否支持双面打印,而无需用户首先打开面板。我想为本地 Mac 上定义的任何打印机做。任何帮助表示赞赏!

4

1 回答 1

0

在您的代码片段中,我怀疑将肯定解释status为表示支持是否正确。通常,除零 ( ) 以外的任何值noErr都是某种故障。

如果您确信PMGetDuplex()当打印机不支持双面打印时会为打印设置对象返回错误,您可以尝试这种方法:使用创建会话PMCreateSession()PMPrinter使用PMPrinterCreateFromPrinterID()或通过搜索PMSessionCreatePrinterList()匹配任何条件的数组返回的数组您想要,使用 设置会话以使用该打印机PMSessionSetCurrentPMPrinter(),使用 创建打印设置对象PMCreatePrintSettings(),调用PMSessionDefaultPrintSettings()以从会话初始化打印设置,调用PMSessionValidatePrintSettings()只是为了良好的措施,然后调用PMGetDuplex()并检查返回值。

还可能值得尝试设置双工模式PMSetDuplex()并检查返回码,并可能调用PMSessionValidatePrintSettings()并检查它是否更改了该设置。

于 2013-02-17T01:53:35.687 回答