打印不可见的NSView

时间:2010-03-13 11:05:12

标签: objective-c cocoa printing nsview

最初我使用自定义NSView创建了一个简单的程序。我画了一张照片(证书)并打印出来!美丽!一切都很棒!

然后我将自定义NSView移动到现有应用程序。我希望当用户点击打印时,它会打印此证书。很简单。我想我的控制器代码中可能有一个NSView指针。然后在初始化时我会填充指针。然后,当有人想要打印证书时,它会打印出来。问题是我的所有绘图代码都在“drawRect”方法中。不会调用此方法,因为此视图永远不会显示在窗口中。

我听说其他人只使用不可见的NSView对象进行打印。我需要做什么?我真的不想在屏幕上显示这个视图。

罗杰

1 个答案:

答案 0 :(得分:2)

您不必提前创建视图,您可以在需要时创建视图。

如果您有基于文档的应用程序和要转储到打印机的视图,那么在MyDocument(或任何您称之为)的扩展NSDocument中,您将实现:

- (NSPrintOperation *)printOperationWithSettings:(NSDictionary *)ps
                                           error:(NSError **)e

然后视图使用标准drawRect:进行绘制。

示例,此处PeopleView仅提取table人详细信息,此处需要NSDictonaryemployees

- (NSPrintOperation *)printOperationWithSettings:(NSDictionary *)ps
                                           error:(NSError **)e
{
    PeopleView * view = [[PeopleView alloc] initWithPeople:employees];
    NSPrintInfo * printInfo = [self printInfo];
    NSPrintOperation * printOp
        = [NSPrintOperation printOperationWithView:view
                                         printInfo:printInfo];
    [view release];
    return printOp;
}

您可以在第27章“打印”中查找更多详细信息,请参阅Hillegass的“Mac OS X可可编程”。