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




}