Открыть и отобразить 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"/>