Открыть и отобразить pdf-файл, хранящийся локально

Прочитав несколько вопросов и ответов, я все еще не могу найти подходящий ответ для моей текущей проблемы.

У меня есть PDF-файл (известный во время компиляции), который хранится в моей папке / res / raw.

Я попытался загрузить файл с помощью:

InputStream is = getResources().openRawResource(R.raw.mypdf);

Затем я хочу отобразить PDF (с намерением), используя предпочтительный PDF-ридер на устройстве:

Intent i;
i = new Intent(Intent.ACTION_VIEW);
i.setDataAndType(file,"application/pdf");
startActivity(i);

Проблема в том, что намерение принимает тип "Файл", в то время как мой pdf читается как "InputStream".

Вопрос в том, как мне отобразить pdf-файл? т.е. как я могу отобразить InputStream? или как я могу сохранить PDF-файл, чтобы разрешить открытие с новым File()?

2 ответа

Решение

Попробуй это..
// помещаем pdf в папку активов просто чтобы попробовать

Uri file= Uri.parse("file:///android_asset/mypdf.pdf");
  String mimeType =  MimeTypeMap.getSingleton().getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(file.toString()));

try{
     Intent i;
     i = new Intent(Intent.ACTION_VIEW);
     i.setDataAndType(file,mimeType);
     startActivity(i);

}catch (ActivityNotFoundException e) {
                    Toast.makeText(this, 
                        "No Application Available to fiew this file type", 
                        Toast.LENGTH_SHORT).show();
                } 

Вы можете использовать внешнюю библиотеку joanzapata.pdfview

этот код покажет ваш PDF, куда вы хотите в макете

 

    private PDFView pdfview;
    pdfview = (PDFView) findViewById(R.id.pdfview);
    File file = new File(filepath);
    pdfview.fromFile(file)
                    .defaultPage(1)
                    .showMinimap(false)
                    .enableSwipe(true)
                    .onLoad(this)
                    .onPageChange(this)
                    .load();


или если файл известен во время компиляции и у вас есть PDF в папке ресурсов:

 

    private PDFView pdfview;
    pdfview = (PDFView) findViewById(R.id.pdfview);
    pdfview.fromAsset(pdfName)
                    .defaultPage(1)
                    .showMinimap(false)
                    .enableSwipe(true)
                    .onLoad(this)
                    .onPageChange(this)
                    .load();


добавьте это в свой макет

<com.joanzapata.pdfview.PDFView
                android:id="@+id/pdfview"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
Другие вопросы по тегам