在当今移动优先的世界中,创建 Android 应用程序是企业和开发人员的必备技能。而且,随着处理 PDF 文档的需求不断增加,使用功能强大的 PDF SDK ComPDFKit 构建 Android PDF 阅读器和编辑器,能使您的最终用户轻松查看和编辑 PDF。
在本博客中,我们将首先探索集成 ComPDFKit PDF SDK 的必要步骤,并使用 ComPDFKit 构建一个 Android PDF 阅读器。
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 语言功能才能构建。
minSdkVersion
为 19
或更高 compileSdkVersion
为 30
或更高 targetSdkVersion
为 30
或更高 ComPDFKit PDF SDK for Android的软件包包括以下文件:
本节将帮助您快速开始使用 ComPDFKit PDF SDK,并通过分步说明使用 Java 语言开发 Android 应用程序。通过以下步骤,您将获得一个简单的应用程序,可以显示指定PDF文件的内容。
...
dependencies {
/*ComPDFKit SDK*/
implementation(fileTree('libs'))
...
}
...
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'
}
AndroidManifest.xml
中申请读写权限:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
注意: 对于面向Android 6.0或更高版本的应用程序,请确保在运行时检查并请求外部存储的读写权限。
将许可证添加到主模块的AndroidManifest.xml中:
<meta-data
android:name="compdfkit_license"
android:value="{your ComPDFKit license}" />
<meta-data
android:name="compdfkit_message"
android:value="{your ComPDFKit message}" />
Android Studio将自动生成一个名为MainActivity.java的源文件和一个名为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);
}
}
// 你的 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();
}
}
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文件以了解特定错误
}
...
}
// 你的 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>
现在,借助ComPDFKit的帮助,您获得了一个简单的应用程序来显示PDF文件。
我们向您提供的许可证是与您的应用程序ID绑定的,因此请确保所获取的许可证与您的应用程序ID匹配。
如果您在集成 ComPDFKit PDF SDK for Android 时遇到其他问题,请随时联系 ComPDFKit 团队。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。