Comment ouvrir un fichier PDF local dans WebView sous Android?
je veux ouvrir le fichier PDF local (carte SD) dans un WebView.
j'ai déjà essayé ceci:
webview = (WebView) findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setPluginsEnabled(true);
webview.getSettings().setAllowFileAccess(true);
File file = new File(Environment.getExternalStorageDirectory() + "/test.pdf");
final Uri uri = Uri.fromFile(file);
webview.loadUrl(uri.toString());
mais il ne l'ouvre toujours pas, alors faites-moi savoir comment je peux ouvrir un PDF dans WebView?
6 réponses
je sais, cette question est ancienne.
mais j'aime vraiment l'approche de Xamarin pour faire usage du pdf.js à partir de Mozilla. Il fonctionne sur les anciennes versions Android, vous n'avez pas besoin d'une application spéciale de visualisation de PDF pour cela et vous pouvez facilement afficher un PDF à l'intérieur de la hiérarchie des vues de vos applications.
Git pour cette: https://mozilla.github.io/pdf.js/
options supplémentaires par défaut (comme standard zoom): https://github.com/mozilla/pdf.js/wiki/Viewer-options
il suffit d'ajouter les fichiers pdfjs à votre répertoire D'actifs:
Et appeler cela de la façon suivante:
// 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() + "#zoom=page-width");
chose Cool: si vous voulez réduire le nombre de fonctionnalités / contrôles. Allez dans le fichier Assets/pdfjs/web / viewer.fichier html et marquer certains contrôles comme cachés.
style="display: none;"
E. g. Si vous n'aimez pas le droit barre d'outils:
<div id="toolbarViewerRight" style="display: none;">...</div>
comme @Sameer a répondu dans votre commentaire ci-dessus, la seule solution pour voir PDF dans webview est à travers le visualiseur en ligne de Google Docs qui va rendre et renvoyer une version lisible à votre application.
précédemment discuté ici
Vous ne pouvez pas. En utilisant une intention, Vous pouvez ouvrir le PDF dans une application de visionneuse externe comme Acrobat Reader:
try
{
Intent intentUrl = new Intent(Intent.ACTION_VIEW);
intentUrl.setDataAndType(uri, "application/pdf");
intentUrl.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
mActivity.startActivity(intentUrl);
}
catch (ActivityNotFoundException e)
{
Toast.makeText(mActivity, "No PDF Viewer Installed", Toast.LENGTH_LONG).show();
}
Après avoir passer par plusieurs postes, je suis tombé sur réponse simple sur Quora qui fait à peu près le travail. Voici les étapes:-
Ajouter cette dépendance dans votre gradle fichier:
compile 'com.github.barteksc:android-pdf-viewer:2.0.3'
activity_main.xml
<com.github.barteksc.pdfviewer.PDFView
android:id="@+id/pdfView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
MainActivity.java
package pdfviewer.pdfviewer;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import com.github.barteksc.pdfviewer.PDFView;
import com.github.barteksc.pdfviewer.listener.OnLoadCompleteListener;
import com.github.barteksc.pdfviewer.listener.OnPageChangeListener;
import com.github.barteksc.pdfviewer.scroll.DefaultScrollHandle;
import com.shockwave.pdfium.PdfDocument;
import java.util.List;
public class MainActivity extends Activity implements OnPageChangeListener,OnLoadCompleteListener{
private static final String TAG = MainActivity.class.getSimpleName();
public static final String SAMPLE_FILE = "sample_pdf.pdf";
PDFView pdfView;
Integer pageNumber = 0;
String pdfFileName;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pdfView= (PDFView)findViewById(R.id.pdfView);
displayFromAsset(SAMPLE_FILE);
}
private void displayFromAsset(String assetFileName) {
pdfFileName = assetFileName;
pdfView.fromAsset(SAMPLE_FILE)
.defaultPage(pageNumber)
.enableSwipe(true)
.swipeHorizontal(false)
.onPageChange(this)
.enableAnnotationRendering(true)
.onLoad(this)
.scrollHandle(new DefaultScrollHandle(this))
.load();
}
@Override public void onPageChanged(int page, int pageCount) {
pageNumber = page;
setTitle(String.format("%s %s / %s", pdfFileName, page + 1, pageCount));
}
@Override public void loadComplete(int nbPages) {
PdfDocument.Meta meta = pdfView.getDocumentMeta();
printBookmarksTree(pdfView.getTableOfContents(), "-");
}
public void printBookmarksTree(List<PdfDocument.Bookmark> tree, String sep) {
for (PdfDocument.Bookmark b : tree) {
Log.e(TAG, String.format("%s %s, p %d", sep, b.getTitle(), b.getPageIdx()));
if (b.hasChildren()) {
printBookmarksTree(b.getChildren(), sep + "-");
}
}
}
}
vous devez vous assurer que votre dossier de ressources contient sample_pdf.pdf (la bibliothèque soutient aussi l'ouverture pdf D'Uri et SDCard)
bon codage :)
android OS 5.0(lollipop)-pupilles vous pouvez utiliser PdfRenderer instead of webview/library.
Vous pouvez utiliser cette classe pour afficher les fichiers pdf dans l'application.
si vous voulez supporter un système D'exploitation inférieur, vous pouvez utiliser une bibliothèque/autre approche mentionnée dans une autre réponse car il n'y a pas de support natif.
pour en savoir plus, consultez le docs, vous pouvez aussi consulter ce exemple
WebView ne peut pas ouvrir un .fichier pdf. La solution la plus populaire (l'url de google docs + votre url dans WebView) montre simplement que vous avez été converti par Google Docs pictures. Cependant, il n'y a toujours pas de façon simple d'ouvrir .pdf à partir de l'url.