2012-12-09 75 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