0

Leopard の AppKit リリース ノートには次のように書かれています。

多くのアプリケーションでは、ユーザーにページ設定パネルを表示したり、[ファイル] メニューに [ページ設定...] 項目を含めたりすることは適切ではありませんが、使用するページ設定パラメーターをユーザーに指定させる簡単な方法は他にありませんでした。印刷するとき。(新しい UI のアドバイス: アプリケーションがページ設定パラメーターをドキュメントごとに永続的に保存しない場合、またはアプリケーションが処理する可能性のある他の種類の大規模なオブジェクトにそれらを関連付けるメカニズムがない場合は、おそらくそうすべきではありませんページ設定パネルがまったくありません。)

かなり単純な印刷ニーズがあり、アプリケーションから「ページ設定...」コマンドを削除したいと考えています。

テキストを印刷する以前のレシピは、現在の用紙サイズと向きに適したサイズのオフスクリーン テキスト ビューを作成し、そのビューの印刷操作を開始するというものでした。

ただし、ユーザーが印刷パネルで用紙のサイズと向きを変更できるようにする場合は、その変更に対応して、印刷テキスト ビューを再構成する必要があります。

この状況を処理する正しい方法は何ですか?

私の現在のハッキングされたサンプル アプリは、NSTextView をサブクラス化し、-[MyTextView knowsPageRange:].

4

1 に答える 1

1

少しハックですが、非常にうまく機能する 1 つのアプローチは、2 つの NSPrintOperations を実行することです。

これをアプリの印刷コードで使用して、ユーザーが印刷パネルで通常のプリンターまたはレシート プリンターを選択したかどうかを検出します。アプリは、プリンターの種類ごとにまったく異なるドキュメントを印刷します。

したがって、PyObjC では、テストされていないコード:

def smartlyPrintView_(self, theViewToPrint):
    # set up and run an initial NSPrintOperation to get printInfo
    fakePrintOperation = NSPrintOperation.printOperationWithView_(theViewToPrint)
    NSPrintOperation.setCurrentOperation_(fakePrintOperation)

    if NSPrintPanel.printPanel().runModal() == True:
        # get the printInfo so we can do stuff with it
        printInfo = fakePrintOperation.printInfo()
        # get rid of our fakePrintOperation
        NSPrintOperation.currentOperation().cleanUpOperation()

        # do stuff

        # run a real NSPrintOperation without a printPanel
        realPrintOperation = NSPrintOperation.printOperationWithView_printInfo_(theViewToPrint, printInfo)
        realPrintOperation.setShowsPrintPanel_(False)
        realPrintOperation.runOperation()

    else:
        NSPrintOperation.currentOperation().cleanUpOperation()

これを Obj-C に変換するレシピ:

いくつかの変数宣言を追加し、アンダースコアをコロンに置き換え、メソッドの句で引数をインターリーブします。半分の小麦粉と一握りのセミコロンを混ぜます。弱火で30分間煮込み、熱いうちに出してください。幸運を :)

于 2008-11-02T22:56:36.873 に答える