我有一个自定义NSView,可以在我的应用中绘制图表。我正在生成包含图像的PDF。在iOS中,我使用以下代码执行此操作:
UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0);
[self drawRect:self.frame];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
在iOS中,显示器是视网膜,这意味着图像的分辨率非常高,但是,我现在正在尝试在我的Mac应用程序中执行此操作,并且图像的质量很差,因为非视网膜Mac将生成非-high res版本的图像。
当我使用它来生成图像时,我想强制我的NSView表现得像是视网膜。这样,当我将图像放入我的PDF时,它的分辨率会更高。现在,它非常模糊,没有吸引力。
答案 0 :(得分:0)
即使是Retina位图在放大到足够的时候仍然会模糊不清并且没有吸引力。假设视图在drawRect:
中绘制其内容,而不是尝试以固定分辨率将视图渲染为PDF,更好的方法是直接绘制到PDF graphics context。这将产生一个很好的可扩展PDF。绘图代码需要考虑因素,因此它可以用于视图的drawRect:
和PDF。
此外,iOS文档声明您不应该自己致电drawRect:
。在视图的图层上调用renderInContext:
,或使用较新的drawViewHierarchyInRect:afterScreenUpdates:
。
答案 1 :(得分:0)
您可以致电-[NSView dataWithPDFInsideRect:]
从视图中的绘图中获取PDF数据。例如:
NSData* data = [someView dataWithPDFInsideRect:someView.bounds];
[data writeToFile:@"/tmp/foo.pdf" atomically:YES];
您的视图及其子视图所做的任何矢量绘图(例如文本,Bezier路径等)都将最终作为PDF中的可缩放矢量图形。