1

有没有办法在不实现每个 CALayer 的–drawInContext:方法(或类似地,每个层的委托方法)的情况下将托管 NSView 的层(如屏幕上显示的那样)渲染为 PDF 或位图文件-(void)drawLayer:inContext:?我只希望 NSView 的内容与它们所显示的内容完全一样,并且使用最少的额外绘图代码。

我读过很多资料,说要渲染为 PDF,你必须-drawInContext:实现当您将它们添加到视图时渲染“正常工作”的图层,例如 CATextLayer 或 CAShapeLayer。必须重写 CATextLayer 的代码来告诉它如何在它显然完全有能力在屏幕上绘制自己时,这似乎是完全多余的。

我错过了什么明显的东西吗?

4

1 回答 1

4

我已使用以下代码成功地将视图的层层次结构写入 PDF:

- (void)renderToPath:(NSString *)filePath
{
    NSImage *image = [[NSImage alloc] initWithSize:self.bounds.size];
    [image lockFocus];
    [self.layer renderInContext:[NSGraphicsContext currentContext].CGContext];
    [image unlockFocus];

    NSImageView *tempImageView = [[NSImageView alloc] initWithFrame:self.bounds];
    tempImageView.image = image;
    NSData *pdf = [tempImageView dataWithPDFInsideRect:self.bounds];
    [pdf writeToFile:filePath atomically:YES];
}

这是一个示例项目

于 2015-09-20T04:19:47.783 回答