我的应用程序采用 PDF 并为给定数量的页面生成缩略图。
在 OS X 10.7 上一切正常
在 OS X 10.8 上,在某些页面上,在某些 PDF 上(在 1400 测试中,计数是 7 个文档,其中有一个“违规”页面)它无法呈现,导致调用CGContextDrawPDFPage时出现 EXC_BAD_ACCESS
有时(1 比 10)它会成功。但 90% 的情况下,该文档上的该页面会导致崩溃。
下面发布的相关代码在循环中重复每个pageNumber以呈现所提供的pdfDocument。每次迭代都会产生一个CGImageRef imgRef ,它被保存到一个数组中供以后使用。
假设崩溃发生在第 30 页。
如果我从 28 渲染到 38 就可以了。
如果我从 27 渲染到 37 崩溃。
如果我只渲染 30 总是可以的。
某些包含有问题的页面集会崩溃。其他的不要。
这似乎是 PDFKit 10.8 中的一个错误......(当被要求渲染同一文档的多个页面时,尝试做一些内部缓存优化时搞砸了?)
当然,我不能排除代码中的错误,但这似乎不太可能。
任何有关如何解决此问题的想法将不胜感激。
CGPDFPageRef pdfPage = CGPDFDocumentGetPage
( pdfDocument,
pageNumber );
if( !pdfPage ) return;
CGPDFPageRetain(pdfPage);
CGRect rect = CGPDFPageGetBoxRect
( pdfPage,
kCGPDFCropBox);
CGColorSpaceRef imgColorSpace = CGColorSpaceCreateDeviceRGB ( );
CGContextRef contextRef = CGBitmapContextCreate
( NULL,
(size_t) (rect.size.width),
(size_t) (rect.size.height),
8,
((size_t) (rect.size.width))*4,
imgColorSpace,
kCGImageAlphaPremultipliedLast );
CGColorSpaceRelease ( imgColorSpace );
if( !contextRef ) return;
CGContextDrawPDFPage ( contextRef, pdfPage ); // <==== EXC_BAD_ACCESS
CGImageRef imgRef = CGBitmapContextCreateImage
( contextRef );
CFRelease ( contextRef );
CGPDFPageRelease( pdfPage );