Android 中实现 PDF 预览三种方式

server/2025/2/8 12:06:30/

目录

    • 1. 使用第三方库 PdfRenderer(适用于 Android 5.0 及以上)
  • 步骤:
    • 2. 使用第三方库 MuPDF
    • 步骤:
    • 3. 使用第三方库 PdfiumAndroid
    • 步骤:

1. 使用第三方库 PdfRenderer(适用于 Android 5.0 及以上)

PdfRenderer 是 Android 系统自带的一个用于渲染 PDF 文件的 API,它允许你将 PDF 页面渲染到 Bitmap 上,然后在 ImageView 中显示。

步骤:

添加权限:在 AndroidManifest.xml 中添加读取外部存储的权限(如果 PDF 文件存放在外部存储)。

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  • 布局文件:创建一个简单的布局文件 activity_main.xml,包含一个 ImageView 用于显示 PDF 页面。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:id="@+id/pdfImageView"android:layout_width="match_parent"android:layout_height="match_parent" />
</RelativeLayout>
  • Java 代码实现:在 MainActivity.java 中实现 PDF 预览功能。
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.pdf.PdfRenderer;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;public class MainActivity extends AppCompatActivity {private ImageView pdfImageView;private PdfRenderer pdfRenderer;private PdfRenderer.Page currentPage;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);pdfImageView = findViewById(R.id.pdfImageView);try {openPdfFromAssets();} catch (IOException e) {e.printStackTrace();}}private void openPdfFromAssets() throws IOException {// 从 assets 文件夹中复制 PDF 文件到应用的缓存目录AssetManager assetManager = getAssets();InputStream inputStream = assetManager.open("example.pdf");File outputFile = new File(getCacheDir(), "example.pdf");FileOutputStream outputStream = new FileOutputStream(outputFile);byte[] buffer = new byte[1024];int length;while ((length = inputStream.read(buffer)) > 0) {outputStream.write(buffer, 0, length);}inputStream.close();outputStream.close();// 打开 PDF 文件ParcelFileDescriptor fileDescriptor = ParcelFileDescriptor.open(outputFile, ParcelFileDescriptor.MODE_READ_ONLY);pdfRenderer = new PdfRenderer(fileDescriptor);// 显示第一页showPage(0);}private void showPage(int index) {if (currentPage != null) {currentPage.close();}currentPage = pdfRenderer.openPage(index);Bitmap bitmap = Bitmap.createBitmap(currentPage.getWidth(), currentPage.getHeight(), Bitmap.Config.ARGB_8888);currentPage.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);pdfImageView.setImageBitmap(bitmap);}@Overrideprotected void onDestroy() {super.onDestroy();if (currentPage != null) {currentPage.close();}if (pdfRenderer != null) {pdfRenderer.close();}}
}

2. 使用第三方库 MuPDF

MuPDF 是一个轻量级的 PDF 查看器库,支持多种文档格式,并且提供了丰富的功能。

步骤:

  • 添加依赖:在 build.gradle 文件中添加 MuPDF 库的依赖。
implementation 'com.artifex.mupdf:mupdf-android:1.19.0'
  • 布局文件:创建一个简单的布局文件 activity_main.xml,包含一个 MuPDFReaderView 用于显示 PDF 文件。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><com.artifex.mupdf.fitz.android.AndroidMuPDFReaderViewandroid:id="@+id/pdfReaderView"android:layout_width="match_parent"android:layout_height="match_parent" />
</RelativeLayout>
  • Java 代码实现:在 MainActivity.java 中实现 PDF 预览功能。
import android.os.Bundle;
import android.os.Environment;
import androidx.appcompat.app.AppCompatActivity;
import com.artifex.mupdf.fitz.Document;
import com.artifex.mupdf.fitz.MuPDFCore;
import com.artifex.mupdf.fitz.android.AndroidMuPDFReaderView;
import java.io.File;public class MainActivity extends AppCompatActivity {private AndroidMuPDFReaderView pdfReaderView;private MuPDFCore muPDFCore;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);pdfReaderView = findViewById(R.id.pdfReaderView);try {// 打开 PDF 文件File pdfFile = new File(Environment.getExternalStorageDirectory(), "example.pdf");muPDFCore = new MuPDFCore(this, pdfFile.getAbsolutePath());// 设置 PDF 阅读器的核心pdfReaderView.setCore(muPDFCore);} catch (Exception e) {e.printStackTrace();}}@Overrideprotected void onDestroy() {super.onDestroy();if (muPDFCore != null) {muPDFCore.destroy();}}
}

3. 使用第三方库 PdfiumAndroid

