首页 > 编程语言 >用ComPDFKit Java库打开并阅读PDF文档

用ComPDFKit Java库打开并阅读PDF文档

时间:2023-07-31 17:03:23浏览次数:42  
标签:Java ComPDFKit CPDFDocument PDF new Android SDK

在当今移动优先的世界中,创建 Android 应用程序是企业和开发人员的必备技能。而且,随着处理 PDF 文档的需求不断增加,使用功能强大的 PDF SDK ComPDFKit 构建 Android PDF 阅读器和编辑器,能使您的最终用户轻松查看和编辑 PDF。

在本博客中,我们将首先探索集成 ComPDFKit PDF SDK 的必要步骤,并使用 ComPDFKit 构建一个 Android PDF 阅读器。


ComPDFKit Android PDF SDK 入门

ComPDFKit 是一个功能强大的 PDF SDK。只需几行 Java 代码即可轻松将 ComPDFKit PDF SDK 嵌入到您的 Android 应用程序中。只需几分钟即可开始。

以下部分介绍了要求、包的结构以及如何使用 ComPDFKit PDF SDK 用 Java 语言开发一个 Android PDF 阅读器。


要求

ComPDFKit PDF SDK 在运行 API 级别 19 或更高版本,或者面向最新稳定的Android 4.4 或更高版本的 Android 设备上受支持。此外,ComPDFKit PDF SDK 需要应用程序启用 Java 8 语言功能才能构建。

  • Android Studio 3.2 或更新 (支持 AndroidX).
  • 项目规格
  • minSdkVersion19或更高
  • compileSdkVersion30或更高
  • targetSdkVersion30或更高
  • Android ABI(s): x86, x86_64, armeabi-v7a, arm64-v8a.


Android 包结构

ComPDFKit PDF SDK for Android的软件包包括以下文件:

用ComPDFKit Java库打开并阅读PDF文档_java

  • libs - 包含 ComPDFKit.aarComPDFKit-UI.aarComPDFKit-Tools.aar 的文件夹。ComPDFKit.aar 是PDF核心API。ComPDFKit-UI.aar 是PDF视图。ComPDFKit-Tools.aar 提供了ComPDFKit SDK的完整实现解决方案和UI组件,可以帮助您更快地实现SDK中的功能。
  • Examples - 包含Android示例项目的文件夹。
  • Viewer - 一个基本的PDF阅读器,包括阅读PDF文件、更改主题、书签、搜索文本等功能。
  • Annotations - 一个具有全类型注释编辑功能的PDF阅读器,包括添加注释、修改注释、注释列表等功能。
  • ContentEditor - 一个具有文本和图像编辑功能的PDF阅读器,包括修改文本、替换图片等功能。
  • Forms - 一个具有完整类型表单编辑功能的 PDF 阅读器,包括单选按钮、组合框等。
  • DocsEditor - 一个具有页面编辑功能的PDF阅读器,包括插入/删除页面、提取页面、重新排序页面等功能。
  • PDFViewer - 一个集成了以上所有功能的多功能PDF程序。
  • ComPDFKit_Tools - 一个默认控件库,用于快速构建PDF阅读器的各种功能模块。
  • Samples - 包含直接调用接口的示例项目的文件夹
  • api_reference_android - API参考文档。
  • developer_guide_android.pdf - 开发者指南。
  • release_notes.txt - 发布信息。
  • legal.txt - 法律和版权信息。
  • TestFile - 包含测试文件的文件夹。


用Java语言开发一个Android PDF 阅读器

本节将帮助您快速开始使用 ComPDFKit PDF SDK,并通过分步说明使用 Java 语言开发 Android 应用程序。通过以下步骤,您将获得一个简单的应用程序,可以显示指定PDF文件的内容。


步骤 1: 创建一个新项目

  1. 使用 Android Studio 创建一个 Phone & Tablet 项目. 这里我们创建一个 No Activity 项目.

用ComPDFKit Java库打开并阅读PDF文档_java_02


