Отображение 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, который я пытаюсь отобразить, что означает, что файл найден и загружен правильно.
Есть ли у кого-нибудь идея о том, что здесь может быть не так или как я могу лучше отладить эту проблему?
4 ответов:
Ниже вы можете найти два различных подхода, чтобы открыть файл
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