【问题标题】:Maintain vector graphics when rendering CALayer into PDF output将 CALayer 渲染为 PDF 输出时保持矢量图形
【发布时间】:2012-12-09 02:02:20
【问题描述】:

我正在将包含许多数据点的绘图渲染到由 NSView 托管的 CALayer 中。在 CALayer 的 drawInContext: 内完成的所有绘图操作都是矢量操作(CGPaths 等)。

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

但我想要的是基于矢量的 PDF。我知道 CALayers 会将其屏幕外的内容渲染为位图,然后显示在屏幕上,但为什么不能将相同的内容渲染为矢量图形呢?

真的没有内置的方法来实现这一点吗?我一定不是唯一需要这个的人。

【问题讨论】:

    标签: objective-c macos cocoa pdf calayer


    【解决方案1】:

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

    【讨论】:

    • 非常感谢,您说的完全正确。我总是使用“renderInContext:”而不是“drawInContext:”。这解决了问题。不幸的是,子层不会像在 NSView 中那样自动呈现。所以我必须实现一个遍历层树并渲染它们的方法。
    • 注解:如果我想从当前显示在窗口中的图层导出 pdf,有没有办法让它正确填充交付的 CGContextRef 的框架?因为它维护了 screen-CALayer 的框架,我想避免为了导出目的而必须(明显地)更改显示层的框架。
    • 当您创建 PDF 上下文时,如果您想获得 1:1 PDF 导出,您可以设置页面媒体框以匹配图层的大小。
    • 这就是重点,我想为导出以不同的方式缩放它。
    • 在这种情况下,您需要在 PDF 上下文上应用缩放转换,然后再在其上呈现任何内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 2011-01-26
    • 2011-06-05
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多