0

로컬 저장소에 저장된 muti page pdf 문서가 있습니다. 해당 PDF 문서의 모든 페이지를 추출하고 NSData로 변환하여 'MFMailComposeViewController'와 연결합니다. 다음 코드 줄과 함께, 난 쉽게 필요한 페이지를 가져 오지 수 있습니다 ...MFMailComposeViewController에 CGPDFDocument/CGPDFPage를 연결하는 방법

CGPDFDocumentRef pdfDoc=CGPDFDocumentCreateWithURL(pdfURL); 
CGPDFPageRef pdfPage = CGPDFDocumentGetPage(pdfDoc, pageNumber); 

하지만 내가 메일에 첨부 할 수 있도록 NSDatapdfPage을 변환 할 수있는 방법을 찾을 수 없습니다입니다.

참고 : 페이지를 PDF 형식으로 첨부해야하므로 PDF를 PNG 또는 JPEG로 변환하지 마십시오.

답변

6

CGPDF은 주로 PDF 데이터를 그리기위한 것이지 PDF 데이터를 변환하는 것이 아닙니다. 따라서 페이지를 추출하려면 그려야합니다. 예를 들어, 사용

여기
// input 
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)inputData); 
CGPDFDocumentRef document = CGPDFDocumentCreateWithProvider(provider); 
CGPDFPageRef page = CGPDFDocumentGetPage(document, pageIndex); 
CGRect mediaBox = CGPDFPageGetBoxRect(page, kCGPDFMediaBox); 
// output 
CGDataConsumerRef consumer = CGDataConsumerCreateWithCFData((__bridge CFMutableDataRef)outputData); 
CGContextRef context = CGPDFContextCreate(consumer, &mediaBox, NULL); 
// draw 
CGContextBeginPage(context, &mediaBox); 
CGContextDrawPDFPage(context, page); 
CGContextEndPage(context); 
// cleanup 
CGDataProviderRelease(provider); 
CGPDFDocumentRelease(document); 
CGDataConsumerRelease(consumer); 
CGContextRelease(context); 
+0

덕분에 ... 그것은 작동합니다. – Atif

+0

outputData는 NSMutableData * outputData로 선언 할 수 있습니다. – Atif

0

당신이 할 것입니다 :

NSMutableData *pdfData = [[NSMutableData alloc] init]; 
    CGDataConsumerRef dataConsumer = CGDataConsumerCreateWithCFData((CFMutableDataRef)pdfData); 
    const CGRect mediaBox = CGRectMake(0.0f, 0.0f, drawingWidth, drawingHeight); 
    CGContextRef pdfContext = CGPDFContextCreate(dataConsumer, &mediaBox, NULL); 

    UIGraphicsPushContext(pdfContext); 
    CGContextBeginPage(pdfContext, &mediaBox); 

    CGContextDrawPDFPage(pdfcontext, pdfPage); 

    CGContextEndPage(pdfContext);  
    CGPDFContextClose(pdfContext); 
    UIGraphicsPopContext(); 

    CGContextRelease(pdfContext); 
    CGDataConsumerRelease(dataConsumer); 

    // Mail part 
    MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init]; 
    mailViewController.mailComposeDelegate = self; 
    NSString *[email protected]"application/pdf";    
    [mailViewController setSubject:@"Subject"]; 
    [mailViewController setMessageBody:@"Message Body" isHTML:NO]; 
    [mailViewController addAttachmentData:[pdfData copy] mimeType:mime fileName:@"page.pdf"]; 
    [self presentModalViewController:mailViewController animated:YES];