如何将CGPDFDocument/CGPDFPage附加到MFMailComposeViewController

Ati*_*tif 0 core-graphics nsdata cgpdfdocument ios mfmailcomposeviewcontroller

我有一个存储在本地存储上的多页PDF文档.我想从该pdf文档中提取任何页面并将其转换为NSData以将其附加到"MFMailComposeViewController".使用以下代码行,我可以轻松地检索所需的页面...

CGPDFDocumentRef pdfDoc=CGPDFDocumentCreateWithURL(pdfURL);
CGPDFPageRef pdfPage = CGPDFDocumentGetPage(pdfDoc, pageNumber);
Run Code Online (Sandbox Code Playgroud)

但我无法找到转换pdfPage成的方式,NSData以便我可以用邮件附加它.

注意:要求是以PDF格式附加页面,因此请不要建议将PDF转换为PNG或JPEG.

leo*_*leo 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);
Run Code Online (Sandbox Code Playgroud)