1

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); を忘れていました。コンテキストを閉じる前に。

4

0 に答える 0