如何正确地将NSView绘制到PDF上下文?

时间:2013-01-28 20:46:57

标签: macos cocoa drawing quartz-graphics cgpdfcontext

我已经NSViewNSView我添加了一些子视图,这些子视图是NSView的子类(名称为Square)。不同位置的正方形为50x50。我希望使用背景颜色NSViewRed呈现这个Blue的白色背景,如屏幕截图所示。

enter image description here

- (void)saveAsPDF
{

NSString *homeDirectory = NSHomeDirectory();
NSURL *fileURL = [NSURL fileURLWithPath:[homeDirectory stringByAppendingPathComponent:@"plik.pdf"]];

CGRect mediaBox = self.bounds;

CGContextRef pdfContext = CGPDFContextCreateWithURL((__bridge CFURLRef)(fileURL), &mediaBox, NULL);

CGPDFContextBeginPage(pdfContext, nil);

for (Square *square in squareGroup) {
    [square.layer renderInContext:pdfContext];
}

CGPDFContextEndPage(pdfContext);

CGContextRelease(pdfContext);

只有我得到的是空白的PDF文件。如何在pdfContext中正确绘制这个方块?

1 个答案:

答案 0 :(得分:3)

您必须致电CGPDFContextClose以便写入PDF数据:

// ...

CGPDFContextEndPage(pdfContext);

// Close the PDF document
CGPDFContextClose(pdfContenxt);

CGContextRelease(pdfContext);

// ...

documentation注意到关闭上下文会导致数据写入,这可能解释了为什么在没有关闭的情况下获取空白PDF的原因:

  

关闭上下文后,所有待处理数据都将写入上下文   目的地,PDF文件已完成。没有其他数据可以   在PDF文档关闭后写入目标上下文。