0

我有一個多頁的PDF文檔存儲在本地存儲。我想從該pdf文檔中提取任何頁面,並將其轉換爲NSData以將其與「MFMailComposeViewController」附加在一起。隨着下面的代碼行,我可以很容易地retrive所需要的網頁...如何將CGPDFDocument/CGPDFPage附加到MFMailComposeViewController

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

但我無法找到一個方法來pdfPage轉換成NSData,這樣我可以用郵件附上。

注意:要求是以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]; 
相關問題