Android PdfViewer案例使用

今天按项目要求找了一个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);
    }




}
复制代码

 

posted @   大空白纸  阅读(11416)  评论(2编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示