Android 中实现 PDF 预览三种方式

打印 上一主题 下一主题

主题 871|帖子 871|积分 2613

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

PdfRenderer 是 Android 体系自带的一个用于渲染 PDF 文件的 API,它允许你将 PDF 页面渲染到 Bitmap 上,然后在 ImageView 中表现。
步骤:

添加权限:在 AndroidManifest.xml 中添加读取外部存储的权限(如果 PDF 文件存放在外部存储)。
  1. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
复制代码


  • 结构文件:创建一个简朴的结构文件 activity_main.xml,包含一个 ImageView 用于表现 PDF 页面。
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     android:layout_width="match_parent"
  3.     android:layout_height="match_parent">
  4.     <ImageView
  5.         android:id="@+id/pdfImageView"
  6.         android:layout_width="match_parent"
  7.         android:layout_height="match_parent" />
  8. </RelativeLayout>
复制代码


  • Java 代码实现:在 MainActivity.java 中实现 PDF 预览功能。
  1. import android.content.res.AssetManager;
  2. import android.graphics.Bitmap;
  3. import android.graphics.pdf.PdfRenderer;
  4. import android.os.Bundle;
  5. import android.os.ParcelFileDescriptor;
  6. import android.widget.ImageView;
  7. import androidx.appcompat.app.AppCompatActivity;
  8. import java.io.File;
  9. import java.io.FileOutputStream;
  10. import java.io.IOException;
  11. import java.io.InputStream;
  12. public class MainActivity extends AppCompatActivity {
  13.     private ImageView pdfImageView;
  14.     private PdfRenderer pdfRenderer;
  15.     private PdfRenderer.Page currentPage;
  16.     @Override
  17.     protected void onCreate(Bundle savedInstanceState) {
  18.         super.onCreate(savedInstanceState);
  19.         setContentView(R.layout.activity_main);
  20.         pdfImageView = findViewById(R.id.pdfImageView);
  21.         try {
  22.             openPdfFromAssets();
  23.         } catch (IOException e) {
  24.             e.printStackTrace();
  25.         }
  26.     }
  27.     private void openPdfFromAssets() throws IOException {
  28.         // 从 assets 文件夹中复制 PDF 文件到应用的缓存目录
  29.         AssetManager assetManager = getAssets();
  30.         InputStream inputStream = assetManager.open("example.pdf");
  31.         File outputFile = new File(getCacheDir(), "example.pdf");
  32.         FileOutputStream outputStream = new FileOutputStream(outputFile);
  33.         byte[] buffer = new byte[1024];
  34.         int length;
  35.         while ((length = inputStream.read(buffer)) > 0) {
  36.             outputStream.write(buffer, 0, length);
  37.         }
  38.         inputStream.close();
  39.         outputStream.close();
  40.         // 打开 PDF 文件
  41.         ParcelFileDescriptor fileDescriptor = ParcelFileDescriptor.open(outputFile, ParcelFileDescriptor.MODE_READ_ONLY);
  42.         pdfRenderer = new PdfRenderer(fileDescriptor);
  43.         // 显示第一页
  44.         showPage(0);
  45.     }
  46.     private void showPage(int index) {
  47.         if (currentPage != null) {
  48.             currentPage.close();
  49.         }
  50.         currentPage = pdfRenderer.openPage(index);
  51.         Bitmap bitmap = Bitmap.createBitmap(currentPage.getWidth(), currentPage.getHeight(), Bitmap.Config.ARGB_8888);
  52.         currentPage.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
  53.         pdfImageView.setImageBitmap(bitmap);
  54.     }
  55.     @Override
  56.     protected void onDestroy() {
  57.         super.onDestroy();
  58.         if (currentPage != null) {
  59.             currentPage.close();
  60.         }
  61.         if (pdfRenderer != null) {
  62.             pdfRenderer.close();
  63.         }
  64.     }
  65. }
复制代码
2. 使用第三方库 MuPDF

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



  • 添加依赖:在 build.gradle 文件中添加 MuPDF 库的依赖。
  1. implementation 'com.artifex.mupdf:mupdf-android:1.19.0'
