2012-12-09 55 views
2

我正在将包含许多数据点的绘图渲染到由NSView托管的CALayer中。在CALayer的drawInContext中完成的所有绘制操作都是向量操作(CGPaths等)。在将CALayer渲染为PDF输出时维护矢量图形

现在我想将其导出为PDF文件。使用CGPDFContextCreateWithURL(),创建一个PDF文件,但它基本上只包含我的情节的屏幕截图,意思是视图内容的位图图像。

但我想要的是基于矢量的PDF。我知道CALayers将他们的内容渲染到屏幕上显示的位图中,但为什么不能将相同的内容渲染为矢量图形呢?

是否真的没有内置的方法来实现这一目标?我不能是唯一需要这个的人。

回答

3

您需要重写代码,在CALayer上下文中绘制的代码也应该在PDF上下文中绘制,不要在PDF上下文上绘制CALayer,因为您将获得位图输出。

+0

非常感谢,你是绝对正确的。我总是使用“renderInContext:”而不是“drawInContext:”。这解决了这个问题。不幸的是,子层不会自动呈现,就像在NSView中一样。所以我将不得不实现遍历图层树并渲染它们的方法。 – tungsten

+0

一句话:如果我想从当前窗口中显示的图层导出PDF,是否有一种方法可以使其正确填充交付的CGContextRef的框架?因为它保留了屏幕的CALayer的框架,我想避免为了导出目的而(明显地)改变显示层的框架。 – tungsten

+1

创建PDF上下文时,如果要获得1:1 PDF导出,您可以设置页面媒体框以匹配图层的大小。 – iPDFdev