如何用 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 团队。

相关推荐
一丝晨光4 小时前
Java、PHP、ASP、JSP、Kotlin、.NET、Go
java·kotlin·go·php·.net·jsp·asp
西柚与蓝莓13 小时前
任务【浦语提示词工程实践】
github
500了13 小时前
Kotlin基本知识
android·开发语言·kotlin
Good_Starry19 小时前
Git介绍--github/gitee/gitlab使用
git·gitee·gitlab·github
云端奇趣1 天前
探索 3 个有趣的 GitHub 学习资源库
经验分享·git·学习·github
运营黑客1 天前
发现一超级Prompt:让GPT-4o、Claude3.5性能再升级(附保姆级教程)
github
記億揺晃着的那天1 天前
Github优质项目推荐-第二期
github
Uncertainty!!1 天前
GitHub入门与实践
github
罗曼蒂克在消亡1 天前
github项目——gpt-pilot自动创建应用
gpt·github·github项目
篝火1 天前
MindSearch 部署到Github Codespace 和 Hugging Face Space
人工智能·python·github