步骤 2: 添加 ComPDFKit PDF SDK 包

  1. 首先,我们需要导入ComPDFKit PDF SDK。 复制 ComPDFKit.aarComPDFKit-UI.aar 到app的 libs 目录中.

用ComPDFKit Java库打开并阅读PDF文档_PDF SDK_03


  1. 将以下代码添加到app目录中的build.gradle文件中:
...
dependencies {
    /*ComPDFKit SDK*/
    implementation(fileTree('libs'))
    ...
}
...
  1. 将ComPDFKit PDF SDK for Android作为项目的依赖项添加进去。在app目录下的build.gradle文件中,将ComPDFKit.aarComPDFKit-UI.aar以及相关的支持库添加到dependencies中。为了简化操作,您可以按照以下方式更新依赖项:
dependencies {
    ...
    //glide
    implementation 'com.github.bumptech.glide:glide:4.12.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'

    implementation 'androidx.documentfile:documentfile:1.0.1'
}
  1. AndroidManifest.xml中申请读写权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

注意: 对于面向Android 6.0或更高版本的应用程序,请确保在运行时检查并请求外部存储的读写权限。


步骤 3: 应用许可证密钥

将许可证添加到主模块的AndroidManifest.xml中:

<meta-data
    android:name="compdfkit_license"
    android:value="{your ComPDFKit license}" />
<meta-data
    android:name="compdfkit_message"
    android:value="{your ComPDFKit message}" />


步骤 4: 显示PDF文档

  1. 将PDF文档复制到Android项目的assets目录中。例如,将文件***"Quick Start Guide.pdf"导入到路径src/main/assets*中。

用ComPDFKit Java库打开并阅读PDF文档_open a pdf_04


  1. 在您的包下创建一个新的 Empty Activity , 并将该Activity的名称设置为 MainActivity.

用ComPDFKit Java库打开并阅读PDF文档_open a pdf_05


Android Studio将自动生成一个名为MainActivity.java的源文件和一个名为activity_main.xml的布局文件。

源文件:

用ComPDFKit Java库打开并阅读PDF文档_PDF SDK Integration_06


布局文件:

用ComPDFKit Java库打开并阅读PDF文档_PDF SDK Integration_07


  1. activity_main.xml中创建一个CPDFReaderView来显示PDF文档的内容:
<!-- 你的 activity_main.xml 文件 -->

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <!-- 创建一个CPDFReaderView -->
    <com.compdfkit.ui.reader.CPDFReaderView
        android:id="@+id/readerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

从布局中获取CPDFReaderView或者直接在对应的MainActivity.java文件中的代码中创建一个CPDFReaderView

// 你的 MainActivity.java 文件

package com.compdfkit.pdfviewer;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import com.compdfkit.ui.reader.CPDFReaderView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 从xml获得 CPDFReaderView.
        CPDFReaderView readerView = findViewById(R.id.readerview);
        // 使用代码创建 CPDFReaderView.
        // CPDFDocument readerView = new CPDFReaderView(content);
    }
}
  1. 打开文档。这是一个耗时的过程,因此需要在子线程中执行。文档成功打开后,会初始化渲染PDF的UI:
// 你的 MainActivity.java 文件

... //imports

public class MainActivity extends AppCompatActivity {

    // 从 assets 目录复制PDF文件到 cache 目录。
    private void copyPdfFromAssetsToCache(String fileName) {
        try {
            InputStream inputStream = getAssets().open(fileName);
            File outputFile = new File(getCacheDir(), fileName);
            FileOutputStream outputStream = new FileOutputStream(outputFile);

            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }

            inputStream.close();
            outputStream.flush();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        CPDFReaderView readerView = findViewById(R.id.readerview);
        // 使用代码创建 CPDFReaderView.
        // CPDFDocument readerView = new CPDFReaderView(content);

        //创建一个 document 对像.
        CPDFDocument document = new CPDFDocument(this);
        

        new Thread(() -> {
            String fileName = "Quick Start Guide.pdf";
            copyPdfFromAssetsToCache(fileName);

            File file = new File(getCacheDir(), fileName);
            String filePath = file.getAbsolutePath();

            //打开文档.
            CPDFDocument.PDFDocumentError error = document.open(filePath);
            if (error == CPDFDocument.PDFDocumentError.PDFDocumentErrorPassword) {
                //文档已加密,需要密码来打开.
                error = document.open(filePath, "password");
            }

            if (error == CPDFDocument.PDFDocumentError.PDFDocumentErrorSuccess) {
                //文档已成功打开,并且可以对数据进行解析和操作。
            } else {
                //无法打开PDF文件。您可以参考API文件以了解特定错误
            }
        }).start();
    }
}
  1. 设置CPDFReaderView的基本属性:
