使用obj-c检测打印机是否支持以编程方式进行双工

时间:2013-02-17 00:36:32

标签: objective-c printing duplex

过去几天我一直对此感到难过。我需要检测打印机是否支持双面打印。

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

NSPrinter * printer = [NSPrinter printerWithName:pname];

[printInfo setPrinter:printer];

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

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

1 个答案:

答案 0 :(得分:0)

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

如果您确信当打印机不支持双面打印时PMGetDuplex()为打印设置对象返回错误,您可以尝试以下方法:使用PMCreateSession()创建会话,获取{ {1}}使用PMPrinter或搜索从PMPrinterCreateFromPrinterID()返回的数组符合您所需的任何条件,将会话设置为使用PMSessionCreatePrinterList()使用该打印机,创建打印设置对象使用PMSessionSetCurrentPMPrinter(),调用PMCreatePrintSettings()初始化会话中的打印设置,只需调用PMSessionDefaultPrintSettings(),然后调用PMSessionValidatePrintSettings()并检查返回值。

尝试使用PMGetDuplex()设置双工模式并检查返回代码并可能调用PMSetDuplex()并检查是否更改了该设置也是值得的。