PdfiumAndroid 是一个基于 Pdfium 库的 Android 封装,用于在 Android 应用中渲染 PDF 文件。

步骤:

  • 添加依赖:在 build.gradle 文件中添加 PdfiumAndroid 库的依赖。
implementation 'com.github.barteksc:android-pdf-viewer:3.2.0-beta.1'
  • 布局文件:创建一个简单的布局文件 activity_main.xml,包含一个 PDFView 用于显示 PDF 文件。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><com.github.barteksc.pdfviewer.PDFViewandroid:id="@+id/pdfView"android:layout_width="match_parent"android:layout_height="match_parent" />
</RelativeLayout>
  • Java 代码实现:在 MainActivity.java 中实现 PDF 预览功能。
import android.os.Bundle;
import android.os.Environment;
import androidx.appcompat.app.AppCompatActivity;
import com.github.barteksc.pdfviewer.PDFView;
import java.io.File;public class MainActivity extends AppCompatActivity {private PDFView pdfView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);pdfView = findViewById(R.id.pdfView);// 打开 PDF 文件File pdfFile = new File(Environment.getExternalStorageDirectory(), "example.pdf");pdfView.fromFile(pdfFile).defaultPage(0).enableSwipe(true).swipeHorizontal(false).load();}
}

以上三种方法都可以在 Android 应用中实现 PDF 预览功能


http://www.ppmy.cn/server/165947.html

相关文章

996引擎-怪物:Lua 刷怪+清怪+自动拾取

996引擎-怪物:Lua 刷怪+清怪+自动拾取 文件位置NPC脚本参考资料文件位置 文件位置服务端D:\996M2-lua\MirServer-lua\Mir200客户端D:\996M2-lua\996M2_debug\devNPC脚本 服务端\Mir200\Envir\Market_Def\test\test爆率-3.lua -- NPC入口函数 function main(player)-- 获取玩…

【dotnet】安全编码规范

本文将从代码安全、数据安全、身份安全、通信安全四个维度&#xff0c;总结15个关键设计原则&#xff0c;并附典型场景的解决方案与代码示例&#xff0c;助你规避90%的安全风险&#xff1a; 一、代码安全&#xff1a;构建安全防线 1. 输入验证&#xff1a;第一道屏障 漏洞场景…

C++字符串相关内容

字符串 字符串&#xff0c;本质上是一个接一个字符的一组字符。字母、数字、符号等。 const char* 字符串名 字符后面会有一个空终止符&#xff0c;为0。 字符串从指针的内存地址开始&#xff0c;然后继续下去&#xff0c;直到它碰到0&#xff0c;然后意识到字符串终止了。 …

零基础Vue入门6——Vue router

本节重点&#xff1a; 路由定义路由跳转 前面几节学习的都是单页面的功能&#xff08;都在专栏里面https://blog.csdn.net/zhanggongzichu/category_12883540.html&#xff09;&#xff0c;涉及到项目研发都是有很多页面的&#xff0c;这里就需要用到路由&#xff08;vue route…

【Docker】 Manifest与Buildx:多架构镜像管理的解析与实践

一.manifest的概述 manifest包含了镜像的层、标签、作者等关键信息&#xff0c;并支持多架构镜像的管理。通过Manifest List&#xff0c;开发者能够为同一应用提供适用于不同架构的镜像&#xff0c;从而确保其在各类平台上的兼容性。实际上是把不同操作系统和架构打包成独立的一…

组学数据分析实操系列 | (二)一键实现MaxQuant非标定量蛋白质组学搜库结果的生信分析

前言 上一篇我们介绍了如何通过MaxQuant软件对非标定量蛋白质组学原始数据进行分析得到搜库结果&#xff0c;下一步该怎么做呢&#xff1f;今天和大家分享一个非常实用的工具——LFQ-Analyst。该工具由蒙纳士大学的组学和生信平台开发&#xff0c;是一个交互式Web应用程序&…

I.MX6ULL 中断介绍下

GIC重点寄存器 1.中断分发器寄存器&#xff08;Distributor register &#xff09; a.Distributor Control Register(中断分发控制寄存器), GICD_CTLR Purpose Enables the forwarding of pending interrupts from the Distributor to the CPU interfaces 使能将挂起的中断从…

高端入门:Ollama 本地高效部署DeepSeek模型深度搜索解决方案

目录 一、Ollama 介绍 二、Ollama下载 2.1 官网下载 2.2 GitHub下载 三、模型库 四、Ollmal 使用 4.1 模型运行&#xff08;下载&#xff09; 4.2 模型提问 五、Ollama 常用命令 相关推荐 一、Ollama 介绍 Ollama是一个专为在本地机器上便捷部署和运行大型语言模型&…