2013-06-06 9 views
7

Ich versuche, ein PDF in meiner iPad-Anwendung durch UIWebView wie unten gezeigt zu zeigen.Wie NSData mit PDF-Inhalt in iOS UIWebView anzeigen?

NSData * responseData = [NSURLConnection sendSynchronousRequest:mutableUrlRequest returningResponse:nil error:nil]; 
[pdfWebView loadData:responseData MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil]; 

Aber das funktioniert nicht. Ist es eine richtige Art zu zeigen? Wenn nicht, könnte mir jemand helfen, das PDF in UIWebView oder einer anderen nützlichen Methode zu zeigen.

Danke!

+0

Gibt es Gründe, warum Sie tun Laden Sie die PDF-URL nicht direkt in der Webansicht? –

+0

@verbumdei Der Grund ist, dass Meine Anforderung ist, die PDF-Daten zu erhalten, indem Sie ein Java-Servlet treffen. –

Antwort

21

Haben Sie die Antwort auf meine Frage. Die untere Zeile wird die Magie machen.

[webview loadData:PdfContent MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil]; 
2

Speichern Sie es in einer Datei mit einem PDF-Suffix in einem temporären Verzeichnis und öffnen Sie es von dort.

+1

Könnten Sie bitte ein Code-Snippet geben, um die NSData mit Byte-Array zu speichern, als PDF im lokalen Verzeichnis zu speichern. –

0

wenn Sie eine PDF-Datei mit der Anwendung gebündelt (in diesem Beispiel dem Namen „document.pdf“):

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

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

[self.view addSubview:webView]; 
[webView release]; 

Sie weitere Informationen finden Sie hier: Technische QA1630: UIWebView mit ausgewählten Dokumenttypen anzuzeigen .

+2

Meine Frage ist anders, ich habe die Daten des PDF vom Server. –

2

Wie NSData (PDF-Datei) in Dokumentenverzeichnis speichern:

NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
    NSString *documentFolderPath = [searchPaths objectAtIndex: 0]; 
    NSString *imagePath = [documentFolderPath stringByAppendingPathComponent:@"yourPdfFileName.pdf"]; 

NSFileManager *filemanager=[NSFileManager defaultManager]; 
    if(![filemanager fileExistsAtPath:filePath]) 
     [[NSFileManager defaultManager] createFileAtPath:filePath contents: nil attributes: nil]; 

    NSFileHandle *handle = [NSFileHandle fileHandleForWritingAtPath:filePath]; 

    [handle writeData:data]; 
0

Gibt es einen Grund, warum Sie weder das Quick Look Framework noch UIDocumentInteractionController verwenden? Sie können dem Benutzer mehr Funktionalität als ein WebView und ein wenig weniger Cloogy bieten.

Hier sind Links zu Apples Dokumentation: https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/DocumentInteraction_TopicsForIOS/Articles/UsingtheQuickLookFramework.html

https://developer.apple.com/library/ios/documentation/uikit/reference/UIDocumentInteractionController_class/Reference/Reference.html

Wenn Sie schauen, die PDF-Datei aus dem App-Dateisystem zu machen, ärgern keine Notwendigkeit zu! So stellen Sie sicher, dass die pdf Sie gespeichert haben eine richtige ‚.pdf‘ Erweiterung hat, dann bieten sie dem QLPreviewController in vollständigen Pfad:

self.contentURL = [NSURL fileURLWithPath:fullPath]; 
2

swift3:

webView.load(data, mimeType: "application/pdf", textEncodingName: "UTF-8", baseURL: URL(string: "You can use URL of any file in your bundle here")!)