Czy możemy otworzyć plik pdf za pomocą UIWebView na iOS?

106

Czy możemy otworzyć plik pdf z UIWebView?

MohammedYakub Moriswala
źródło

Odpowiedzi:

278

Tak, można to zrobić za pomocą UIWebView.

Jeśli próbujesz wyświetlić plik PDF znajdujący się gdzieś na serwerze, możesz po prostu załadować go bezpośrednio w swoim widoku sieciowym:

Cel C

UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(10, 10, 200, 200)];

NSURL *targetURL = [NSURL URLWithString:@"https://www.example.com/document.pdf"];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
[webView loadRequest:request];

[self.view addSubview:webView];

Szybki

let webView = UIWebView(frame: CGRect(x: 10, y: 10, width: 200, height: 200))

let targetURL = NSURL(string: "https://www.example.com/document.pdf")! // This value is force-unwrapped for the sake of a compact example, do not do this in your code
let request = NSURLRequest(URL: targetURL)
webView.loadRequest(request)

view.addSubview(webView)

Lub jeśli masz plik PDF dołączony do aplikacji (w tym przykładzie o nazwie „document.pdf”):

Cel C

UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(10, 10, 200, 200)];

NSURL *targetURL = [[NSBundle mainBundle] URLForResource:@"document" withExtension:@"pdf"];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
[webView loadRequest:request];

[self.view addSubview:webView];

Szybki

let webView = UIWebView(frame: CGRect(x: 10, y: 10, width: 200, height: 200))

let targetURL = NSBundle.mainBundle().URLForResource("document", withExtension: "pdf")! // This value is force-unwrapped for the sake of a compact example, do not do this in your code
let request = NSURLRequest(URL: targetURL)
webView.loadRequest(request)

view.addSubview(webView)

Więcej informacji można znaleźć tutaj: Techniczne QA1630: Używanie UIWebView do wyświetlania wybranych typów dokumentów .

alleus
źródło
wielkie dzięki ... alleus. czy możemy go zapisać w lokalnym katalogu dokumentów w iPhonie?
MohammedYakub Moriswala
3
Tak, jest to możliwe, ale musisz użyć innej metody pobierania dokumentu niż WebView. Wyszukaj go tutaj w Stack Overflow. Na przykład: stackoverflow.com/questions/2102267/…
alleus
Czy można tu podać opcję drukowania
Siva
Tutaj strony PDF są wymienione w kierunku pionowym, czy można je wyświetlać w kierunku poziomym, bez przewijania w pionie.
kunjus,
@ MartinAlléus: czy możesz mi pomóc z tym stackoverflow.com/questions/21874538/ ...
Manthan
12

UIWebviews może również załadować metodę .pdfusing loadData, jeśli nabędziesz ją jako NSData:

[self.webView loadData:self.pdfData 
              MIMEType:@"application/pdf" 
      textEncodingName:@"UTF-8" 
               baseURL:nil];
Yunus Nedim Mehel
źródło
9

użyj tego do otwarcia pliku PDF w widoku sieciowym

NSString *path = [[NSBundle mainBundle] pathForResource:@"mypdf" ofType:@"pdf"];
NSURL *targetURL = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
UIWebView *webView=[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 300, 300)];
[[webView scrollView] setContentOffset:CGPointMake(0,500) animated:YES];
[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"window.scrollTo(0.0, 50.0)"]];
[webView loadRequest:request];
[self.view addSubview:webView];
[webView release];
sinh99
źródło
3
NSString *folderName=[NSString stringWithFormat:@"/documents/%@",[tempDictLitrature objectForKey:@"folder"]];
NSString *fileName=[tempDictLitrature objectForKey:@"name"];
[self.navigationItem setTitle:fileName];
NSString *type=[tempDictLitrature objectForKey:@"type"];

NSString *path=[[NSBundle mainBundle]pathForResource:fileName ofType:type inDirectory:folderName];

NSURL *targetURL = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
webView=[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 1024, 730)];
[webView setBackgroundColor:[UIColor lightGrayColor]];
webView.scalesPageToFit = YES;

[[webView scrollView] setContentOffset:CGPointZero animated:YES];
[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"window.scrollTo(0.0, 50.0)"]];
[webView loadRequest:request];
[self.view addSubview:webView];
dheerendra
źródło
Najpierw utwórz ścieżkę do swojego pliku PDF i przekonwertuj go na adres URL i użyj tego kodu do załadowania widoku internetowego, działa dla mnie, więc użyj tego samego w swoim kodzie
dheerendra
2

Wersja Swift:

if let docPath = NSBundle.mainBundle().pathForResource("sample", ofType: "pdf") {
    let docURL = NSURL(fileURLWithPath: docPath)
    webView.loadRequest(NSURLRequest(URL: docURL))
}
SoftDesigner
źródło
2

Aktualizacja odpowiedzi Martina Alléusa, aby uzyskać pełny ekran, niezależnie od tego, czy jest to telefon, czy iPad, bez konieczności twardego kodu:

CGRect rect = [[UIScreen mainScreen] bounds];
CGSize screenSize = rect.size;
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0,0,screenSize.width,screenSize.height)];

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

[self.view addSubview:webView];
TharakaNirmana
źródło
2

Szybki 4

     let webView = UIWebView(frame: view.bounds)
    let targetURL = Bundle.main.url(forResource: "sampleFileName", withExtension: "pdf")
    let request = URLRequest(url: targetURL!)
    webView.loadRequest(request)
    view.addSubview(webView)
Ekra
źródło
1
NSString *path = [[NSBundle mainBundle] pathForResource:@"document" ofType:@"pdf"];
NSURL *targetURL = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
[webView loadRequest:request];
Ved Rauniyar
źródło
0
UIWebView *pdfWebView = [[UIWebView alloc] initWithFrame:CGRectMake(10, 10, 200, 200)];

NSURL *targetURL = [NSURL URLWithString:@"http://unec.edu.az/application/uploads/2014/12/pdf-sample.pdf"];
    NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
    [pdfWebView loadRequest:request];
    [self.view addSubview:pdfWebView];
Kiran Bhoraniya
źródło
0

WKWebView : Uważam, że to pytanie jest najlepszym miejscem do poinformowania ludzi, że powinni zacząć używać WKWebview, ponieważ UIWebView jest teraz przestarzały .

Cel C

WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.frame];
webView.navigationDelegate = self;
NSURL *nsurl=[NSURL URLWithString:@"https://www.example.com/document.pdf"];
NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];
[webView loadRequest:nsrequest];
[self.view addSubview:webView];

Szybki

let myURLString = "https://www.example.com/document.pdf"
let url = NSURL(string: myURLString)
let request = NSURLRequest(URL: url!)  
let webView = WKWebView(frame: self.view.frame)
webView.navigationDelegate = self
webView.loadRequest(request)
view.addSubview(webView)

Nie skopiowałem tego kodu bezpośrednio z Xcode, więc może zawierać błąd składni. Proszę sprawdzić, kiedy go używasz.

Shobhit C.
źródło