2012-02-24 24 views
8

Tôi muốn mở một tệp PDF trong WebView của mình và tôi đã tìm thấy và kết hợp các mã trên diễn đàn này.Mở PDF trong một WebView

Nhưng nó bắt được "Không tìm thấy ứng dụng PDF" mặc dù tôi đã cài đặt nhiều ứng dụng PDF, bao gồm Adobe Reader.

Đây mã:

private class PsvWebViewClient extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 

      if (url.contains(".pdf")) { 
       Uri path = Uri.parse(url); 
       Intent pdfIntent = new Intent(Intent.ACTION_VIEW); 
       pdfIntent.setDataAndType(path, "application/pdf"); 
       pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

       try 
       { 
        startActivity(pdfIntent); 
       } 
       catch(ActivityNotFoundException e) 
       { 
        Toast.makeText(PsvWebViewActivity.this, "No PDF application found", Toast.LENGTH_SHORT).show(); 
       } 
       catch(Exception otherException) 
       { 
        Toast.makeText(PsvWebViewActivity.this, "Unknown error", Toast.LENGTH_SHORT).show(); 
       } 

      } 

      return true; 
     } } } 
+0

Tôi thấy lạ khi điều này không hiệu quả và câu trả lời duy nhất được hiển thị trong WebView bằng google, khi thực sự nó trông giống như bạn muốn PDF sang một ứng dụng khác để xem. – BigOmega

Trả lời

28

Bạn không thể pdf mở trực tiếp trong trình duyệt web cho android Nhưng Sử dụng google Docs Viewer bạn có thể mở nó trong trình duyệt Android như ......

mWebView.loadUrl("https://docs.google.com/gview?embedded=true&url="+ webUrl); 
+0

Được rồi, công trình này, thật không may là nó không hoạt động theo phương pháp tôi đã thử, tôi nghĩ rằng webview ít rõ ràng hơn –

+0

Nó hoạt động nhưng nếu bạn thay đổi doc trên ** webUrl ** của bạn, cần có thời gian để ảnh hưởng trên tài liệu google. Nó hiển thị tài liệu cũ. –

+5

Chỉ mở một số lượng url giới hạn. Sau đó nó hiển thị một thông báo "Bạn đã đạt đến băng thông tối đa". Bất kỳ lựa chọn thay thế? –

5

Tôi biết, câu hỏi này là cũ.

Nhưng tôi thực sự thích cách tiếp cận của Xamarin để sử dụng pdf.js từ Mozilla. Nó hoạt động trên các phiên bản Android cũ hơn, bạn không cần một ứng dụng Trình xem PDF đặc biệt cho điều này và bạn có thể dễ dàng hiển thị PDF bên trong hệ thống phân cấp lượt xem ứng dụng của mình.

Git cho việc này: https://mozilla.github.io/pdf.js/

tùy chọn bổ sung: https://github.com/mozilla/pdf.js/wiki/Viewer-options

Chỉ cần thêm các tập tin pdfjs vào thư mục tài sản của bạn:

enter image description here

Và gọi nó theo cách sau:

// Assuming you got your pdf file: 
File file = new File(Environment.getExternalStorageDirectory() + "/test.pdf"); 

webview = (WebView) findViewById(R.id.webview); 
WebSettings settings = webview.getSettings(); 
settings.setJavaScriptEnabled(true); 
settings.setAllowFileAccessFromFileURLs(true); 
settings.setAllowUniversalAccessFromFileURLs(true); 
settings.setBuiltInZoomControls(true); 
webview.setWebChromeClient(new WebChromeClient()); 
webview.loadUrl("file:///android_asset/pdfjs/web/viewer.html?file=" + file.getAbsolutePath()); 

Điều thú vị: Nếu bạn muốn giảm số lượng chức năng/điều khiển. Chuyển đến tệp Assets/pdfjs/web/viewer.html và đánh dấu các điều khiển nhất định là ẩn. Với

style="display: none;" 

Ví dụ: Nếu bạn không thích thanh công cụ bên phải:

<div id="toolbarViewerRight" style="display: none;">...</div> 
Các vấn đề liên quan