Создать PDF на лету из NSMutableData - PullRequest
2 голосов
/ 07 декабря 2011

У меня есть объект NSMutableData, который содержит файл PDF.Я знаю, как открыть PDF-файл, хранящийся в системе, что можно сделать следующим образом:

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

Но теперь я не хочу сохранять файл в системе, но создаю объект PDF наfly (потому что PDF хранится в системе как зашифрованный PDF, и я не хочу сохранять дешифрованный файл по соображениям безопасности.)

Поэтому вместо загрузки PDF-файла CGPDFDocumentRef из файла я хочучтобы напрямую загрузить его из объекта NSMutableData.

Как я могу это сделать?

Заранее спасибо!

1 Ответ

2 голосов
/ 07 декабря 2011

Используйте 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, который расшифровывает на лету с помощью обратных вызовов, если это лучше соответствует вашему потоку,Подробности смотрите в документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...