objective-c – 使用Quartz将PDF文档保存到磁盘

objective-c – 使用Quartz将PDF文档保存到磁盘,第1张

概述我试图将pdf页面绘制到pdf上下文中,然后将其保存磁盘.我似乎无法弄清楚出了什么问题.有人可以给我一些指示.谢谢. - (void)testQuartz:(NSData *)pdfDocumentData{ //Create the pdf document reference CGDataProviderRef dataProvider = CGDataProvide 我试图将pdf页面绘制到pdf上下文中,然后将其保存到磁盘.我似乎无法弄清楚出了什么问题.有人可以给我一些指示.谢谢.

- (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文档保存到磁盘所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1071052.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存