复制代码


  • 结构文件:创建一个简朴的结构文件 activity_main.xml,包含一个 MuPDFReaderView 用于表现 PDF 文件。
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     android:layout_width="match_parent"
  3.     android:layout_height="match_parent">
  4.     <com.artifex.mupdf.fitz.android.AndroidMuPDFReaderView
  5.         android:id="@+id/pdfReaderView"
  6.         android:layout_width="match_parent"
  7.         android:layout_height="match_parent" />
  8. </RelativeLayout>
复制代码


  • Java 代码实现:在 MainActivity.java 中实现 PDF 预览功能。
  1. import android.os.Bundle;
  2. import android.os.Environment;
  3. import androidx.appcompat.app.AppCompatActivity;
  4. import com.artifex.mupdf.fitz.Document;
  5. import com.artifex.mupdf.fitz.MuPDFCore;
  6. import com.artifex.mupdf.fitz.android.AndroidMuPDFReaderView;
  7. import java.io.File;
  8. public class MainActivity extends AppCompatActivity {
  9.     private AndroidMuPDFReaderView pdfReaderView;
  10.     private MuPDFCore muPDFCore;
  11.     @Override
  12.     protected void onCreate(Bundle savedInstanceState) {
  13.         super.onCreate(savedInstanceState);
  14.         setContentView(R.layout.activity_main);
  15.         pdfReaderView = findViewById(R.id.pdfReaderView);
  16.         try {
  17.             // 打开 PDF 文件
  18.             File pdfFile = new File(Environment.getExternalStorageDirectory(), "example.pdf");
  19.             muPDFCore = new MuPDFCore(this, pdfFile.getAbsolutePath());
  20.             // 设置 PDF 阅读器的核心
  21.             pdfReaderView.setCore(muPDFCore);
  22.         } catch (Exception e) {
  23.             e.printStackTrace();
  24.         }
  25.     }
  26.     @Override
  27.     protected void onDestroy() {
  28.         super.onDestroy();
  29.         if (muPDFCore != null) {
  30.             muPDFCore.destroy();
  31.         }
  32.     }
  33. }
复制代码
3. 使用第三方库 PdfiumAndroid

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



  • 添加依赖:在 build.gradle 文件中添加 PdfiumAndroid 库的依赖。
  1. implementation 'com.github.barteksc:android-pdf-viewer:3.2.0-beta.1'
复制代码


  • 结构文件:创建一个简朴的结构文件 activity_main.xml,包含一个 PDFView 用于表现 PDF 文件。
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     android:layout_width="match_parent"
  3.     android:layout_height="match_parent">
  4.     <com.github.barteksc.pdfviewer.PDFView
  5.         android:id="@+id/pdfView"
  6.         android:layout_width="match_parent"
  7.         android:layout_height="match_parent" />
  8. </RelativeLayout>
复制代码


  • Java 代码实现:在 MainActivity.java 中实现 PDF 预览功能。
  1. import android.os.Bundle;
  2. import android.os.Environment;
  3. import androidx.appcompat.app.AppCompatActivity;
  4. import com.github.barteksc.pdfviewer.PDFView;
  5. import java.io.File;
  6. public class MainActivity extends AppCompatActivity {
  7.     private PDFView pdfView;
  8.     @Override
  9.     protected void onCreate(Bundle savedInstanceState) {
  10.         super.onCreate(savedInstanceState);
  11.         setContentView(R.layout.activity_main);
  12.         pdfView = findViewById(R.id.pdfView);
  13.         // 打开 PDF 文件
  14.         File pdfFile = new File(Environment.getExternalStorageDirectory(), "example.pdf");
  15.         pdfView.fromFile(pdfFile)
  16.                .defaultPage(0)
  17.                .enableSwipe(true)
  18.                .swipeHorizontal(false)
  19.                .load();
  20.     }
  21. }
复制代码
以上三种方法都可以在 Android 应用中实现 PDF 预览功能

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

知者何南

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表