在当今以移动端为先的世界中,为企业和开发者创建一个安卓应用程序是必不可少的。随着对处理PDF文档的需求日益增加,使用强大的PDF SDK------ComPDFKit来构建安卓PDF查看器和编辑器,可以让您的最终用户轻松查看和编辑PDF文档。
本文将探讨整合ComPDFKit PDF SDK所需的步骤,并使用ComPDFKit构建一个安卓PDF阅读器。
入门指南
ComPDFKit是一个强大的PDF SDK。通过几行Kotlin代码,您就可以轻松嵌入ComPDFKit PDF SDK到您的安卓应用程序中。以下部分介绍了 ComPDFKit PDF SDK 包的结构、运行的系统要求、如何运行演示和如何使用 ComPDFKit PDF SDK 用 Kotlin 制作 Android PDF 阅读器。
系统要求
ComPDFKit PDF SDK 支持运行 API 级别 19 或更新版本的 Android 设备,并以最新稳定的 Android 4.4 或更高版本为目标。另外,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 包结构
您可以在 GitHub 获取我们的 PDF SDK 安装包。ComPDFKit PDF SDK for Android 的软件包包括以下文件:
- "Libs" - 包含 "ComPDFKit.aar" 、 "ComPDFKit-UI.aar" 和 "ComPDFKit-Tools.aar" 的文件夹。 "ComPDFKit.aar" 是 PDF 核心 API。 "ComPDFKit-UI.aar" 是PDF视图。
- "PDFViewer" - 一个集成了以上所有功能的多功能 PDF 程序。
- "api_reference_android" - API 参考文档。
- "developer_guide_android.pdf" - 开发者指南。
- "release_notes.txt" - 发布信息。
- "legal.txt" - 法律和版权信息。
用 Kotlin 制作 Android PDF 阅读器
本节将分步说明,帮助您快速入门使用 ComPDFKit PDF SDK 在 Kotlin 中制作 Android 应用程序。通过以下步骤,您将创建一个可以显示指定 PDF 文档的简单应用程序:
第 1 步:创建新项目
- 使用 Android Studio 创建一个 Phone & Tablet 项目,这里我们创建一个 No Activity 项目。
第 2 步:添加 ComPDFKit PDF SDK
- 我们首先要做的是导入 ComPDFKit SDK。将 "ComPDFKit.aar" 和 "ComPDFKit-UI.aar" 复制到 app 的 "libs" 目录中。
- 将以下代码添加到 app 目录下的 "build.gradle" 文件中:
...
dependencies {
/*ComPDFKit SDK*/
implementation(fileTree('libs'))
...
}
...
- 将 ComPDFKit PDF SDK for Android 作为项目的依赖项添加进去。在 app 目录下的 "build.gradle" 文件中,将 "ComPDFKit.aar" 、 "ComPDFKit-UI.aar" 以及相关的支持库添加到
dependencies
中。为了简化操作,您可以按照以下方式更新依赖项:
arduino
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'
}
- 在
AndroidManifest.xml
中申请读写权限:
ini
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
注: 对于 Android 6.0 或更高版本的应用程序,请确保在运行时检查并请求外部存储的读写权限。
第 3 步:应用许可证密钥
您可以联系 ComPDFKit 团队获取试用许可证。在使用任何 ComPDFKit PDF SDK 类之前,必须执行的操作是设置许可证密钥。将此许可证添加到主模块的 AndroidManifest.xml 中:
第 4 步:显示PDF文档
- 将 PDF 文档复制到 Android 项目的 assets 目录中。例如,将文件 "Quick Start Guide.pdf" 导入到路径 src/main/assets 中。
- 在您的包下创建一个新的 Empty Activity ,并将该 Activity 的名称设置为 MainActivity。
Android Studio将自动生成一个名为 "MainActivity.java" 的 source 文件和一个名为 "activity_main.xml" 的 layout 文件。
Source文件:
Layout文件:
- 在 "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
:
kotlin
// 你的 MainActivity.kt 文件。
package com.compdfkit.pdfviewer
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.compdfkit.ui.reader.CPDFReaderView
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 从xml中获取CPDFReaderView
val readerView = findViewById<CPDFReaderView>(R.id.readerview)
// 创建CPDFReaderView的代码。
// CPDFDocument readerView = new CPDFReaderView(content);
}
}
- 打开文档。这是一个耗时的过程,因此需要在子线程中执行。文档成功打开后,会初始化渲染 PDF 的 UI:
kotlin
// 你的 MainActivity.java 文件。
... //导入。
class MainActivity : AppCompatActivity() {
// 将PDF文件从资源文件夹复制到缓存文件夹。
private fun copyPdfFromAssetsToCache(fileName: String) {
try {
val inputStream = assets.open(fileName)
val outputFile = File(cacheDir, fileName)
val outputStream = FileOutputStream(outputFile)
val buffer = ByteArray(1024)
var bytesRead: Int
while (inputStream.read(buffer).also { bytesRead = it } != -1) {
outputStream.write(buffer, 0, bytesRead)
}
inputStream.close()
outputStream.flush()
outputStream.close()
} catch (e: IOException) {
e.printStackTrace()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val readerView = findViewById<CPDFReaderView>(R.id.readerview)
// 创建CPDFReaderView的代码。
// CPDFDocument readerView = new CPDFReaderView(content);
// 创建文档对象。
val document = CPDFDocument(this)
Thread {
val fileName = "Quick Start Guide.pdf"
copyPdfFromAssetsToCache(fileName)
val file = File(cacheDir, fileName)
val filePath = file.absolutePath
// 打开文档。
var error = document.open(filePath)
if (error == CPDFDocument.PDFDocumentError.PDFDocumentErrorPassword) {
// 该文档已加密,需要密码才能打开。
error = document.open(filePath, "password")
}
if (error == CPDFDocument.PDFDocumentError.PDFDocumentErrorSuccess) {
// 文档已成功打开,并且可以对数据进行解析和操作。
} else {
// 无法打开PDF文件。具体错误可以参考API文件。
}
}.start()
}
}
- 设置
CPDFReaderView
的基本属性:
kotlin
// 你的 MainActivity.java 文件。
... // 导入。
public class MainActivity : AppCompatActivity() {
// 创建一个处理程序以在主线程上运行代码。
private var mainThreadHandler = Handler(Looper.getMainLooper());
...
if (error == CPDFDocument.PDFDocumentError.PDFDocumentErrorSuccess) {
// 文档已成功打开,并且可以对数据进行解析和操作。
mainThreadHandler.post {
// 设置UI的文档内容。
readerView.setPDFDocument(document);
}
} else {
// 无法打开PDF文件。具体错误可以参考API文件。
}
...
}
- 在这个阶段,您的代码会像下面展示的这样:
kotlin
// 你的 MainActivity.java 文件。
... // 导入。
class MainActivity : AppCompatActivity() {
// 创建一个处理程序,在主线程上运行代码。
private val mainThreadHandler = Handler(Looper.getMainLooper())
// 将PDF文件从资源文件夹复制到缓存文件夹。
private fun copyPdfFromAssetsToCache(fileName: String) {
try {
val inputStream = assets.open(fileName)
val outputFile = File(cacheDir, fileName)
val outputStream = FileOutputStream(outputFile)
val buffer = ByteArray(1024)
var bytesRead: Int
while (inputStream.read(buffer).also { bytesRead = it } != -1) {
outputStream.write(buffer, 0, bytesRead)
}
inputStream.close()
outputStream.flush()
outputStream.close()
} catch (e: IOException) {
e.printStackTrace()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val readerView = findViewById<CPDFReaderView>(R.id.readerview)
// 创建文档对象。
val document = CPDFDocument(this)
Thread {
val fileName = "Quick Start Guide.pdf"
copyPdfFromAssetsToCache(fileName)
val file = File(cacheDir, fileName)
val filePath = file.absolutePath
// 打开文档。
var error = document.open(filePath)
if (error == PDFDocumentError.PDFDocumentErrorPassword) {
// 该文档已加密,需要密码才能打开。
error = document.open(filePath, "password")
}
if (error == PDFDocumentError.PDFDocumentErrorSuccess) {
// 文档已成功打开,并且可以对数据进行解析和操作。
mainThreadHandler.post {
// 将文档设置为阅读器视图。
readerView.pdfDocument = 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>
- 运行应用程序。
现在,借助ComPDFKit的帮助,您获得了一个简单的应用程序来显示PDF文件。
问题排除
-
无法打开 PDF 文件
我们向您提供的许可证是与您的应用程序 ID 绑定的,因此请确保所获取的许可证与您的应用程序 ID 匹配。
-
其它问题
如果您在集成 ComPDFKit PDF SDK for Android 时遇到其他问题,请随时联系 ComPDFKit 团队。