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 を作成しています。以下のコードを参照してください。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); を忘れていました。コンテキストを閉じる前に。