当前位置: 首页 > news >正文

Android PDF 操作 - AndroidPdfViewer 弹出框显示 PDF

一、弹出框显示 PDF

1、简单显示
(1)Dialog
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:orientation="vertical"android:paddingStart="20dp"android:paddingTop="40dp"android:paddingEnd="20dp"android:paddingBottom="40dp"><com.github.barteksc.pdfviewer.PDFViewandroid:id="@+id/pdfv_container"android:layout_width="300dp"android:layout_height="300dp" />
</LinearLayout>
(2)Test
File pdfFile = new File(getFilesDir(), "test.pdf");InputStream inputStream;
try {inputStream = new FileInputStream(pdfFile);
} catch (FileNotFoundException e) {e.printStackTrace();Toast.makeText(this, "PDF 文件不存在", Toast.LENGTH_SHORT).show();return;
}Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.dialog_simple_show_pdf);PDFView pdfvContainer = dialog.findViewById(R.id.pdfv_container);pdfvContainer.fromStream(inputStream).enableSwipe(true) // 启用手势滑动翻页.swipeHorizontal(false) // 设置滑动方向为垂直滑动.enableDoubletap(true) // 启用双击缩放.defaultPage(0) // 设置初始显示的页面.load();dialog.show();
2、标准显示
(1)Dialog
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:orientation="vertical"android:paddingStart="20dp"android:paddingTop="40dp"android:paddingEnd="20dp"android:paddingBottom="40dp"><TextViewandroid:id="@+id/tv_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="title"android:textSize="25dp" /><TextViewandroid:id="@+id/tv_message"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:gravity="center"android:text="message"android:textSize="20dp" /><com.github.barteksc.pdfviewer.PDFViewandroid:id="@+id/pdfv_container"android:layout_width="300dp"android:layout_height="300dp"android:layout_marginTop="20dp" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"><android.widget.Buttonandroid:id="@+id/btn_confirm"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginRight="5dp"android:layout_weight="1"android:text="confirm"android:textColor="@color/black" /></LinearLayout>
</LinearLayout>
(2)Test
File pdfFile = new File(getFilesDir(), "test.pdf");InputStream inputStream;
try {inputStream = new FileInputStream(pdfFile);
} catch (FileNotFoundException e) {e.printStackTrace();Toast.makeText(this, "PDF 文件不存在", Toast.LENGTH_SHORT).show();return;
}Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.dialog_show_pdf);
dialog.setCancelable(false);TextView tvTitle = dialog.findViewById(R.id.tv_title);
TextView tvMessage = dialog.findViewById(R.id.tv_message);
PDFView pdfvContainer = dialog.findViewById(R.id.pdfv_container);
Button btnConfirm = dialog.findViewById(R.id.btn_confirm);tvTitle.setText("系统提示");
tvMessage.setText("请详细阅读文档内容");pdfvContainer.fromStream(inputStream).enableSwipe(true) // 启用手势滑动翻页.swipeHorizontal(false) // 设置滑动方向为垂直滑动.enableDoubletap(true) // 启用双击缩放.defaultPage(0) // 设置初始显示的页面.load();btnConfirm.setText("确定");
btnConfirm.setOnClickListener(v -> {dialog.dismiss();
});dialog.show();

二、弹出框显示 PDF 封装