// 你的 MainActivity.java 文件

... // imports

public class MainActivity extends AppCompatActivity {
    // 创建一个 handler 以在主线程上运行代码。
    private Handler mainThreadHandler = new Handler(Looper.getMainLooper());
...
    if (error == CPDFDocument.PDFDocumentError.PDFDocumentErrorSuccess) {
        // 文档已成功打开,并且可以对数据进行解析和操作。
        mainThreadHandler.post(() -> {
            // 设置UI的文档内容。
            readerView.setPDFDocument(document);
        });
    } else {
        // 无法打开PDF文件。您可以参考API文件以了解特定错误
    }
...
}
  1. 在这个阶段,您的代码可能类似于以下内容:
// 你的 MainActivity.java 文件

... // imports

public class MainActivity extends AppCompatActivity {
    // 创建一个 handler 以在主线程上运行代码。
    private Handler mainThreadHandler = new Handler(Looper.getMainLooper());
    // 从 assets 目录复制PDF文件到 cache 目录。
    private void copyPdfFromAssetsToCache(String fileName) {
        try {
            InputStream inputStream = getAssets().open(fileName);
            File outputFile = new File(getCacheDir(), fileName);
            FileOutputStream outputStream = new FileOutputStream(outputFile);

            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }

            inputStream.close();
            outputStream.flush();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        CPDFReaderView readerView = findViewById(R.id.readerview);

        //创建document 对像.
        CPDFDocument document = new CPDFDocument(this);

        new Thread(() -> {
            String fileName = "Quick Start Guide.pdf";
            copyPdfFromAssetsToCache(fileName);

            File file = new File(getCacheDir(), fileName);
            String filePath = file.getAbsolutePath();

            //打开文档.
            CPDFDocument.PDFDocumentError error = document.open(filePath);
            if (error == CPDFDocument.PDFDocumentError.PDFDocumentErrorPassword) {
                //文档已加密,需要密码才能打开
                error = document.open(filePath, "password");
            }

            if (error == CPDFDocument.PDFDocumentError.PDFDocumentErrorSuccess) {
                //文档已成功打开,并且可以对数据进行解析和操作。
                mainThreadHandler.post(() -> {
                    //将此document 设置到reader view中。
                    readerView.setPDFDocument(document);
                });
            } else {
                //无法打开PDF文件。您可以参考API文件以了解特定错误
            }
        }).start();
    }
}
<!-- 你的 activity_main.xml 文件 -->
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.compdfkit.ui.reader.CPDFReaderView
        android:id="@+id/readerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
  1. 运行应用程序。

用ComPDFKit Java库打开并阅读PDF文档_java_08


现在,借助ComPDFKit的帮助,您获得了一个简单的应用程序来显示PDF文件。


问题排除

  1. 无法打开PDF文件

我们向您提供的许可证是与您的应用程序ID绑定的,因此请确保所获取的许可证与您的应用程序ID匹配。


  1. 其它问题

如果您在集成 ComPDFKit PDF SDK for Android 时遇到其他问题,请随时联系 ComPDFKit 团队。

标签:Java,ComPDFKit,CPDFDocument,PDF,new,Android,SDK
From: https://blog.51cto.com/u_15827447/6910158

