打印一个不可见的NSView

3

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

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

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

Rodger

1个回答

2

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

如果您有基于文档的应用程序,并且想要将视图转储到打印机,则在扩展NSDocumentMyDocument(或任何您称之为)中实现以下内容:

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

这个视图使用标准的 drawRect: 方法进行绘制。

例如,这里的 PeopleView 只是绘制了一个人员详情的 table,它接受一个人员 employeesNSDictonary

- (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章打印中查找更多详细信息。


你不需要设置视图的框架吗?还是打印操作会为你完成? - Peter Hosey
不,如果您有可以绘制自己的视图,则只需执行此操作。我创建了示例并且它可行。当我以不同方式使用数据时,如果想要打印它们,我将使用“PeopleView”。 - stefanB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接