今天按项目要求找了一个android的PDF控件,各种操作效果都非常好,在这里和大家分享一下。
com.joanzapata.pdfview:android-pdfview 该PDF控件加载大存储的PDF就会报错,所以建议使用 AndroidPdfViewer 控件。
这是github的地址:https://github.com/barteksc/AndroidPdfViewer
用法很简单:
1.在build.gradle里面添加依赖
implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'
2.然后就可以直接在layout里面使用了
<com.github.barteksc.pdfviewer.PDFView android:id="@+id/pdfView" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@+id/guideline2" />
3.Activity
import com.github.barteksc.pdfviewer.PDFView; import com.github.barteksc.pdfviewer.listener.OnPageErrorListener; import cn.pda.serialport.Tools; import com.github.barteksc.pdfviewer.listener.OnLoadCompleteListener; import com.github.barteksc.pdfviewer.listener.OnPageChangeListener; import com.github.barteksc.pdfviewer.scroll.DefaultScrollHandle; public class MainActivity extends AppCompatActivity implements OnPageChangeListener, OnLoadCompleteListener, OnPageErrorListener, View.OnClickListener { private PDFView pdfView ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //搭建环境的API Level必须大于等于9 if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); } pdfView = findViewById( R.id.pdfView); displayFromFile(new File(Environment.getExternalStorageDirectory() + "/UHFToPdf/test.pdf")); } private void displayFromFile( File file ) { try{ pdfView.fromFile(file) //设置pdf文件地址 .defaultPage(pageNumber) .onPageChange(this) .enableSwipe(false) .enableAnnotationRendering(true) .onLoad(this) .scrollHandle(new DefaultScrollHandle(this)) .spacing(10) // in dp .onPageError(this) // .pageFitPolicy(FitPolicy.BOTH) .load(); }catch (Exception ex){ ex.printStackTrace(); } } @Override public void onPageChanged(int page, int pageCount) { // Toast.makeText( MainActivity.this , "page= " + page + // " pageCount= " + pageCount , Toast.LENGTH_SHORT).show(); } /** * 加载完成回调 * @param nbPages 总共的页数 */ @Override public void loadComplete(int nbPages) { // Toast.makeText( MainActivity.this , "加载完成" + nbPages , Toast.LENGTH_SHORT).show(); } @Override public void onPageError(int page, Throwable t) { Log.e(TAGNAME, "Cannot load page " + page); } }