PdfDocument类
Android API19中提供了PdfDocument类,实现了根据Android页面生成PDF文档。
API21中提供了PdfRenderer类,实现了渲染PDF文档。
实现页面生成PDF
首先新建PdfDocument对象。
PdfDocument document = new PdfDocument();
新建一个PageInfo对象,参数分别是,宽、高和页数。
这里view的getWidth()方法是获取控件的高度,使用getMeasuredHeight()方法是获取可视范围内的高度。
PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(scrollView.getWidth(), scrollView.getHeight(), 1).create();
同根document对象,新建第一页对象。
PdfDocument.Page page = document.startPage(pageInfo);
用View的draw()方法,page对象提供画笔绘制View。
scrollView.draw(page.getCanvas());
调用finishPage()方法表示绘制结束。
document.finishPage(page);
最后,将document对象输出为File即可。
document.writeTo(new FileOutputStream(file));
最后要将document关闭以免内存泄漏。
document.close();
这里有一个重点,在Android7.0及以下版本(版本节点可能上下有所浮动,测试不完全),会出现绘制速度慢导致线程阻塞,生成文件过大(中字导致),所以最好将执行方法放到子线程进行
Android PdfViewer进行本地预览
集成
implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'
在XML中填充控件
<com.github.barteksc.pdfviewer.PDFView
android:id="@+id/pdf_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
直接传入文件对象,可以直接加载本地文件
File file = new File(Environment.getExternalStorageDirectory() + "/计价器检定证书.pdf");
pdfView.fromFile(file).load();