2010-03-13 40 views
3

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

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

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

罗杰

回答

2

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

如果要转储到打印机,然后在基于文档的应用程序和考虑到我们MyDocument(或者无论你怎么称呼它)扩展NSDocument你会实现:

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

的观点则使用标准drawRect:进行绘制。

例如,这里PeopleView只是吸引人们细节table,它需要的人employees这里NSDictonary

- (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的

+0

你不需要设置视图的框架吗?或者印刷公司为你做这件事? –

+0

不,如果你有可以自己绘制的视图,这就是你所要做的。我创建了这个例子,它工作。我以不同的方式使用数据,当我想要打印它们时,我使用'PeopleView'。 – stefanB

0

这是我的代码...

 
- (NSPrintOperation *)printOperationWithSettings:(NSDictionary *)ps error:(NSError **)e 
{ 
    NSLog(@"MyDoc printOp"); 
    StretchView * view = [[StretchView alloc] init]; 
    NSPrintInfo * printInfo = [self printInfo]; 
    NSPrintOperation * printOp 
    = [NSPrintOperation printOperationWithView:view 
            printInfo:printInfo]; 
    [view release]; 
    return printOp; 
} 

这是我的日志...

 
unning… 
2010-03-15 10:10:42.251 spelling_tutor[6772:a0b] MyDoc printOp 

我在绘图程序中有nslog条目。正如你所看到的,它永远不会被调用。是什么赋予了。

+0

我想出了我的错误。这是初始化。我只有一个需要dems的初始化例程。如果你看上面,我没有给。我改变了我的代码,以初始化一个NSRec然后给它StretchView。之后,我的绘制代码被调用。 –