在写这篇文章的时候真的是一把鼻涕一把泪,遇到了几个坑,搞了一天半才搞出来,资质愚钝了,网上查找了资料,发现基本上没有pdf转图片相关的,难道都没这个需求么,接下来我先描述下我遇到的问题和现象吧

首先我通过PdfRenderer将pdf文件转成bitmap集合,因为pdf文件可能有几页,所以需要集合装起来

然后将bitmap集合里面的每个bitmap都转化成png或者jpg存储到本地,问题来了

我将每个bitmap用imageview显示是可以的,然后去本地打开图片发现黑色,这个问题卡死我了,先预留着,下面再讲述,上代码逻辑了

  • pdf转bitmap集合
    private ArrayList<Bitmap> pdfToBitmap(File pdfFile) {ArrayList<Bitmap> bitmaps = new ArrayList<>();try {PdfRenderer renderer = new PdfRenderer(ParcelFileDescriptor.open(pdfFile, ParcelFileDescriptor.MODE_READ_ONLY));Bitmap bitmap;final int pageCount = renderer.getPageCount();for (int i = 0; i < pageCount; i++) {PdfRenderer.Page page = renderer.openPage(i);int width = getResources().getDisplayMetrics().densityDpi / 72 * page.getWidth();int height = getResources().getDisplayMetrics().densityDpi / 72 * page.getHeight();bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);//todo 以下三行处理图片存储到本地出现黑屏的问题,这个涉及到背景问题Canvas canvas = new Canvas(bitmap);canvas.drawColor(Color.WHITE);canvas.drawBitmap(bitmap, 0, 0, null);Rect r = new Rect(0, 0, width, height);page.render(bitmap, r, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);bitmaps.add(bitmap);// close the pagepage.close();}// close the rendererrenderer.close();} catch (Exception ex) {ex.printStackTrace();}return bitmaps;}

通过这个方法就可以得到bitmaps集合

然后将bitmaps集合里的每个bitmap都存储到本地

    /*** 将图片保存到文件*/public void saveImageToFile() {ArrayList<Bitmap> bitmaps = pdfToBitmap(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/1/3.pdf"));String savePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/3/";for (int i = 0; i < bitmaps.size(); i++) {try {File file = new File(savePath);if (!file.exists()) {file.mkdirs();}String localFile = file.getAbsolutePath() + "/" + i + ".png";Log.i("test_sign", "图片全路径localFile = " + localFile);File f = new File(localFile);FileOutputStream fos = new FileOutputStream(f);bitmaps.get(i).compress(Bitmap.CompressFormat.PNG, 100, fos);fos.flush();fos.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

这样你就能在本地看到图片了,先将pdf转化得到bitmap,再将bitmap转成图片,这期间就有一个问题,就是会出现我上面描述的那种情况,不过我贴出来的代码里面已经处理了,就是TODO那里,有个原理分析,我分析也是基于个人理解,可能有误,如果有问题也希望各位大佬指教下

出现黑色原理分析:有个原理在里面,bitmap转png的时候,他本身有个空白背景是黑色的,然后当你用imageview去显示的时候,imageview会直接把图片背景变成白色,所以你能看得到,但是当你直接存储到本地的时候,那么背景为黑色的时候就会显现出来,所以看到的是黑色,所以我这个时候通过画布canvas把背景强制为白色,图片就有了

Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(bitmap, 0, 0, null);

看到网上基本都没有pdf转化相关的,希望能帮到大家吧

pdf文件转bitmap再转图片相关推荐

  1. python使用fpdf生成发票格式的pdf文件包含:文字、图片logo、表格、条形码等;

    python使用fpdf生成发票格式的pdf文件包含:文字.图片logo.表格.条形码等: pip install fpdf #python使用fpdf生成发票格式的pdf文件包含:文字.图片logo ...

  2. java+icepdf+下载_Java使用icepdf将pdf文件按页转成图片

    本文实例为大家分享了Java使用icepdf将pdf文件按页转成图片的具体代码,供大家参考,具体内容如下 Maven icepdf包,这里过滤掉jai-core org.icepdf.os icepd ...

  3. ​PDF文件怎么转换成JPG图片?分享两种简单的转换方法

    PDF文件怎么转换成JPG格式的图片呢?大家在使用PDF文件的过程中,肯定会遇到过一些内容非常多的文件,而我们需要使用到的地方可能只有几页的内容,大家不管是在使用过程中还是在传输文件的过程中,都会因为 ...

  4. 通过itextpdf操作PDF,动态向PDF文件最后一页添加图片

    通过itextpdf操作PDF,向PDF文件最后一页添加图片(缩放图片并判断最后一页是否能放下图片) 本人第一篇博客,哈哈!第一次接触itextpdf,想实现将图片向PDF尾部追加(判断原页面使用情况 ...

  5. 如何将PDF文件转换成清晰的图片

    将PDF文件转换成图片文件的时候,有些人就是直接用截图的方法,截图虽然简单,但是所截取的图片往往没有原来文件那么清楚,并且对多个页面操作时也会很慢.那如何将PDF文件转换成清晰的图片呢? 打开转换器选 ...

  6. 将PDF文件转换为高质量的图片:免费的在线PDF转换器

    在现代社会中,PDF文档是非常常见的一种文档格式.但是,在某些情况下,我们需要将PDF文件转换为高质量的图片,以方便分享和展示.本文将介绍几款免费的在线PDF转换器,帮助您将PDF文件快速.简单地转换 ...

  7. 使用CAJViewer截取PDF文件里的文字和图片

    在阅读PDF文件或caj文件时,常常需要截取或摘录里面的部分文字和图片,这时就可以使用CAJViewer. 1.下载并安装CAJViewer软件 地址:http://cajviewer.cnki.ne ...

  8. PDF文件如何转换成转图片?分享两种实现方法

    PDF文件通常是用于在不同计算机.操作系统和应用程序之间共享文档的标准格式.但有时,您可能需要将PDF文件转换为图像文件以进行其他用途.PDF文件如何转换成转图片?本文将介绍两种将PDF文件转换为图像 ...

  9. Android 将PDF文件转Bitmap,并将Bitmap以图片的方式保存到相册

    转自:https://blog.csdn.net/chaogelilun/article/details/85095821 背景: 公司项目要求用户可以在手机端查看发票并将发票已图片的形式保存到相册, ...

最新文章

  1. 三栏布局 五中解决方式
  2. Entity Framework技巧系列之十一 - Tip 42 - 45
  3. lambda表达式pythonlist_Python 使用Lambda对list(列表)中指定格式字符串元素排序方法...
  4. spring boot微服务通用部署启动脚本
  5. linux 进入一个中文乱码的目录的方法
  6. java快捷键查看目录,java取得快捷方式指向的路径
  7. 打开d盘由于这台计算机的限制,又出现限制我想打开D盘、E盘,就是打不开,电脑提示:限制本 爱问知识人...
  8. HTTP响应头信息 Content-Type
  9. 大咖来信 | 轮值董事长徐直军,复盘华为AI战略出台始末
  10. 作为深度学习最强框架的TensorFlow如何进行时序预测!(转)
  11. [MFC] 向文本编辑框写入数据与从其中读取数据
  12. 网关支付、银联代扣通道、快捷支付、银行卡支付等网上常见支付方式接口说明...
  13. pyqt5优化美化界面代码
  14. mac如何查看ssd寿命_固态硬盘ssd写入量剩余读写次数怎么查
  15. 【蔚蓝航线】服务端+客户端+视频手工架设教程
  16. [渝粤教育] 中国地质大学 大学语文 复习题
  17. 语音信号短时域分析之短时平均能量(四)
  18. 项目管理进阶--软件开发项目中的团队组成
  19. Java实现第九届蓝桥杯乘积为零
  20. 宝峰uv5r保存信道频率_【对讲机的那点事】宝峰UV-5R对讲机上中继台的信道存储设置方法...

热门文章

  1. va_list、va_start和va_end的用法
  2. 前端开发APP应该采取什么框架?
  3. Java高级开发面试题整理
  4. 荣耀note10无缘鸿蒙,赵明确认荣耀NOTE10 真机参数疑似全曝光!
  5. 零基础Unity做一个中秋诗词鉴赏网页,提前祝您中秋快乐!(DoTween动画 | WebGL视频 | 大文件上传GitHub)
  6. kill进程的几种方法
  7. rabbitmq 修改密码
  8. MySQL--变量、if语句、while循环以及存储过程的使用
  9. Phobos病毒家族最新变种.faust后缀勒索病毒活跃传播
  10. 利用stylecloud制作更酷炫的词云图