1

この質問は、約 1 年間私をときどき悩ませてきました。おそらく、他の誰かが同様の状況を経験したことがあると思いました。

目標: Mac OS X 10.6-7 でNSViews、印刷パネルを表示せずに、定義された解像度と「高速」設定を使用して、複数の EPSON Stylus Pro 4880 プリンターに印刷します。

現在の状況:NSPrintOperations各を正常に作成できますNSViewが、印刷パネルを表示しないと、プリンターのデフォルトの解像度が使用されているように見えます。これは、私のニーズに対して高すぎて低速です。

これまでの最善の解決策:印刷パネルを表示し、正しい印刷解像度と高速設定が既に有効になっている Mac OS の「プリセット」を定義しようとしました。ここでの欠点は、Mac のプリセットが で設定したコピーの数を上書きNSCopiesすることです。これは問題です。もちろん、もう 1 つの問題は、1 日に数千回 [OK] ボタンを押す人が常にそばにいることです。

私がどこにいるのか

  • NSPrintOperationパネルを実行すると、EPSON 固有のプリンター設定をどこかに設定する必要がありますが、保存されている場所が見つかりません。に設定されていないよう[NSPrintInfo printSettings]です。

  • プリンターの PPD を調べましたが、高速設定がどこにも見つからず、PPD で定義されているデフォルトの解像度は実際には印刷時のデフォルトとして使用されません。EPSON には、私が持っている PPD から取得されていない独自のドライバー設定があるようで、手動で設定する方法がわかりません。

  • 基本的にNSPrintOperation、印刷パネルとプリセットを使用して を実行すると、オーバーライドしたくない設定も含め、すべての設定がオーバーライドされます。印刷パネルなしで実行すると、すべての設定がデフォルトのままになりますが、これは私が望んでいるものではありません。これら2つの間の解決策を見つけるために、誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

0

残念ながら、これは私がこれまでに見つけた最善の解決策ですが、これを「最善」または「解決策」とは言いたくありません。これに戻ります: パネルで操作を実行し、プログラムで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 などで作業を試みましたがPMPrinterPMPrintSettings役に立ちませんでした。私がまだ試していない唯一のことは、CUPS と直接話すことです。多分私は雨の日のためにそれを保存します!

于 2012-01-25T05:10:09.497 に答える
0

NSPrintOperation の runOperation がダイアログで実行された後、PMPrintSettings を調べます。プリンター固有のパラメーターがそこにある可能性があります。将来のためにPMPrintSettingsを何らかの形で永続化し、updateFromPMPrintSettingsを介してロードできると思います。

于 2013-04-17T23:25:54.353 に答える