Печать без настройки страницы - реагирование на изменение размера бумаги и ориентации? - PullRequest
0 голосов
/ 31 октября 2008

В заметках о выпуске AppKit для Leopard написано:

Во многих приложениях это не уместно представить настройки страницы панели для пользователя, или даже включают в себя Параметры страницы ... в меню Файл, но другого легкого пути не было позволить пользователю указать настройки страницы параметры, которые будут использоваться при печати. (Новый совет по интерфейсу: если ваше приложение не сохраняет настройки страницы параметры для каждого документа или иметь некоторый механизм, чтобы связать их с любым другим видом крупномасштабные объекты вашего приложения может иметь дело с, это, вероятно, не должно вообще есть панель настройки страницы.)

У меня достаточно простые требования к печати, и я хотел бы исключить из приложения команду «Page Setup ...».

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

Однако, если пользователь разрешает изменять размер и ориентацию бумаги на панели печати, мне нужно отреагировать на это изменение и перенастроить мое представление для печати текста.

Как правильно справиться с этой ситуацией?

Мой текущий взломанный пример приложения делает это путем создания подкласса NSTextView и перенастройки для новых параметров страницы в -[MyTextView knowsPageRange:].

1 Ответ

1 голос
/ 03 ноября 2008

Один из подходов, который немного хакерский, но работает очень хорошо, - запустить две операции NSPrintOperation.

Мы используем это в коде печати нашего приложения, чтобы определить, выбрал ли пользователь обычный принтер или принтер чеков на панели печати. Приложение печатает совершенно разные документы для каждого типа принтера.

То есть в 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:

Добавьте некоторые объявления переменных, замените подчеркивания двоеточиями и чередуйте аргументы с предложениями метода. Смешайте в половине чашки муки и горсть точек с запятой. Варить на медленном огне тринадцать минут и подавать горячим. Удачи:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...