Отображение PDF в UIWebView с использованием loadData - PullRequest
11 голосов
/ 09 декабря 2010

Я пытаюсь отобразить 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 ]

4 голосов
/ 14 ноября 2014

Ниже вы можете найти два разных подхода к открытию файла .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];
}
2 голосов
/ 18 декабря 2010

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

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

1 голос
/ 18 мая 2012

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

NSString *path = [[NSBundle mainBundle] pathForResource:@"FileNameHere" 
                                             ofType:@"pdf"];
NSURL *url = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request];
1 голос
/ 16 декабря 2010

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

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

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

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