Comment puis-je afficher un document pdf dans une Webview?

Je veux afficher le contenu pdf sur webview. Voici mon code:

WebView webview = new WebView(this); setContentView(webview); webview.getSettings().setJavaScriptEnabled(true); webview.loadUrl("http://www.adobe.com/devnet/acrobat/pdfs/pdf_open_parameters.pdf"); 

Je reçois un écran vide. J’ai également défini la permission Internet.

Vous pouvez utiliser Google Docs Viewer pour lire votre pdf en ligne:

 WebView webview = (WebView) findViewById(R.id.webview); webview.getSettings().setJavaScriptEnabled(true); Ssortingng pdf = "http://www.adobe.com/devnet/acrobat/pdfs/pdf_open_parameters.pdf"; webview.loadUrl("http://drive.google.com/viewerng/viewer?embedded=true&url=" + pdf); 

Si vous utilisez uniquement la vue, l’utilisateur n’est pas autorisé à s’y connecter à son compte google.

 https://docs.google.com/viewer?url=http://my.domain.com/yourPdfUrlHere.pdf 

Ouvrir un pdf en utilisant Google Docs est une mauvaise idée en termes d’expérience utilisateur. C’est vraiment lent et insensible.

Solution après API 21

Depuis api 21, nous avons PdfRenderer qui aide à convertir un pdf en Bitmap. Je ne l’ai jamais utilisé mais cela me semble facile.

Solution pour n’importe quel niveau d’api

Une autre solution consiste à télécharger le fichier PDF et à le transmettre via Intent à une application PDF dédiée qui effectuera une tâche d’affichage de ce dernier. Expérience utilisateur rapide et agréable, surtout si cette fonctionnalité n’est pas centrale dans votre application.

Utilisez ce code pour télécharger et ouvrir le PDF

 public class PdfOpenHelper { public static void openPdfFromUrl(final Ssortingng pdfUrl, final Activity activity){ Observable.fromCallable(new Callable() { @Override public File call() throws Exception { try{ URL url = new URL(pdfUrl); URLConnection connection = url.openConnection(); connection.connect(); // download the file InputStream input = new BufferedInputStream(connection.getInputStream()); File dir = new File(activity.getFilesDir(), "/shared_pdf"); dir.mkdir(); File file = new File(dir, "temp.pdf"); OutputStream output = new FileOutputStream(file); byte data[] = new byte[1024]; long total = 0; int count; while ((count = input.read(data)) != -1) { total += count; output.write(data, 0, count); } output.flush(); output.close(); input.close(); return file; } catch (IOException e) { e.printStackTrace(); } return null; } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(File file) { Ssortingng authority = activity.getApplicationContext().getPackageName() + ".fileprovider"; Uri uriToFile = FileProvider.getUriForFile(activity, authority, file); Intent shareIntent = new Intent(Intent.ACTION_VIEW); shareIntent.setDataAndType(uriToFile, "application/pdf"); shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); if (shareIntent.resolveActivity(activity.getPackageManager()) != null) { activity.startActivity(shareIntent); } } }); } 

}

Pour que l’intention fonctionne, vous devez créer un FileProvider pour autoriser l’application récepsortingce à ouvrir le fichier.

Voici comment vous l’implémentez: Dans votre manifeste:

     

Enfin, créez un fichier file_paths.xml dans le dossier foler

     

J’espère que ça aide =)

Vous pouvez utiliser le projet pdf de Mozilla. Fondamentalement, il vous montrera le PDF. Regardez leur exemple .

Je l’utilise uniquement sur le navigateur (ordinateur de bureau et mobile) et ça marche bien.

Ici, chargez avec progressDialog. Besoin de donner WebClient sinon il force à ouvrir dans le navigateur:

 final ProgressDialog pDialog = new ProgressDialog(context); pDialog.setTitle(context.getSsortingng(R.ssortingng.app_name)); pDialog.setMessage("Loading..."); pDialog.setIndeterminate(false); pDialog.setCancelable(false); WebView webView = (WebView) rootView.findViewById(R.id.web_view); webView.getSettings().setJavaScriptEnabled(true); webView.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, Ssortingng url, Bitmap favicon) { super.onPageStarted(view, url, favicon); pDialog.show(); } @Override public void onPageFinished(WebView view, Ssortingng url) { super.onPageFinished(view, url); pDialog.dismiss(); } }); Ssortingng pdf = "http://www.adobe.com/devnet/acrobat/pdfs/pdf_open_parameters.pdf"; webView.loadUrl("http://drive.google.com/viewerng/viewer?embedded=true&url=" + pdf); 

Ceci est la limite d’ utilisation réelle que Google autorise avant que l’erreur ne soit mentionnée dans les commentaires , si c’est une fois dans une vie pdf que l’utilisateur ouvre dans l’application, alors je me sens complètement en sécurité. Bien qu’il soit conseillé de suivre l’approche native en utilisant le framework intégré sous Android à partir d’Android 5.0 / Lollipop, il s’appelle PDFRenderer .

Téléchargez le code source à partir d’ici ( Open pdf in webview android )

activity_main.xml

    

MainActivity.java

 package com.pdfwebview; import android.app.ProgressDialog; import android.graphics.Bitmap; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.webkit.WebView; import android.webkit.WebViewClient; public class MainActivity extends AppCompatActivity { WebView webview; ProgressDialog pDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); listener(); } private void init() { webview = (WebView) findViewById(R.id.webview); webview.getSettings().setJavaScriptEnabled(true); pDialog = new ProgressDialog(MainActivity.this); pDialog.setTitle("PDF"); pDialog.setMessage("Loading..."); pDialog.setIndeterminate(false); pDialog.setCancelable(false); webview.loadUrl("https://drive.google.com/file/d/0B534aayZ5j7Yc3RhcnRlcl9maWxl/view"); } private void listener() { webview.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, Ssortingng url, Bitmap favicon) { super.onPageStarted(view, url, favicon); pDialog.show(); } @Override public void onPageFinished(WebView view, Ssortingng url) { super.onPageFinished(view, url); pDialog.dismiss(); } }); } }