Настройка параметров принтера для NSPrintOperation без панели - PullRequest
1 голос
/ 05 октября 2011

этот вопрос беспокоил меня примерно год, и я подумал, что, возможно, у кого-то еще будет опыт в подобной ситуации.

Цель: в Mac OS X 10.6-7, чтобы напечатать несколько NSViews на принтерах EPSON Stylus Pro 4880 с использованием определенного разрешения и настройки «высокая скорость», без отображения панели печати. ​​

Текущая ситуация: Я могу создать успешный NSPrintOperations для каждого NSView, но если я не показываю панель печати, похоже, используется разрешение принтера по умолчанию, которое слишком велико, и медленно, для моих нужд.

Лучшее решение, которое у меня пока есть: Я попытался показать панель печати и определить «предустановку» Mac OS, в которой уже заданы правильное разрешение печати и высокоскоростные настройки. Недостатком является то, что предустановка Mac переопределяет количество копий, которое я установил с помощью NSCopies, что является проблемой. Другая сложность, конечно, в том, что кто-то всегда рядом нажимает кнопку «ОК» несколько тысяч раз в день.

Где я до

  • Когда NSPrintOperation запускает свою панель, он должен где-то установить специфичные для EPSON настройки принтера, но я не могу найти, где он сохранен. Похоже, они не установлены в [NSPrintInfo printSettings].

  • Я посмотрел PPD для принтера, но нигде не могу найти настройку высокой скорости, и разрешение по умолчанию, определенное в PPD, фактически не используется по умолчанию при печати. Похоже, у EPSON есть свои собственные настройки драйвера, которые не взяты из моего PPD, и я не уверен, как установить их вручную.

  • По сути, запуск NSPrintOperation с панелью печати и предустановками отменяет все настройки, включая те, которые я не хочу переопределять. Запуск без панели печати оставляет все настройки по умолчанию, а это не то, что мне нужно. Кто-нибудь может указать мне правильное направление, чтобы найти решение между этими двумя?

Ответы [ 2 ]

0 голосов
/ 18 апреля 2013

После запуска runOperation NSPrintOperation с диалоговым окном посмотрите в PMPrintSettings, там могут быть параметры, специфичные для принтера. Я полагаю, что вы можете как-то сохранить PMPrintSettings на будущее и загрузить через updateFromPMPrintSettings.

0 голосов
/ 25 января 2012

Это, к сожалению, лучшее решение, которое я нашел до сих пор, хотя мне неприятно называть его «лучшим» или даже «решением».Это возвращается к этому: запустить операцию с панелью, а затем программно «нажать» кнопку Print.

[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];
    }
}

или

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)

Недостатком, очевидно, является окнонужен, пока я надеялся запустить это как безголовое серверное приложение.Я пытался работать с Core Printing и PMPrinter / PMPrintSettings и так далее, но безрезультатно.Единственное, что я еще не пробовал, - это напрямую общаться с CUPS.Может быть, я сохраню это на черный день!

...