从NSMutableData动态创建PDF

时间:2011-12-07 13:51:50

标签: iphone ios xcode ipad xcode4

我有一个包含PDF文件的NSMutableData对象。我知道如何打开存储在系统上的PDF,我可以这样做:

CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), (CFStringRef)pathToPDF, NULL, NULL);
CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL);

但是现在我不想将文件存储在系统上,而是动态创建PDF对象(因为PDF作为加密的PDF存储在系统中,我不想保存解密的文件出于安全原因。)

因此,我不想从文件中加载CGPDFDocumentRef pdf,而是直接从NSMutableData对象加载它。

我该怎么做?

提前致谢!

1 个答案:

答案 0 :(得分:2)

使用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实例,使用回调即时解密,如果这更适合您的流量。有关详细信息,请参阅文档。