• android pdf框架-4,分析barteksc/PdfiumAndroid源码1


    关于barteksc/PdfiumAndroid

    barteksc/PdfiumAndroid 这个源码被,引用的次数是比较高的,flutter的几个pdf库也是引用它.它使用福昕的开源sdk.福昕阅读器我早期的时候用,交互一般,渲染也不如mupdf,有些pdf中文显示不了,体积小点.

    barteksc/PdfiumAndroid已经是一个完善的sdk了,不去作什么修改,这里分析一下它的工作原理就行.与vudroid的模式略有差别.但大道是相通的.分块渲染.

    PDFView

    入口是PDFView,它提供了build模式来构造.

    PDFView.this.setSwipeEnabled(enableSwipe);

    PDFView.this.setNightMode(nightMode);

    PDFView.this.enableDoubletap(enableDoubletap);

    PDFView.this.setDefaultPage(defaultPage);

    PDFView.this.setSwipeVertical(!swipeHorizontal);

    PDFView.this.enableAnnotationRendering(annotationRendering);

    PDFView.this.setScrollHandle(scrollHandle);

    PDFView.this.enableAntialiasing(antialiasing);

    PDFView.this.setSpacing(spacing);

    PDFView.this.setAutoSpacing(autoSpacing);

    PDFView.this.setPageFitPolicy(pageFitPolicy);

    PDFView.this.setFitEachPage(fitEachPage);

    PDFView.this.setPageSnap(pageSnap);

    PDFView.this.setPageFling(pageFling);

    这要功能是这些,垂直与水平滚动,双击放大,页面间距,页面的适配屏幕

    共1564行,它的特点是支持rgb565,与argb8888.而mupdf源码编译的只支持argb8888,如果想支持565要自己修改了.

    1. private void load(DocumentSource docSource, String password, int[] userPages) {
    2. if (!recycled) {
    3. throw new IllegalStateException("Don't call load on a PDF View without recycling it first.");
    4. }
    5. recycled = false;
    6. // Start decoding document
    7. decodingAsyncTask = new DecodingAsyncTask(docSource, password, userPages, this, pdfiumCore);
    8. decodingAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
    9. }

    这是入口方法,加载文档.加载完进入loadComplete

    1. void loadComplete(PdfFile pdfFile) {
    2. state = State.LOADED;
    3. this.pdfFile = pdfFile;
    4. if (!renderingHandlerThread.isAlive()) {
    5. renderingHandlerThread.start();
    6. }
    7. renderingHandler = new RenderingHandler(renderingHandlerThread.getLooper(), this);
    8. renderingHandler.start();
    9. if (scrollHandle != null) {
    10. scrollHandle.setupLayout(this);
    11. isScrollHandleInit = true;
    12. }
    13. dragPinchM
  • 相关阅读:
    文件的常用操作(读取压缩文件、解压、删除)
    带你走进Cflow (一)
    动态规划总结
    K8S自动化运维容器化(Docker)集群程序
    JVM调优:JVM中常见的垃圾回收算法详解
    Android开发基础——Android简介
    绿联DX4600 AList部署及挂载阿里云盘
    Taurus.MVC WebAPI 入门开发教程6:全局控制器DefaultController与全局事件。
    手册更新 | RK3568开发板Openwrt文件系统构建
    HarmonyOS应用开发者认证题目满分指南
  • 原文地址:https://blog.csdn.net/archko/article/details/136267841