0

我在寻找在应用程序中显示 pdf 的更好替代方案时发现了 vfr 阅读器框架。在我的上下文中,我需要下载一个 pdf;它尚未包含在应用程序包中。将 vfr 框架与嵌入式 pdf 一起使用很容易,但到目前为止,我一直很难让它处理我写入文件的下载数据,然后用它的路径初始化 ReaderDocument。我能够将同一个文件加载到 UIWebView 中没问题,所以我不相信这是数据。这是代码:

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

生成的 pdfDoc 要么为空,要么像上面那样传递完整路径时,会因 ReaderDocument 的第 229 行的断言而崩溃

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

因为(我在做一个合理的假设)这条线(217;同一个班级):

CGPDFDocumentRef thePDFDocRef = CGPDFDocumentCreateX(docURLRef, _password);

无法创建 CGPDFDocumentRef。我之前提到过传递完整路径与仅传递文件名之间的区别,这是因为在查看代码时,ReaderDocument 类似乎对它期望在哪里找到文件做出了一些假设。无论我将文件保存到哪里,或者传递给它的内容是 ...withDocumentFilePath 方法,我都无法让它工作。

重申一下,我可以使用完全相同的文件并在 UIWebView 中打开它没问题。

那么,任何人都有同样的问题,或者,能够成功地做我正在尝试的事情?谢谢。

4

1 回答 1

5

很抱歉这么晚才回答这个问题。我自己也遇到了这个问题,所以我想我会传递我的智慧。

我的猜测是您正在将 PDF 下载到临时目录。这个框架正在寻找 NSDocumentDirectory 中的文件。因此,当您保存下载的文件时,只需保存到如下路径:

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

一旦你这样做,它将正确加载。

ps 如果我最终修改 ReaderDocument 以允许临时目录,我将在此处发布编辑。

于 2013-05-31T20:14:24.433 回答