Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 在无面板的NSPrint操作上设置打印机特定选项_Cocoa_Printing_Nsprintoperation - Fatal编程技术网

Cocoa 在无面板的NSPrint操作上设置打印机特定选项

Cocoa 在无面板的NSPrint操作上设置打印机特定选项,cocoa,printing,nsprintoperation,Cocoa,Printing,Nsprintoperation,这个问题断断续续地困扰了我大约一年,我想也许其他人也会遇到类似的情况 目标:在Mac OS X 10.6-7上,使用定义的分辨率和“高速”设置,在不显示打印面板的情况下,将多个NSView打印到EPSON Stylus Pro 4880打印机 当前情况:我可以为每个NSView创建成功的NSPrintOperations,但如果我不显示打印面板,则显示使用了打印机的默认分辨率,该分辨率对于我的需要来说太高、太慢 迄今为止我拥有的最佳解决方案:我已尝试显示打印面板,并定义一个Mac OS“预设”,

这个问题断断续续地困扰了我大约一年,我想也许其他人也会遇到类似的情况

目标:在Mac OS X 10.6-7上,使用定义的分辨率和“高速”设置,在不显示打印面板的情况下,将多个
NSView
打印到EPSON Stylus Pro 4880打印机

当前情况:我可以为每个
NSView
创建成功的
NSPrintOperations
,但如果我不显示打印面板,则显示使用了打印机的默认分辨率,该分辨率对于我的需要来说太高、太慢

迄今为止我拥有的最佳解决方案:我已尝试显示打印面板,并定义一个Mac OS“预设”,该预设已启用正确的打印分辨率和高速设置。这里的缺点是Mac预置覆盖了我通过
NSCopies
设置的拷贝数,这是一个问题。当然,另一个困难是有人总是在身边,每天按“OK”按钮几千次

我在干什么
  • NSPrintOperation
    运行其面板时,它必须在某个地方设置特定于EPSON的打印机设置,但我找不到保存位置。它们似乎未在
    [nsprintininfo printSettings]
    中设置

  • 我已经查看了打印机的PPD,但是我在任何地方都找不到高速设置,并且PPD中定义的默认分辨率实际上没有用作打印时的默认分辨率。爱普生似乎有自己的驱动程序设置,这些设置不是从我的PPD中获取的,我不知道如何手动设置它们

  • 基本上,使用打印面板和预设运行
    nsprint操作
    会覆盖所有设置,包括我不想覆盖的设置。在没有打印面板的情况下运行它会将所有设置保留为默认设置,这不是我想要的。有人能给我指出正确的方向,在这两者之间找到解决方案吗


不幸的是,这是迄今为止我找到的最好的解决方案,尽管我不愿意称之为“最佳”,甚至是“解决方案”。回到这里:使用面板运行操作,然后以编程方式“单击”打印按钮

[op runOperationModalForWindow: self.window delegate: self didRunSelector: nil contextInfo: nil];
NSPanel *panel = (NSPanel*)self.window.attachedSheet;
for (NSView *view in ((NSView*)panel.contentView).subviews)
{
    if (view.class == [NSButton class])
    {
        NSButton *button = (NSButton*)view;
        if ([button.title isEqualToString: @"Print"])
            [button performClick: self];
    }
}


缺点显然是需要一个窗口,而我希望将其作为一个无头服务器应用程序运行。我尝试过使用Core Printing和
PMPrinter
/
PMPrintSettings
等等,但都没有效果。我唯一没有试过的就是直接和杯子说话。也许我会把它留着以防万一

使用对话框运行NSPrintOperation的runOperation后,查看PMPrintSettings,打印机特定的参数可能在那里。我想你可以将PMPrintSettings保留到将来,然后通过updateFromprintsettings加载。

谢谢分享,托比!这真的是唯一的办法吗?这是爱普生的错还是苹果的错?爱普生没有正确地连接到MacOS的打印系统吗?
op.runOperationModalForWindow(window, delegate: nil, didRunSelector: nil, contextInfo: nil)
(window.attachedSheet?.contentView.subviews.filter({ $0 is NSButton }) as [NSButton]).filter({ $0.title == "Print" }).first?.performClick(self)