Как сделать PDF в Android
в моем приложении я получу поток байтов и преобразую его в pdf-файл в памяти телефона. Как я могу отобразить это в pdf? И показать его на мероприятии?
6 ответов:
некоторые телефоны (например, Nexus One) поставляются с версией Quickoffice предварительно установлено, так что это может быть так же просто, как отправка соответствующего намерения, как только вы сохранили файл на SD-карту.
public class OpenPdf extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.OpenPdfButton); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { File file = new File("/sdcard/example.pdf"); if (file.exists()) { Uri path = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(path, "application/pdf"); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); try { startActivity(intent); } catch (ActivityNotFoundException e) { Toast.makeText(OpenPdf.this, "No Application Available to View PDF", Toast.LENGTH_SHORT).show(); } } } }); } }
public class MyPdfViewActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); WebView mWebView=new WebView(MyPdfViewActivity.this); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setPluginsEnabled(true); mWebView.loadUrl("https://docs.google.com/gview?embedded=true&url="+LinkTo); setContentView(mWebView); } }
Android-Lollipop (api 21) представляет новый API : PdfRenderer
этот API позволяет создавать растровое изображение со страницы в PDF-документе.
коротко :
получить искомый файловый дескриптор из вашего pdf документа:
ParcelFileDescriptor fd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY)
создать PdfRenderer
PdfRenderer renderer = new PdfRenderer(fd);
подготовить растровое
Bitmap bitmap = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ARGB_4444);
получить PdfRenderer.Страница оказать
PdfRenderer.Page page = renderer.openPage(pageIndex);
отобразить страницу на подготовленном растровом изображении
page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
теперь вы можете делать то, что вы хотите с растрового изображения.
- обратите внимание, что 2 нулевых аргумента могут позволить вам обрезать некоторую часть страницы и выполнить преобразование (используя Матрица) клипа
- есть еще один режим отображения : RENDER_MODE_FOR_PRINT. Если вы нужен этот режим есть некоторые рекомендации, чтобы использовать его правильно: вот подробности.
эта библиотека проста и хорошо работает: Android Pdf Viewer https://github.com/barteksc/AndroidPdfViewer
Старый Ответ...
Я думаю, что Джоан Сапата дает нам лучшее и простое решение:
https://github.com/JoanZapata/android-pdfview
уверяю вас, что это работает!
для локальных pdf-файлов вы можете отображать их через сторонние библиотеки. например, используйте библиотека MuPDF, его поддерживаемые типы файлов включают PDF, PNG и JPEG.
одним из недостатков MuPDF является то, что он использует собственную библиотеку для выполнения цели, поэтому будет нелегко перенести приложение на платформу BlackBerry позже.
чтобы открыть pdf из массива байтов, вы можете использовать
RadaeePDF
, вы можете сделать следующее в своей деятельности:private PDFReader m_vPDF = null; private Document doc = new Document(); public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); Global.Init(this); m_vPDF = new PDFReader(this); doc.Close(); int ret = m_doc.OpenMem(data, password); switch( ret ) { case -1://need input password finish(); break; case -2://unknown encryption finish(); break; case -3://damaged or invalid format finish(); break; case -10://access denied or invalid file path finish(); break; case 0://succeeded, and continue break; default://unknown error finish(); break; } m_vPDF.open(doc); setContentView( m_vPDF ); }