/*** 导出PDF** @param view            要导出的view,如果view高度过高(超过一屏的高度),在改view外部套一层Scrollview即可*                        如果要导出列表类型View 比如Listview Recyclerview ,会遇见导出不全的情况,这里提前绘制view即可,方法如下*                        binding.mReDetail.measure(*                        View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),*                        View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)*                        );*                        binding.mReDetail.layout(0, 0, binding.mReDetail.getMeasuredWidth(), binding.mReDetail.getMeasuredHeight());* @param fileDir         导出文件夹* @param fileName        导出文件名称* @param fileNameReplace 文件名称存在时,是否需要替换* @return*/
public static boolean createPdfFromView(View view, String fileDir, String fileName, boolean fileNameReplace) {try {if (view == null || fileDir == null || fileName == null) {Log.e(TAG, "导出PDF" + "入参为空");return false;}String s = Environment.getExternalStorageDirectory() + "/" + fileDir;
//            String mSDCardFolderPath = context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) + "/" + fileDir;File dir = new File(s);//判断文件是否存在if (!dir.exists()) {//不存在则创建dir.mkdirs();}File pdfFile = new File(dir, fileName + ".PDF");if (!pdfFile.exists()) {pdfFile.createNewFile();} else {if (fileNameReplace) {String newFileName = getPDFNewFileName(pdfFile);pdfFile = new File(newFileName);pdfFile.createNewFile();}}PdfDocument document = new PdfDocument();//页对象PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(view.getWidth(),view.getHeight(),1).create();// 开始页PdfDocument.Page page = document.startPage(pageInfo);//绘制页Canvas canvas = page.getCanvas();view.draw(canvas);//结束页document.finishPage(page);//TODO  需要的话,增加更多页//导出文档FileOutputStream os = null;Log.i(TAG, "导出PDF" + " 开始导出,导出路径:" + pdfFile);os = new FileOutputStream(pdfFile);document.writeTo(os);os.close();Log.i(TAG, "导出PDF" + " 导出成功");document.close();return true;} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();return false;}}
private static String getPDFNewFileName(File file) {if (file.exists()) {String newPath = file.getPath().substring(0, file.getPath().length() - 4) + "(1).PDF";return getPDFNewFileName(new File(newPath));} else {return file.getPath();}
}

使用方式:

new Thread(new Runnable() {@Overridepublic void run() {boolean pdfFromView = SheetHelper.createPdfFromView(mWeb, "痕迹导出文件夹", "exportPDF", true);runOnUiThread(new Runnable() {@Overridepublic void run() {if (pdfFromView) {Toast.makeText(MainActivity2.this, "PDF 导出成功", Toast.LENGTH_SHORT).show();} else {Toast.makeText(MainActivity2.this, "PDF 导出失败", Toast.LENGTH_SHORT).show();}}});}
}).start();

注意:Android 6 以上要动态申请读写权限,Android 10 有私有文件夹限制。

excel 的导入导出:

Android 导入导出excel xls、xlsx_钟情短发姑娘的博客-CSDN博客

Android 导出PDF PdfDocument相关推荐

  1. Android实现PDF预览打印

    最近在做一个项目,需要用到android手机连接打印机进行打印的功能,目前在网上找到的教程介绍的都是蓝牙连接热敏打印机(pos机大小的打印机)和蓝牙打印机,如果连接日常所见到的网络打印机,进行打印,很 ...

  2. Android生成pdf文件之PdfDocument及踩过的坑

    有时候项目中可能会遇到这样的需求,如何将android中界面显示的内容生成pdf,这里讲述的是使用android原生的PdfDocument,并没有使用框架,其一是使用起来非常的简单,但是也会也到一些 ...

  3. 通过skia导出pdf 生成超链接 skia pdfdocument annotation pdflink

    如题 最近导出pdf ,想实现文本支持超链接跳转, 看了下skia的官网文档, 翻墙找各种资料 就是找不到关于怎么实现,毫无头绪咋办呢 我想了一下 1.粗略翻阅了下pdf的格式 了解了下基本的构成 啥 ...

  4. android手机生成pdf格式文件,Android根据pdf模板生成pdf文件

    1 public voidFillPdfTemplate(String id) {2 android.icu.text.SimpleDateFormat simpleDateFormat = 3 ne ...

  5. android程序更改pdf文件格式,Android根据pdf模板生成pdf文件

    1 public voidFillPdfTemplate(String id) {2 android.icu.text.SimpleDateFormat simpleDateFormat = 3 ne ...

  6. PdfSharp -- 根据PDF模板导出PDF

    PdfSharp:v1.50.5147,.NET Framework:v4.5.1 一.PDF模板 在开始前,我觉得有必要简单说一下PDF模板 制作PDF模板的工具有很多,随便找一款就行(我这里用迅捷 ...

  7. Android根据pdf模板生成pdf文件

    我们需要生成一些固定格式的pdf文件或者一些报表数据,那么我们可以用 iText包去做. 需要包含的jar包:iText-5.0.6.jar    iTextAsian.jar ,怎样jar包导入工程 ...

  8. android 生成pdf文件

    由于项目需要将获取的数据文件导出为pdf文件格式,以前也没用过,毫无头绪,只能网上参考意见,找来找去,根据自己的测试,总算基本实现了文件的导出. 主要还是用到iText来生成的.我用的是itext-5 ...

  9. spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具

    文章目录 前言 一.java 导出PDF 的几个工具 1. PDF Box 2. JasperReports/jFreeReport导出 报表 PDF 3. itextpdf 导出PDF(敲重点) 二 ...

  10. Java用ItextPdf7导出pdf

    欢迎各位来我的博客看看 背景 需要导出以下的pdf模板出来,之前做的都用freemarker来导出word,现在更换成了pdf,所以临时整了个 准备工作 maven依赖 <dependency& ...

最新文章

  1. (C++)归并排序的递归与非递归实现
  2. Kubernetes 1.8.4 手动安装教程-安装Dashboard(七)
  3. 基于OHCI的USB主机 —— USB设备常量定义
  4. python中的内置函数怎么学_python内部函数学习(九)
  5. JAVA15.JDK15.6 Record二次预览特性
  6. hash table(开放寻址法-线性探查实现的哈希表)
  7. 将Spring Bean注入非托管对象
  8. Linux加密框架 crypto 算法模板 HMAC模板举例
  9. SimpleITK使用深度学习识别肺癌CT DICOM数据集
  10. android之日志库logger
  11. excel辅助列巧妙运用完成工资条的制作
  12. matlab循环取出矩阵的某一行并标示上A1 A2 A3
  13. 网易云音乐,如何修改文件品质为320Kbps
  14. 我们试用了市面上几款微信自动化软件,哪家弱哪家强?
  15. 一些STM32核心板选择的稳压芯片
  16. AVFoundation音视频精准截取(九)
  17. 如何设置代理页面(Proxy)
  18. 新网的虚拟主机连接mysql_虚拟主机怎么导入数据库
  19. 2014小米,百度,pptv,去哪儿笔试题目回忆
  20. 索尼A7R IV和索尼A7 III的区别

热门文章

  1. 玩世不恭----进阶篇
  2. 动画专业考一级计算机选什么语种,想成为一名出色的动画设计师吗?去美国纽约视觉艺术学院读计算机动画与视觉效果本科专业准没错!...
  3. shell脚本 插队
  4. oracle的month函数的使用方法,oracle next_day,add_month函数
  5. Android7.0 PowerManagerService(4) Power按键流程
  6. Android WiFi 连接 (Connect,no Internet,带叉)
  7. 如何提高阅读源代码能力
  8. 2021年美容师(初级)免费试题及美容师(初级)考试试卷
  9. 为什么uzi排到古手羽就秒_Uzi排到古手羽秒退引热议?“网友发表看法,弹幕疑似给出答案”...
  10. 你所知道好玩有趣的 iOS URL schemes 有哪些?