绘制没有当前上下文的PDFPage

时间:2017-01-23 23:47:36

标签: objective-c pdf quartz-graphics cgcontext

从Sierra开始,可以使用pdf drawWithBox:toContext:操作。但在以前的操作系统版本中,这不存在。当存在图形上下文时,前导drawWithBox:在存在上下文的地方(例如在drawRect:中)工作得很好。但是,如果你没有这样的背景,我就不会看到使用drawWithBox:的方法(除了采用可能会出现的随机背景)。我试过这个:

_contextRef =
  CGBitmapContextCreate(_cvMat.data, ... 

...

if (v12) {
  [page drawWithBox:kPDFDisplayBoxBleedBox toContext:cgContext];
} else {
  [NSGraphicsContext  setCurrentContext:(__bridge NSGraphicsContext * _Nullable)(cgContext)];
  [page drawWithBox:kPDFDisplayBoxBleedBox];
}

但刚刚抛弃

  

- [__ NSCFType graphicsPort]:无法识别的选择器发送到实例0x7f8de1e219a0

这不是经常遇到(或追求)的错误信息。

1 个答案:

答案 0 :(得分:0)

您遇到的问题是CGContextRefNSGraphicsContext不是一回事。当您期待+[NSGraphicsContext setCurrent:]实例时,您正在使用CGContextRef致电NSGraphicsContext

好消息是,您可以轻松地从NSGraphicsContext创建CGContext

CGContextRef cgContext;
NSGraphicsContext *newContext = [[NSGraphicsContext alloc] initWithCGContext:cgContext flipped:NO];
[NSGraphicsContext setCurrent: newContext];

看看是否可以将PDF绘制到您期望的位置。