Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 从NSMutableData动态创建PDF_Iphone_Ios_Xcode_Ipad_Xcode4 - Fatal编程技术网

Iphone 从NSMutableData动态创建PDF

Iphone 从NSMutableData动态创建PDF,iphone,ios,xcode,ipad,xcode4,Iphone,Ios,Xcode,Ipad,Xcode4,我有一个NSMutableData对象,它包含一个PDF文件。我知道如何打开存储在系统上的PDF,可以这样做: CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), (CFStringRef)pathToPDF, NULL, NULL); CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL); 但现在我不想将文件存储在系统上,而是动态

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

CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), (CFStringRef)pathToPDF, NULL, NULL);
CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL);
但现在我不想将文件存储在系统上,而是动态创建PDF对象(因为PDF作为加密PDF存储在系统上,出于安全原因,我不想保存解密后的文件)

因此,我希望直接从NSMutableData对象加载CGPDFDocumentRef pdf,而不是从文件加载CGPDFDocumentRef pdf

我该怎么做


提前谢谢

使用
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
的实例,如果它更适合您的流程,则可以使用回调动态解密。有关详细信息,请参阅文档。

当我使用CGPDFDocumentCreateWithProvider创建CGPDFDocumentRef时,它立即开始回调,并要求pdf中的几乎所有字节,这需要更多时间来完成“CGPDFDocumentRef pdf=CGPDFDocumentCreateWithProvider(dataProvider);”。你能告诉我为什么会发生这种情况吗?只有当我们从pdf中获取任何页面时,它才应该回调,对吗?这应该是一个单独的问题,而不是评论。我对CG的实现细节一无所知。