删除某些pdf页面并转换回NSMutableData

时间:2013-06-29 18:36:13

标签: ios objective-c pdf nsdata

我有一个包含pdf数据的NSMutableData。我想从pdf中删除某些页面并返回pdf。我尝试过创建CGPDFContext,CGPDFPageRef等,但没有真正解决。我有以下代码,有人可以帮我填写3个步骤。

-(NSMutableData *)deletePagesofPDF:(NSMutableData *)data withStartPage:(int)startpage withEndPage:(int)endpage{
NSData *data1               = data;
CFDataRef myPDFData       = (__bridge CFDataRef)data1;
CGDataProviderRef provider = CGDataProviderCreateWithCFData(myPDFData);
CGPDFDocumentRef pdf       = CGPDFDocumentCreateWithProvider(provider);

//step 1 delete pages from startpage to endpage.
//step 2 save pdf
//step 3 convert pdf back to NSMutabledata

return data;

}

编辑1

我决定改变策略。我现在正在创建一个新的pdf,而不是删除这些页面。请参阅下面的代码,在创建pdf上下文时它会以某种方式崩溃。错误是:地址不包含指向目标文件中某个部分的部分。我不能过去创建上下文。如果在创建上下文后出现问题,请纠正我。

-(void)saveNSDataToPDFFile:(NSMutableData *)data{
NSData *data1               = data;
CFDataRef myPDFData       = (__bridge CFDataRef)data1;
CGDataProviderRef provider = CGDataProviderCreateWithCFData(myPDFData);
CGPDFDocumentRef pdf       = CGPDFDocumentCreateWithProvider(provider);
CGPDFPageRef newPage = CGPDFDocumentGetPage(pdf, 2);

NSMutableData *pdfData = [[NSMutableData alloc] init];
CGRect mediaBox = CGRectMake(0, 0, 850, 1100);

CGContextRef pdfContext = CGPDFContextCreate((__bridge CGDataConsumerRef)(pdfData),&mediaBox,NULL);
CGPDFContextBeginPage (pdfContext,nil);
CGContextDrawPDFPage(pdfContext, newPage);
CGPDFContextClose(pdfContext);


[pdfData writeToFile:[self getDBPathPDf:@"Rajashekar.pdf"] atomically:YES];

}

编辑2

对我的长篇帖子抱歉。 我现在可以保存pdf文件而不会崩溃,但我无法在pdf中看到数据。它只显示一个中等大小的盒子,里面写着“PDF”。我哪里错了?

-(void)saveNSDataToPDFFile:(NSMutableData *)data{
NSData *data1               = data;
CFDataRef myPDFData       = (__bridge CFDataRef)data1;
CGDataProviderRef provider = CGDataProviderCreateWithCFData(myPDFData);
CGPDFDocumentRef pdf       = CGPDFDocumentCreateWithProvider(provider);
CGPDFPageRef newPage = CGPDFDocumentGetPage(pdf, 2);

NSMutableData *pdfData = [[NSMutableData alloc] init];
CGRect mediaBox = CGRectMake(0, 0, 850, 1100);
CGDataConsumerRef consumer = CGDataConsumerCreateWithCFData((__bridge CFMutableDataRef)pdfData);
CGContextRef pdfContext = CGPDFContextCreate(consumer,&mediaBox,NULL);
if (pdfContext)
{

CGPDFContextBeginPage (pdfContext,nil);
CGContextDrawPDFPage(pdfContext, newPage);
CGPDFContextClose(pdfContext);


[pdfData writeToFile:[self getDBPathPDf:@"Rajashekar.pdf"] atomically:YES];
}           

}

编辑3

它工作.... :)我忘记了CGPDFContextEndPage(pdfContext);在我关闭背景之前。

0 个答案:

没有答案