2010-12-09 3 views
11

UIWebView에 로컬로 저장된 PDF를 표시하려고합니다.loadData를 사용하여 UIWebView에 PDF를 표시하십시오.

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]; 

을 나는 또한 textEncoding에 대한 무기 호를 전달하는 시도뿐만 아니라,있는 UIWebView의 loadRequest을 사용하는 등 : 이것은 내가 현재이 작업을 수행하려고 시도하는 방법이다. 결과는 빈 페이지를 표시하는 UIWebView입니다. UIWebView 대리자 메서드에서 오류가 발생하지 않습니다. 이상한 점은 데이터가 올바른 길이 (바이트)로 표시된다는 것입니다. 즉, 파일을 찾고로드하는 중입니다.

여기에 무슨 문제가 있는지, 또는이 문제를 더 잘 디버깅 할 수있는 방법에 대한 아이디어가 누구에게 있습니까?

답변

4

당신이 당신의 UIWebView.pdf 파일을 열 수있는 두 가지 다른 방법을 찾을 수 아래; 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]; 
} 
+3

이것은. 모두가 "파일 URL을로드하면됩니다."라고 말합니다. 하지만 제 경우에는 PDF로 NSData()를 RAM에 저장했습니다 (HTML에서 렌더링 한 것). 한 번만 임시 파일에 저장하면 무의미합니다. 실제 질문에 답변 해 주셔서 감사합니다. –

+0

@ NicolasMiari 환영합니다. 기꺼이 도와 드리겠습니다. –

1
당신은 로컬 파일을로드 할 수있는 NSData 필요하지 않습니다

, loadRequest는

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

난 단지 그것은 문제가 있었다 밝혀 그

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

당신은 절대적으로 정확합니다. 그건 내 해결책과 관련이 없지만, 당신이 설명하는대로 끝내게되었습니다. – mmontalbo

2

처럼 NSURL을 만들기 위해 제안 할 수 NSURL와 직접 작동합니다 PDF의 파일 형식과 관련이 있습니다. Illustrator를 사용하여 편집 한 다음 다시 저장했습니다. 필자는 모바일 사파리가 Illustrator에서 파일을 포맷하는 방식을 좋아하지 않는다고 생각합니다. 시뮬레이터의 브라우저를 사용하여 보았을 때 각각이 공백 이었기 때문입니다 (일반 Safari에서 PDF를 열 수는 있지만).

해결 방법은 미리보기를 사용하여 PDF 파일을 열고 다시 저장하는 것입니다. 미리보기 저장 루틴을 통해 각 PDF를 실행 한 후 내 코드를 변경하지 않고 각 PDF를 UIWebView에 표시 할 수있었습니다.

1

NSData은 pdf 파일을 로컬로 모든 디렉토리에 저장할 때로드하는 데 사용됩니다. 응용 프로그램에 있던 pdf를로드하려면 다음 코드를 사용하십시오.

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