Загрузить PDF из каталога документов - iPhone

Вместо того, чтобы загружать 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. Есть идеи, что не так? Спасибо!


person Bill    schedule 08.10.2010    source источник
comment
Предполагая, что pdf - это CGPDFDocumentRef, мы используем аналогичный код. Хотя на моем он работает. Не понимаю, почему у тебя не получается.   -  person Altealice    schedule 09.10.2010
comment
Что заставляет вас думать, что «localhost /» будет частью пути к файлу, и что вам нужно вырезать его оттуда? Обычно он появляется только в URL-адресах, но вы еще не создали URL-адрес.   -  person Peter Hosey    schedule 09.10.2010


Ответы (3)


Очевидным ответом было бы использование pdfURL в функции DocumentCreate. finalURL появляется из ниоткуда, и неясно, для чего он вообще нужен.

pdf = CGPDFDocumentCreateWithURL(pdfURL);

person Steven XM    schedule 08.10.2010

хорошо, следующая попытка. Надеюсь, на этот раз будет полезнее: - /

вы уверены, что файл существует по этому пути?
Я создал тестовый пример, похожий на ваш. И с файлом с именем «файл 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-файл.

person Matthias Bauch    schedule 08.10.2010

Вероятно, по этому пути у вас нет файла PDF. «Создать» в CGPDFDocumentCreateWithURL относится к объекту CGPDFDocument; он не будет создавать файл документа по этому URL-адресу. Вы можете создать объект CGPDFDocument только для уже существующего файла PDF.

Кроме того, как я уже упоминал по вашему другому вопросу, я не понимаю, почему вы пытаетесь удалить «localhost /» из пути. Маловероятно, что он там вообще существует (скорее всего, он появится только в URL-адресе), и если он когда-либо появится там, он должен появиться там, и его удаление приведет к неправильному пути .

person Peter Hosey    schedule 10.10.2010