代码之家  ›  专栏  ›  技术社区  ›  Anonymous

在没有页面设置的情况下打印-对纸张大小和方向的更改做出反应?

  •  0
  • Anonymous  · 技术社区  · 17 年前

    Leopard的AppKit发行说明说:

    在许多应用中,它不是 适合当前页面设置 对用户的面板,甚至包括 页面设置…文件菜单中的项, 但是没有其他简单的方法 让用户指定页面设置 打印时要使用的参数。 (新的用户界面建议:如果您的应用程序 不持久存储页面设置 每个文档的参数,或 有一些联系他们的机制 不管是什么 应用程序的大型对象 可能会处理,可能不应该 有一个页面设置面板。)

    我有相当简单的打印需要,并希望消除页面设置…来自我的应用程序的命令。

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

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

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

    我当前的黑客示例应用通过子类化nstextview并在 -[MyTextView knowsPageRange:] .

    1 回复  |  直到 17 年前
        1
  •  1
  •   Dirk Stoop    17 年前

    有一种方法虽然有点老套,但效果很好,那就是运行两个nsprint操作。

    我们在应用程序的打印代码中使用此选项,以检测用户是否在打印面板中选择了普通打印机或收据打印机。应用程序为每种打印机打印完全不同的文档。

    所以在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分钟,然后上桌。祝你好运: