如何用 Kotlin 创建 Android PDF 查看器或编辑器

在当今以移动端为先的世界中,为企业和开发者创建一个安卓应用程序是必不可少的。随着对处理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)

  • 项目规格

    • minSdkVersion19或更高
    • compileSdkVersion30 或更高
    • targetSdkVersion30 或更高
    • 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 步:创建新项目

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

第 2 步:添加 ComPDFKit PDF SDK

  1. 我们首先要做的是导入 ComPDFKit SDK。将 "ComPDFKit.aar""ComPDFKit-UI.aar" 复制到 app"libs" 目录中。
  1. 将以下代码添加到 app 目录下的 "build.gradle" 文件中:
... 复制代码
dependencies {
    /*ComPDFKit SDK*/
    implementation(fileTree('libs'))
    ...
}
...
  1. 将 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'
}
  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文档

  1. 将 PDF 文档复制到 Android 项目的 assets 目录中。例如,将文件 "Quick Start Guide.pdf" 导入到路径 src/main/assets 中。
  1. 在您的包下创建一个新的 Empty Activity ,并将该 Activity 的名称设置为 MainActivity

Android Studio将自动生成一个名为 "MainActivity.java" 的 source 文件和一个名为 "activity_main.xml" 的 layout 文件。

Source文件:

Layout文件:

  1. "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);
    }
}
  1. 打开文档。这是一个耗时的过程,因此需要在子线程中执行。文档成功打开后,会初始化渲染 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()
  }
}
  1. 设置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文件。
    }
    ...
}
  1. 在这个阶段,您的代码会像下面展示的这样:
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>
  1. 运行应用程序。

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

问题排除

  1. 无法打开 PDF 文件

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

  2. 其它问题

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

相关推荐
_Shirley3 小时前
鸿蒙设置app更新跳转华为市场
android·华为·kotlin·harmonyos·鸿蒙
AI理性派思考者4 小时前
【保姆教程】手把手教你在Linux系统搭建早期alpha项目cysic的验证者&证明者
后端·github·gpu
wy02_8 小时前
Linux下载RabbitMQ,并解决Github拒绝访问443的问题
linux·rabbitmq·github
Domain-zhuo9 小时前
Git常用命令
前端·git·gitee·github·gitea·gitcode
aPurpleBerry9 小时前
解决 fatal: detected dubious ownership in repository at ‘XXXX‘ 问题
github
vvw&13 小时前
如何在 Ubuntu 22.04 上安装 Graylog 开源日志管理平台
linux·运维·服务器·ubuntu·开源·github·graylog
小白学大数据14 小时前
高级技术文章:使用 Kotlin 和 Unirest 构建高效的 Facebook 图像爬虫
爬虫·数据分析·kotlin
HelloGitHub14 小时前
跟着 8.6k Star 的开源数据库,搞 RAG!
开源·github
guitarjoy21 小时前
Kotlin - 协程结构化并发Structured Concurrency
kotlin·协程·coroutinescope·结构化同步
sdaxue.com1 天前
帝国CMS:如何去掉帝国CMS登录界面的认证码登录
数据库·github·网站·帝国cms·认证码