在当今移动优先的世界中,创建 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).
- 项目规格
- `minSdkVersion` 为 `19`或更高
- `compileSdkVersion` 为 `30`或更高
- `targetSdkVersion` 为 `30`或更高
- Android ABI(s): x86, x86_64, armeabi-v7a, arm64-v8a.
### Android 包结构
ComPDFKit PDF SDK for Android的软件包包括以下文件:
- **libs** - 包含 ***ComPDFKit.aar***、***ComPDFKit-UI.aar*** 和 ***ComPDFKit-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** 项目.
### 步骤 2: 添加 ComPDFKit PDF SDK 包
1.首先,我们需要导入ComPDFKit PDF SDK。 复制 ***ComPDFKit.aar*** 和 ***ComPDFKit-UI.aar*** 到app的 ***libs*** 目录中.
2.将以下代码添加到**app**目录中的***build.gradle***文件中:
```groovy
...
dependencies {
/*ComPDFKit SDK*/
implementation(fileTree('libs'))
...
}
...
```
3.将ComPDFKit PDF SDK for Android作为项目的依赖项添加进去。在**app**目录下的***build.gradle***文件中,将***ComPDFKit.aar***、***ComPDFKit-UI.aar***以及相关的支持库添加到`dependencies`中。为了简化操作,您可以按照以下方式更新依赖项:
```groovy
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'
}
```
4.在`AndroidManifest.xml`中申请读写权限:
```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**中:
```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**中。
2.在您的包下创建一个新的 **Empty Activity** , 并将该Activity的名称设置为 **MainActivity**.
Android Studio将自动生成一个名为***MainActivity.java***的源文件和一个名为***activity_main.xml***的布局文件。
3.在***activity_main.xml***中创建一个`CPDFReaderView`来显示PDF文档的内容:
```xml
<!-- 你的 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`:
```Java
// 你的 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);
}
}
```
4.打开文档。这是一个耗时的过程,因此需要在**子线程**中执行。文档成功打开后,会初始化渲染PDF的UI:
```java
// 你的 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();
}
}
```
5.设置`CPDFReaderView`的基本属性:
```Java
// 你的 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文件以了解特定错误
}
...
}
```
6.在这个阶段,您的代码可能类似于以下内容:
```java
// 你的 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();
}
}
```
```xml
<!-- 你的 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>
```
7.运行应用程序。
现在,借助ComPDFKit的帮助,您获得了一个简单的应用程序来显示PDF文件。
## 问题排除
1.无法打开PDF文件
我们向您提供的许可证是与您的应用程序ID绑定的,因此请确保所获取的许可证与您的应用程序ID匹配。
2.其它问题
如果您在集成 ComPDFKit PDF SDK for Android 时遇到其他问题,请随时[联系](https://www.compdf.com/contact-us) ComPDFKit 团队。![screen_shot.png](https://static.golangjob.cn/230801/ad4738a9b36c1f5e01a7286ab14af364.png)![files.png](https://static.golangjob.cn/230801/d14db83a34ce64ece4ec254513ab7162.png)![files.png](https://static.golangjob.cn/230801/d14db83a34ce64ece4ec254513ab7162.png)
有疑问加站长微信联系(非本文作者))
![](https://static.golangjob.cn/static/img/footer.png?imageView2/2/w/280)