2011-12-07 11 views
2

PDFファイルを含むNSMutableDataオブジェクトがあります。NSMutableDataからオンザフライでPDFを作成する

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

しかし、今、私は、システム上のファイルを保存する必要はありませんが、(その場でPDFオブジェクトを作成します。私は私はこのように行うことができるシステムに保存されたPDFを、開く方法を知っていますPDFは暗号化されたPDFとしてシステムに保存され、セキュリティ上の理由から復号化されたファイルを保存したくないためです。 NSMutableDataオブジェクトから取得します。

どうすればいいですか?

ありがとうございます!任意のソースからバイトを取得する

答えて

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のインスタンスを作成することができます。詳細については、ドキュメントを参照してください。

+0

よかったです、ありがとうございました! – CyberK

+0

CGPDFDocumentCreateWithProviderを使用してCGPDFDocumentRefを作成すると、コールバックの生成がimmidiatlyで始まり、 "CGPDFDocumentRef pdf = CGPDFDocumentCreateWithProvider(dataProvider);"を完了するまでに時間がかかるpdfからほぼすべてのバイトが尋ねられます。あなたはなぜそれが起こっているかを提案しますか、それはpdfの右から任意のページを取得する場合にのみコールバックを与えるべきですか? –

+0

これは本当に別の質問ではなく、コメントでなければなりません。私はCGの実装の詳細について何も知らない。 –

関連する問題