1、简单显示
(1)Dialog
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:orientation="vertical"android:paddingStart="20dp"android:paddingTop="40dp"android:paddingEnd="20dp"android:paddingBottom="40dp"><com.github.barteksc.pdfviewer.PDFViewandroid:id="@+id/pdfv_container"android:layout_width="300dp"android:layout_height="300dp" />
</LinearLayout>
public static Dialog createSimpleShowPdfDialog(Context context, byte[] data) {Dialog dialog = new Dialog(context);dialog.setContentView(R.layout.dialog_simple_show_pdf);PDFView pdfvContainer = dialog.findViewById(R.id.pdfv_container);pdfvContainer.fromBytes(data).enableSwipe(true) // 启用手势滑动翻页.swipeHorizontal(false) // 设置滑动方向为垂直滑动.enableDoubletap(true) // 启用双击缩放.defaultPage(0) // 设置初始显示的页面.load();return dialog;
}
(2)Test
File pdfFile = new File(getFilesDir(), "test.pdf");InputStream inputStream;
try {inputStream = new FileInputStream(pdfFile);
} catch (FileNotFoundException e) {e.printStackTrace();Toast.makeText(this, "PDF 文件不存在", Toast.LENGTH_SHORT).show();return;
}ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[1024];
try {while ((nRead = inputStream.read(data, 0, data.length)) != -1) {buffer.write(data, 0, nRead);}
} catch (IOException e) {e.printStackTrace();Toast.makeText(this, "PDF 文件读取失败", Toast.LENGTH_SHORT).show();return;
}byte[] bytes = buffer.toByteArray();Dialog dialog = DialogManager.createSimpleShowPdfDialog(this, bytes);dialog.show();
2、标准显示
(1)Dialog
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:orientation="vertical"android:paddingStart="20dp"android:paddingTop="40dp"android:paddingEnd="20dp"android:paddingBottom="40dp"><TextViewandroid:id="@+id/tv_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="title"android:textSize="25dp" /><TextViewandroid:id="@+id/tv_message"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:gravity="center"android:text="message"android:textSize="20dp" /><com.github.barteksc.pdfviewer.PDFViewandroid:id="@+id/pdfv_container"android:layout_width="300dp"android:layout_height="300dp"android:layout_marginTop="20dp" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"><android.widget.Buttonandroid:id="@+id/btn_confirm"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginRight="5dp"android:layout_weight="1"android:text="confirm"android:textColor="@color/black" /></LinearLayout>
</LinearLayout>
public interface ConfirmObserver {void onConfirm();
}
public static Dialog createShowPdfDialog(Context context,String title,String message,byte[] data,String confirmText, ConfirmObserver confirmObserver) {Dialog dialog = new Dialog(context);dialog.setContentView(R.layout.dialog_show_pdf);dialog.setCancelable(false);TextView tvTitle = dialog.findViewById(R.id.tv_title);TextView tvMessage = dialog.findViewById(R.id.tv_message);PDFView pdfvContainer = dialog.findViewById(R.id.pdfv_container);Button btnConfirm = dialog.findViewById(R.id.btn_confirm);tvTitle.setText(title);tvMessage.setText(message);pdfvContainer.fromBytes(data).enableSwipe(true) // 启用手势滑动翻页.swipeHorizontal(false) // 设置滑动方向为垂直滑动.enableDoubletap(true) // 启用双击缩放.defaultPage(0) // 设置初始显示的页面.load();btnConfirm.setText(confirmText);btnConfirm.setOnClickListener(v -> {if (confirmObserver != null) {confirmObserver.onConfirm();}dialog.dismiss();});return dialog;
}
(2)Test
Button btnOpenPdf = findViewById(R.id.btn_open_pdf);btnOpenPdf.setOnClickListener(view -> {File pdfFile = new File(getFilesDir(), "test.pdf");InputStream inputStream;try {inputStream = new FileInputStream(pdfFile);} catch (FileNotFoundException e) {e.printStackTrace();Toast.makeText(this, "PDF 文件不存在", Toast.LENGTH_SHORT).show();return;}ByteArrayOutputStream buffer = new ByteArrayOutputStream();int nRead;byte[] data = new byte[1024];try {while ((nRead = inputStream.read(data, 0, data.length)) != -1) {buffer.write(data, 0, nRead);}} catch (IOException e) {e.printStackTrace();Toast.makeText(this, "PDF 文件读取失败", Toast.LENGTH_SHORT).show();return;}byte[] bytes = buffer.toByteArray();Dialog dialog = DialogManager.createShowPdfDialog(this,"系统提示","请详细阅读文档内容",bytes,"确定",null);dialog.show();
});
http://www.dtcms.com/a/548586.html

相关文章:

  • 做新零售这些注册网站和找货源6内蒙古网站建设流程
  • 【Linux篇】进程间通信 - 匿名管道
  • Java Stream Collectors主要 API 详解
  • Mac如何安装mysql和完全卸载mysql
  • 【Docker】【03.使用docker搭建ubuntu20.04 Qt5.12 开发环境】
  • uni-app 上架 iOS 应用全流程 从云打包到开心上架(Appuploader)免 Mac 上传发布指南
  • 深圳公司网站设计公司wordpress春菜
  • 广东省省考备考(第一百三十七天10.30)——资料分析、数量关系(强化训练)
  • 【SpringMVC】SpringMVC 小案例:加法计算器初步理解前后端接口交互与数据处理
  • 微软全球服务中断:Azure、365、Xbox及Minecraft等多平台受影响
  • 【QT常用技术讲解】可拖拽文件的Widget--QListWidget
  • 手机网站标准家政公司怎么注册
  • 上海网站建设500元wordpress在线支付表单
  • 厦门市小学生信息学竞赛(C++)初赛总复习(第二章 算法知识与数据结构 -第二节 数据结构 第三节 栈)
  • 【OD刷题笔记】- 5G网络建设
  • 基于毫米波雷达的汽车变道辅助系统(LCA)原理与实现
  • 赋能智慧货运:视频汇聚平台EasyCVR打造货运汽车安全互联网视频监控与管理方案
  • 数图科技赋能长春欧亚:构建零售 “智慧大脑”,让陈列调整、决策响应快人一步
  • MongoDB 正则表达式
  • 【超级详细】正点原子RK3588安装和编译SDK
  • AI 图像生成技术发展时间脉络:从 GAN 到多模态大模型的知名模型概略解析
  • “一网通办”查询响应优化:金仓索引如何支撑政务高效服务
  • 微信小程序(H5)上传文件到阿里云 OSS(使用 STS 临时凭证)
  • 建设局网站打不开是什么原因先做网站先备案
  • Bootstrap 按钮
  • Qt 外观之Qt样式表(QSS)
  • Adobe Lightroom安卓版(手机调色软件)绿色版
  • 服务器 Web 安全:Nginx 配置 X-Frame-Options 与 CSP 头,防御 XSS 与点击劫持
  • 嵌入式AI Arm_linux_第一个Demo_让IPU跑起来
  • Solon 项目升级 JDK 25