我有一个包含PDF文件的NSMutableData对象。我知道如何打开系统上存储的PDF,我可以这样做:
CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), (CFStringRef)pathToPDF, NULL, NULL);
CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL);
但是现在我不想将文件存储在系统上,而是动态创建PDF对象(因为PDF以加密的PDF格式存储在系统上,并且我不想为了安全而保存解密的文件原因。)
因此,我不想从文件中加载CGPDFDocumentRef pdf,而是要直接从NSMutableData对象中加载它。
我怎样才能做到这一点?
提前致谢!
最佳答案
使用CGDataProvider
从任意来源获取字节:
NSData *encrypted = [NSData dataWithContentsOfFile: ...];
if (encrypted) {
NSData *decrypted = MyDecrypt(encrypted);
if (decrypted) {
CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData((CFDataRef)decrypted);
if (dataProvider) {
CGPDFDocumentRef pdf = CGPDFDocumentCreateWithProvider(dataProvider);
CGDataProviderRelease(dataProvider);
}
}
}
您还可以创建一个
CGDataProvider
实例,使用回调更快速地解密它(如果更适合您的流程)。有关详细信息,请参见文档。