Отображение PDF в UIWebView с помощью loadData



Я пытаюсь отобразить PDF, сохраненный локально в UIWebView. Вот как я сейчас пытаюсь это сделать:



if (![[NSFileManager defaultManager] fileExistsAtPath:self.url]) {
LOG_ERROR(@"Couldn't load local file. File at path: %@ doesn't exist", self.url);
return;
}

nsurl=[NSURL fileURLWithPath:self.url];
NSData *data = [NSData dataWithContentsOfFile:self.url];
LOG_DEBUG(@"data length:%d",[data length]);
[self.webView loadData:data MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil];


Я также пытался передать nil для textEncoding, а также использовать loadRequest UIWebView. Результатом является UIWebView, который отображает пустую страницу. В методе делегата UIWebView ошибок не возникает. Странно то, что данные имеют правильную длину, в байтах, для PDF, который я пытаюсь отобразить, что означает, что файл найден и загружен правильно.



Есть ли у кого-нибудь идея о том, что здесь может быть не так или как я могу лучше отладить эту проблему?

526   4  

4 ответов:

Ниже вы можете найти два различных подхода, чтобы открыть файл .pdf на вашем UIWebView; один из url и один как NSData:

if (self.pdfDataToLoad) //Loading the pdf as NSData
{ 
    [self.webView loadData:self.pdfData 
                  MIMEType:@"application/pdf" 
          textEncodingName:@"UTF-8" 
                   baseURL:nil];
}
else  //Open the pdf from a URL 
{ 
    NSURL *targetURL = [NSURL URLWithString:@"https://bitcoin.org/bitcoin.pdf"];
    NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
    [self.webView loadRequest:request];
}

Оказывается, проблема была связана с форматом файла PDF. Я отредактировал их с помощью Illustrator и повторно сохранил. Я думаю, что Mobile Safari не нравится форматирование файлов Illustrator, потому что каждый из них был пустым при просмотре с помощью браузера симулятора (хотя я мог бы открыть PDF-файлы в обычном Safari).

Решение состояло в том, чтобы открыть PDF-файлы с помощью предварительного просмотра и повторно сохранить их. После запуска каждого PDF через процедуру предварительного просмотра сохранения я смог получить каждый PDF для отображения в UIWebView без изменения любого из моих кодов.

Для загрузки локального файла не требуется NSData, loadRequest должен работать непосредственно с NSURL

[self.webView loadRequest:[NSURLRequest requestWithURL:nsurl]];

Я могу только предложить сделать NSURL таким образом

nsurl = [NSURL URLWithString:[self.url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

NSData используется для загрузки pdf-файлов, когда они хранятся локально в любом из каталогов. Чтобы загрузить pdf-файл, который был в вашем приложении, используйте следующий код .

NSString *path = [[NSBundle mainBundle] pathForResource:@"FileNameHere" 
                                             ofType:@"pdf"];
NSURL *url = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request];

Comments

    Ничего не найдено.