web-gelistirme-sc.com

Yerel nasıl açılır PDF Android'de WebView'da dosya?

Bir WebView'da yerel (SD kart) PDF dosyasını açmak istiyorum.

Bunu zaten denedim:

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());

Ancak hala açılmıyor, bu yüzden WebView'da bir PDF 'yi nasıl açabileceğimi bana bildirin.

16
Girish Patel

Biliyorum, bu soru eski.

Fakat Xamarin'in Mozilla'dan pdf.js'den yararlanma yaklaşımını gerçekten seviyorum. Eski Android sürümlerinde çalışır, bunun için özel bir PDF Viewer uygulamasına ihtiyacınız yoktur ve uygulamalarınızın hiyerarşisini görüntüleyen bir PDF inside öğesini kolayca görüntüleyebilirsiniz.

Bunun için Git: https://mozilla.github.io/pdf.js/

Ek varsayılan seçenekler (standart yakınlaştırma gibi): https://github.com/mozilla/pdf.js/wiki/Viewer-options

Sadece pdfjs dosyalarını Varlıklar dizininize ekleyin:

 enter image description here

Ve şu şekilde arayın:

// 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");

Harika bir şey: İşlevsellik/kontrol miktarını azaltmak istiyorsanız. Assets/pdfjs/web/viewer.html dosyasına gidin ve bazı kontrolleri gizli olarak işaretleyin.

style="display: none;"

Örneğin. Doğru araç çubuğunu beğenmiyorsanız:

<div id="toolbarViewerRight" style="display: none;">...</div>
21
Lepidopteron

@Sameer yukarıdaki yorumunuzda yanıtlandığı gibi, web görünümünde PDF 'yi görüntülemenin tek çözümü Google Dokümanlar'ın uygulamanıza okunabilir bir sürüm oluşturup geri gönderecek olan çevrimiçi görüntüleyicisidir.

Burada daha önce tartışılmış

4
James Wong

Yapamazsın. Bir Amaç kullanarak, PDF Acrobat Reader gibi harici bir görüntüleyici uygulamasında açabilirsiniz:

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();
}
2
CSmith

Birkaç gönderiden geçtikten sonra, Quora'da işi yapan hemen hemen this basit cevapla karşılaştım. Aşağıdaki adımlar: -

Bu bağımlılığı gradle dosyanıza ekleyin:

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 + "-");
            }
        }
    }

}

Varlık klasörünüzün sample_pdf.pdf içerdiğinden emin olmalısınız (Kütüphane ayrıca Uri ve SDCard'dan pdf açılmasını da destekler)

 enter image description here

Mutlu kodlama :)

1
pallav bohara

Android'de OS 5.0 (Lollipop) 'da servislerde kullanabilirsiniz PdfRenderer instead of webview/library. Uygulama içinde pdf'leri göstermek için bu sınıfı kullanabilirsiniz. 

İşletim sistemini bundan daha düşük bir şekilde desteklemek istiyorsanız, yerel bir destek olmadığından, diğer cevaplarda belirtilen bir kütüphane/diğer yaklaşımı kullanabilirsiniz.

Bununla ilgili daha fazla bilgiyi docs 'dan okuyabilirsiniz, ayrıca şunu belirtebilirsiniz example

0
war_Hero