
- (voID)testQuartz:(NSData *)pdfdocumentData{ //Create the pdf document reference CGDataProvIDerRef dataProvIDer = CGDataProvIDerCreateWithCFData((CFDataRef)pdfdocumentData); CGpdfdocumentRef document = CGpdfdocumentCreateWithProvIDer(dataProvIDer); CGDataProvIDerRelease(dataProvIDer); //Release the data provIDer //Create the pdf context CGpdfpageRef page = CGpdfdocumentGetPage(document,0); CGRect pageRect = CGpdfpageGetBoxRect(page,kCGpdfMediaBox); CFMutableDataRef mutableData = CFDataCreateMutable(NulL,0); CGDataConsumerRef dataConsumer = CGDataConsumerCreateWithCFData(mutableData); CGContextRef pdfcontext = CGPdfcontextCreate(dataConsumer,&pageRect,NulL); if (CGpdfdocumentGetNumberOfPages(document) > 0) { //Draw the page onto the new context page = CGpdfdocumentGetPage(document,0); CGContextDrawpdfpage(pdfcontext,page); } else { NSLog(@"Failed to create the document"); } //Write to disk [(NSMutableData *)mutableData writetofile:@"/Users/DavID/Desktop/test.pdf" atomically:YES]; //Clean up CGDataConsumerRelease(dataConsumer); CFRelease(mutableData); CGpdfdocumentRelease(document);}解决方法 所以我发现它有3个问题. > pdf页面从1开始而不是0.@H_403_20@>页面开始和结束时需要告诉pdf上下文.@H_403_20@>在将数据写入磁盘之前释放pdf上下文.这是出于某种原因的关键.
这是修正后的代码.
- (voID)testQuartz:(NSData *)pdfdocumentData{ //Create the pdf document reference CGDataProvIDerRef dataProvIDer = CGDataProvIDerCreateWithCFData((CFDataRef)pdfdocumentData); CGpdfdocumentRef document = CGpdfdocumentCreateWithProvIDer(dataProvIDer); //Create the pdf context CGpdfpageRef page = CGpdfdocumentGetPage(document,1); //Pages are numbered starting at 1 CGRect pageRect = CGpdfpageGetBoxRect(page,0); //NSLog(@"w:%2.2f,h:%2.2f",pageRect.size.wIDth,pageRect.size.height); CGDataConsumerRef dataConsumer = CGDataConsumerCreateWithCFData(mutableData); CGContextRef pdfcontext = CGPdfcontextCreate(dataConsumer,NulL); if (CGpdfdocumentGetNumberOfPages(document) > 0) { //Draw the page onto the new context //page = CGpdfdocumentGetPage(document,1); //Pages are numbered starting at 1 CGPdfcontextBeginPage(pdfcontext,NulL); CGContextDrawpdfpage(pdfcontext,page); CGPdfcontextEndPage(pdfcontext); } else { NSLog(@"Failed to create the document"); } CGContextRelease(pdfcontext); //Release before writing data to disk. //Write to disk [(NSData *)mutableData writetofile:@"/Users/DavID/Desktop/test.pdf" atomically:YES]; //Clean up CGDataProvIDerRelease(dataProvIDer); //Release the data provIDer CGDataConsumerRelease(dataConsumer); CGpdfdocumentRelease(document); CFRelease(mutableData);} 总结 以上是内存溢出为你收集整理的objective-c – 使用Quartz将PDF文档保存到磁盘全部内容,希望文章能够帮你解决objective-c – 使用Quartz将PDF文档保存到磁盘所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)