相关文章

  • java网络编程
    java网络编程网络编程三要素ip地址​ 设置在网络中的地址,是唯一标识端口​ 应用程序在设置种的唯一标识协议​ 数据在网络种传输的规则,常见的协议有UDP和TCP协议ipipv4ipv6IPv4:4个字节1100000000....太难记忆了变成10进制192.168.1.166运用了点分10进制......
  • java常见的排序算法(冒泡排序、选择排序、插入排序、shell排序、归并排序、堆排序、快
    文章目录一、冒泡排序1、效率表现和适用范围2、算法实现二、选择排序1、效率表现和适用范围2、算法实现三、插入排序1、效率表现和适用范围2、算法实现四、shell排序1、效率表现和适用范围2、算法实现五、归并排序1、效率表现和适用范围2、算法实现六、快速排序1、效率表现和适用......
  • java 代理(静态代理、动态代理的不同实现)详解及示例
    文章目录一、代理构成1、代理介绍2、应用场景介绍二、静态代理1、示例1)、售票服务2)、售票3)、代售点服务4)、静态代理实现1、maven依赖2、实现三、动态代理1、InvocationHandler角色2、InvocationHandler的作用3、JDK的动态代理创建机制----通过接口1)、Proxy2)、InvocationHandler3)......
  • 2、【java线程及线程池系列】synchronized、ReentrantLock和ReentrantReadWriteLock介
    java线程及线程池系列文章1、【java线程及线程池系列】java线程及线程池概念详解2、【java线程及线程池系列】synchronized、ReentrantLock和ReentrantReadWriteLock介绍及示例3、【java线程及线程池系列】线程池ThreadPoolExecutor的类结构、使用方式示例、线程池数量配置原则和......
  • 2、【java程序运行监控byteman】使用示例(运行中方法耗时监控、javaagent监控、jvm监控
    文章目录一、统计方法耗时(程序运行中)1、创建示例类2、建立监控1)、获取运行程序的进程号2)、建立监控3、编制脚本4、检测脚本5、提交脚本6、验证7、卸载脚本二、其他示例1、javaagent示例(程序未运行)1)、创建示例类2)、编译及测试3)、编制脚本4)、运行脚本5)、测试2、监控jvm的类1)、创建......
  • javascript实现浏览器端大文件分块上传
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传  可以带参数        [HttpPost("upload")]        publicJsonResultuploadProject(I......
  • C#.NET 国密SM4对称加解密 与JAVA互通 ver:20230731
    C#.NET国密SM4对称加解密与JAVA互通ver:20230731 .NET环境:.NET6控制台程序(.netcore)。JAVA环境:JAVA8,带maven的JAVA控制台程序。 简要解析:1:加密的KEY、明文等输入参数都需要string转byte[],要约定好编码,如:UTF8。2:加密后的输出参数:byte[],在传输时需要转为stri......
  • 批量导入书签pdf
    FreePic2Pdf快速为pdf文档添加带有超链接的书签目录ZhanweiLiu于2020-05-0613:53:40发布3137收藏14分类专栏:书签PDF版权书签同时被2个专栏收录1篇文章0订阅订阅专栏PDF1篇文章0订阅订阅专栏FreePic2Pdf快速为pdf文档添加带有超链接的书签目录下载FreePic2Pdf提......
  • JDK 版本异常导致 flutter doctor --android-licenses 出错 (class file version 61.0
    flutterdoctor--android-licensesError:AJNIerrorhasoccurred,pleasecheckyourinstallationandtryagainExceptioninthread"main"java.lang.UnsupportedClassVersionError:com/android/sdklib/tool/sdkmanager/SdkManagerClihasbeencompil......
  • 如何把一个PDF文件加水印后点对点推送给多个收件人
    公司行政部需要把一个PDF文件推送给全体中层。文件内容是固定不变的,但为了保证信息安全,需要给PDF文件添加水印(水印内容是每个收件人的姓名和邮件地址)。如何才能快速地实现这个功能呢?EasySQLMAIL1.0.1215版本中提供了一种新的附件类型:“普通文件附件”。我们可以利用这个功能在......