没有页面设置的打印 - 对纸张尺寸和方向的变化做出反应?

时间:2008-10-31 13:49:10

标签: cocoa macos printing

Leopard的AppKit发行说明:

  

在许多应用中并非如此   适合呈现页面设置   面板给用户,甚至包括一个   “文件”菜单中的“页面设置...”项目,   但是没有其他简单的方法   让用户指定页面设置   打印时要使用的参数。   (新的UI建议:如果您的应用程序   不会持久存储页面设置   基于每个文档的参数,或   有一些机制来关联它们   与其他任何类型的   大规模对象你的应用程序   可能会处理,它可能不应该   有一个页面设置面板。)

我有相当简单的打印需求,并希望从我的应用程序中删除“页面设置...”命令。

我之前打印文本的方法是为当前纸张尺寸和方向创建适当大小的屏幕外文本视图,然后为该视图启动打印操作。

但是,如果允许用户更改打印面板中的纸张尺寸和方向,我需要对该更改做出反应并重新配置我的打印文本视图。

处理这种情况的正确方法是什么?

我当前的黑客示例应用程序通过继承NSTextView并重新配置-[MyTextView knowsPageRange:]中的新页面参数来实现此目的。

1 个答案:

答案 0 :(得分:1)

一种稍微有点hacky但运行良好的方法是运行两个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:

添加一些变量声明,用冒号替换下划线,并将参数与方法的子句交错。混合半杯面粉和少量半冒号。在低温下煮几分钟,然后加热。祝你好运:)