从文档目录加载PDF - iPhone

时间:2010-10-08 22:00:37

标签: iphone objective-c core-graphics

而不是从我想要的资源文件夹中加载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。 有什么想法有什么不对? 谢谢!

3 个答案:

答案 0 :(得分:2)

显而易见的答案是在DocumentCreate函数中使用pdfURL。 finalURL无处不在,它甚至不明显是什么。

pdf = CGPDFDocumentCreateWithURL(pdfURL);

答案 1 :(得分:1)

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

你确定文件存在于这条路径上吗? 我创建了一个类似于你的测试用例。并且使用名为“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文件。

答案 2 :(得分:0)

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

另外,正如我在其他问题上提到的,我不明白为什么你要从路径中删除“localhost /”。它不太可能存在于那里(它更可能只出现在URL中),如果它确实出现在那里,应该出现在那里,并且将其剥离会使路径出错