Objective c 打印不可见的视图

Objective c 打印不可见的视图,objective-c,cocoa,printing,nsview,Objective C,Cocoa,Printing,Nsview,最初,我创建了一个带有自定义NSView的简单程序。我画了一幅画(证书)并打印了出来!美丽的!一切都很顺利 然后,我将自定义NSView移动到现有应用程序。我的希望是,当用户点击print时,它将打印此证书。很简单。我想我的控制器代码中可能有一个NSView指针。然后在初始化时,我将填充指针。然后,当有人想要打印证书时,它就会打印出来。问题是我所有的绘图代码都在“drawRect”方法中。无法调用此方法,因为此视图从未显示在窗口中 我听说其他人使用不可见的NSView对象只是为了打印。我需要做什

最初,我创建了一个带有自定义NSView的简单程序。我画了一幅画(证书)并打印了出来!美丽的!一切都很顺利

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

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


罗杰

您不必事先创建视图,可以在需要时创建视图。

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

- (NSPrintOperation *)printOperationWithSettings:(NSDictionary *)ps
                                           error:(NSError **)e
然后,视图使用标准的
drawRect:
进行绘图

例如,这里的
PeopleView
只是绘制了一个人员详细信息的
表,它在这里采用了人员
员工的
nsdictional

- (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;
}

您可以在Hillegass'Cocoa Programming for Mac OS X中的第27章“打印”中查找更多详细信息。

您不需要设置视图的框架吗?或者打印操作会为你做这些吗?不,如果你有可以自己绘制的视图,这就是你所要做的。我创建了这个示例,它很有效。我以不同的方式使用数据,当我想要打印数据时,我使用
PeopleView