从文档目录加载 PDF - iPhone

Posted

技术标签:

【中文标题】从文档目录加载 PDF - iPhone【英文标题】:Load PDF from documents directory - iPhone 【发布时间】:2010-10-08 22:00:37 【问题描述】:

我不想从资源文件夹加载 PDF 从文档目录加载它。我一直在尝试这样做 几天,但 CGPDFDocumentRef 一直返回 NULL。这是我的 代码:

                // Get Documents Directory 
                NSArray *searchPaths = 
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
NSUserDomainMask, YES); 
                NSString *documentsDirectoryPath = [searchPaths objectAtIndex:0]; 
                NSString *tempPath = [documentsDirectoryPath 
stringByAppendingPathComponent:[appDelegate.issueToLoad 
stringByAppendingPathExtension:@"pdf"]]; 
                NSString *path = [tempPath 
stringByReplacingOccurrencesOfString:@"localhost/" withString:@""]; 
                NSLog(@"PATH: %@", path); 
                //Display PDF 
                CFURLRef pdfURL = CFURLCreateWithFileSystemPath (NULL, 
(CFStringRef)path, kCFURLPOSIXPathStyle, FALSE); 
                NSLog(@"PDF URL: %@", pdfURL); 
                pdf = CGPDFDocumentCreateWithURL(finalURL); 
                NSLog(@"PDF: %@", pdf); 

文件路径正确,我检查了模拟器文档 目录和文件肯定在那里。当我运行应用程序时 最后一个 NSLog 说 (NULL) 并显示一个空白的白页 PDF。 有什么想法有什么问题吗? 谢谢!

【问题讨论】:

假设 pdf 是一个 CGPDFDocumentRef,我们使用类似的代码。它适用于我的。不明白为什么你的失败了。 是什么让您认为“localhost/”将成为文件路径名的一部分,并且您需要从那里删除它?它通常只出现在 URL 中,但您还没有创建 URL。 【参考方案1】:

显而易见的答案是在 der DocumentCreate 函数中使用 pdfURL。 finalURL 不知从何而来,它的用途也不清楚。

pdf = CGPDFDocumentCreateWithURL(pdfURL);

【讨论】:

【参考方案2】:

好的,下次试试。我希望这次它会更有用:-/

您确定该文件存在于该路径中吗? 我创建了一个与您类似的测试用例。对于名为“file 123.pdf”的文件,这似乎可行。至少我可以阅读pdf的版本。

我在您的代码示例之后添加了这个,以查看是否加载了 pdf。

NSLog(@"PDF: %@", pdf);
int majorVersion;
int minorVersion;
CGPDFDocumentGetVersion(pdf, &majorVersion, &minorVersion);
NSLog(@"%d %d", majorVersion, minorVersion);

这给了我以下控制台输出:

2010-10-08 13:01:40.246 test[3517:207] PATH: /var/mobile/Applications/E9CDCAC1-430D-488E-ABC3-33F40F6A06F4/Documents/file 123.pdf
2010-10-08 13:01:40.252 test[3517:207] URL: file://localhost/var/mobile/Applications/E9CDCAC1-430D-488E-ABC3-33F40F6A06F4/Documents/file%20123.pdf
2010-10-08 13:01:40.257 test[3517:207] PDF: <NSCFType: 0x139660>
2010-10-08 13:01:40.260 test[3517:207] 1 4

里面显然有一个 %20,所以我认为这不是你的实现的问题。


编辑: 将此添加到您的代码中以确保该文件存在于此路径中。

if (![[NSFileManager defaultManager] fileExistsAtPath:path])
    NSLog(@"File does not exist!");

您的路径中必须有一个有效 pdf-File。

【讨论】:

【参考方案3】:

您可能在该路径中没有 PDF 文件。 CGPDFDocumentCreateWithURL 中的“Create”指的是 CGPDFDocument 对象;它不会在该 URL 创建文档文件。您只能为已存在的 PDF 文件创建 CGPDFDocument 对象。

另外,正如我在您的另一个问题中提到的,我不明白您为什么要尝试从路径中删除“localhost/”。一开始它不太可能存在(它更有可能只出现在 URL 中),如果它确实出现在那里,它应该出现在那里,并且将其剥离会导致路径错误.

【讨论】:

以上是关于从文档目录加载 PDF - iPhone的主要内容,如果未能解决你的问题,请参考以下文章

从文档 URL 加载 PDF

将 PDF 文档从远程服务器加载到 base64 编码数据中

在 WKWebView swift 中下载文档并加载图像(png、jpeg)、pdf、doc 等

从共享驱动器加载的 Word 文档的本地副本无法使用 VBA 另存为 PDF 方法。不保存文档

无法浏览某些 pdf 和文档

pdfbox 操作 pdf 文档 - android