我的应用程序有几个导出选项,这些选项实现为返回NSData对象(然后写入磁盘)的方法.
我想在一个方法中实现pdf导出选项:
>创建内存中的pdf
>循环通过我的文档的画布视图,并在内存中的pdf中的每个页面中呈现每个视图
>将内存中的多页pdf作为NSData返回
下面的代码是我目前正在尝试的.
我的文档中的每个页面都是800 x 600像素.
当我将生成的NSData对象写入磁盘时,写入 *** 作成功,但磁盘上的文件以某种方式损坏.该文件无法在预览或我尝试过的任何其他应用程序中打开.
我究竟做错了什么?
NSMutableData *data = [NSMutableData data];CGDataConsumerRef consumer = CGDataConsumerCreateWithCFData((CFMutableDataRef)data);CGRect mediaBox = CGRectMake(0.0,0.0,800.0,600.0);CGContextRef ctx = CGPdfcontextCreate(consumer,&mediaBox,NulL);CFRelease(consumer);NSGraphicsContext *gc = [NSGraphicsContext graphicsContextWithGraphicsPort:ctx flipped:NO];for (NSVIEw *canvas in myCanvases) { CGContextBeginPage(ctx,&mediaBox); CGContextSaveGState(ctx); [canvas displayRectIgnoringOpacity:mediaBox inContext:gc]; CGContextRestoreGState(ctx); CGContextEndPage(ctx);}CGPdfcontextClose(ctx); // UPDATE: this line was originally missing. see answer belowCGContextRelease(ctx);...NSError *err = nil;if (![data writetofile:s options:NSDataWritingAtomic error:&err]) { if (err) { NSLog(@"%@",err); }}解决方法 OP在这里.我已经解决了这个问题.我错过了对CGPdfcontextClose()的最后调用.
所以在发布上下文之前……
CGPdfcontextClose(ctx);CGContextRelease(ctx);总结
以上是内存溢出为你收集整理的macos – Mac OS X:如何将多个NSView绘制成一个新的多页PDF?全部内容,希望文章能够帮你解决macos – Mac OS X:如何将多个NSView绘制成一个新的多页PDF?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)