2013-03-11 89 views
0

我發現了vfr閱讀器框架,同時尋找一些更好的替代方法來在應用中顯示pdf。在我的情況下,我需要下載pdf;它不包含在應用程序包中。使用帶有嵌入式pdf的vfr框架非常簡單,但是我一直堅持使用我寫入文件的下載數據,然後使用它的路徑初始化ReaderDocument。我能夠將相同的文件加載到UIWebView沒有問題,所以我不相信這是數據。下面的代碼:iOS vfr閱讀器框架無法使用下載的pdf

NSString *fullPathToPDF = [[[self appDelegate] urlForFileUnderRecursiveDocWithName:self.pdfName andOptionallyStartingAtDirectory:[[self appDelegate] pathURLForImagesDirectory]] path]; 
     ReaderDocument *pdfDoc = [ReaderDocument withDocumentFilePath:fullPathToPDF password:nil]; 

產生的pdfDoc要麼是空,或者路過的時候它像上面的完整路徑,將與斷言崩潰從線229 ReaderDocument

NSAssert(NO, @"CGPDFDocumentRef == NULL"); 

,因爲(我(217;同一班級):

CGPDFDocumentRef thePDFDocRef = CGPDFDocumentCreateX(docURLRef, _password); 

無法創建CGPDFDocumentRef。我之前提到了將完整路徑傳遞給它只是將它傳遞給文件名的區別,這是因爲在查看代碼時,ReaderDocument類似乎對它預期在哪裏找到文件做出了一些假設。無論我將文件保存到哪裏,或者通過DocumentFilePath方法傳遞給它,我都無法使它工作。

重申,我可以使用完全相同的文件,並在UIWebView中打開它沒有任何問題。

那麼,任何人有這個相同的問題,或者,能夠做我試圖成功?謝謝。

回答

5

對不起,這麼晚回答。我只是自己遇到了這個問題,所以認爲我會傳遞我的智慧。

我的猜測是你正在下載PDF到臨時目錄。該框架正在NSDocumentDirectory中查找該文件。所以,當你去保存下載的文件,只需保存到這樣的路徑:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *baseDocumentPath = [paths objectAtIndex:0]; 
NSString *filePath = [baseDocumentPath stringByAppendingPathComponent:@"/temp.pdf"]; 

一旦你這樣做,它會正確加載。

p.s如果我最終修改ReaderDocument以允許臨時目錄,我將在此處發佈編輯。

+0

感謝您的回答,亨利。按照預期工作,並且我認爲您的想法是修改ReaderDocument,使其接受絕對路徑並在存在時使用它,除了假定現有路徑在NSDoc之下...是個好主意。再次感謝。 – wkhatch 2013-06-06 20:01:33