功能:相机、相册选取单张图片,合并转PDF文件,过大图片可全部展示

效果图:

实现组件:iText组件

代码:

 implementation 'com.itextpdf:itextg:5.5.10'
 private static String pdfUrl;//画布最宽:500private static int MAX_WIDTH = 550;//画布最高:750private static int MAX_HEIGHT = 750;public static String imgOfPdf(String filepath, String imgUrl) {try {//图片list集合ArrayList<String> imageUrllist = new ArrayList<String>();String[] imgUrls = imgUrl.split(",");for (int i=0; i<imgUrls.length; i++) {imageUrllist.add(imgUrls[i]);}//输出pdf文件路径Log.d("测试输出pdf文件路径", filepath);pdfUrl = filepath;//生成pdfFile file = imgToPdf(imageUrllist, pdfUrl);file.createNewFile();} catch (IOException e) {e.printStackTrace();}return pdfUrl;}
    public static File imgToPdf(ArrayList<String> sources, String target) {//创建文件并设置文档页边距Document document  = new Document(PageSize.A4, 20, 20, 20, 20);FileOutputStream fos = null;try {fos = new FileOutputStream(target);PdfWriter.getInstance(document , fos);//打开文件document .open();// 添加PDF文档的某些信息,比如作者,主题等等//document.addTitle("鲁班移动");//document.addAuthor("作者:zhengtai.li@kuwo.cn");//document.addSubject("主题:企业信息");// 写入一段文字// document.add(new Paragraph("Test! Test! Test! Test! Test! Test!"));for (int i = 0; i < sources.size(); i++) {//获取原图片的宽高Image image = Image.getInstance(sources.get(i));float imageHeight = image.getScaledHeight();float imageWidth = image.getScaledWidth();// 获取缩放比例int percent = 100;//如果原图宽度大于原图高度,则使用宽度来计算缩放比例,否则按高度来计算缩放比较。//例:原图高1500,宽1000,则使用画布高度和原图高度来计算缩放比例(750/1500*100=50%)if (imageWidth >= imageHeight) {//小于画布宽度的图片不用缩放if (imageWidth > MAX_WIDTH) {percent = Math.round(MAX_WIDTH / imageWidth * 100) - 3;}} else {//小于画布高度的图片不用缩放if (imageHeight > MAX_HEIGHT) {percent = Math.round(MAX_HEIGHT / imageHeight * 100) - 3;}}// 设置图片比例,表示是原来图像的比例(原图越大,percent的值越小);image.scalePercent(percent);//图片居中image.setAlignment(Image.MIDDLE);//新建一页添加图片document.newPage();document.add(image);}} catch (Exception e) {Log.d("{}图片合成失败:{}", target+ e.getMessage()+ e);return null;}finally {//关闭文档document.close();try {fos.flush();fos.close();} catch (IOException e) {Log.d("关闭文档失败。。。","");}}File outputPdfFile = new File(target);if (!outputPdfFile.exists()) {outputPdfFile.deleteOnExit();return null;}return outputPdfFile;}

Android 多张图片转PDF文件相关推荐

  1. android 在线预览pdf文件

    android原生webView不支持预览pdf文件,ios却可以,所以android想要实现在线预览webView要通过其他方法,有以下几种方法: 1.andorid原生自带的pdf管理库,主要提供 ...

  2. android APP内显示PDF文件

    android APP内显示PDF文件 最近公司要做一个小功能,显示在APP内部显示pdf文件,刚接到任务感觉非常简单的一小功能,做的时候才发现在真的很不好实现. 因为android的webView与 ...

  3. android中打开查看pdf文件可用mupdf

    项目中用到过mupdf第三方库来开发android应用直接打开pdf文件的功能,为了更多的了解mupdf库上网找资料发现一篇个人文章写的还不错,拿来记录一下: 一时兴起 因为自己前段时间一直在做故事会 ...

  4. Android 使用PdfDocument生成PDF文件及遇到的问题

    一.PdfDocument使用 PdfDocument是Android原生的生成pdf文件的类,这个类的使用可参考: https://developer.android.google.cn/refer ...

  5. 关于Android 在线预览PDF文件

    本篇文章大部分为转载内容,不过最后有我自己使用后的小总结,原文地址:https://www.jianshu.com/p/9e3ff8385e6f Android PdfViewer: 项目地址: ht ...

  6. android打开教程,Android 打开网络上pdf文件

    1.基本思路: 打开网络pdf 思路整体还是来源与图片的加载. android中加载网络图片的框架有很多个.如image-laoder, fresco.glide等,首先都是从内存中找图片,如果内存中 ...

  7. android 在线预览pdf文件(目前最全)

    android原生webView不支持预览pdf文件,ios却可以,所以android想要实现在线预览webView要通过其他方法,有以下几种方法: 一.andorid原生自带的pdf管理库,主要提供 ...

  8. Android在线预览pdf文件的几种方式

    Android原生WebView不支持预览pdf文件,ios却可以,所以Android想要实现在线预览WebView要通过其他方法,有以下几种方法: 第一种方式: andorid原生自带的pdf管理库 ...

  9. Android 打开网络上pdf文件

    之前写过一篇Android打开本地pdf文件的文章,最后总结的时候说,后面一定要拓展库,让其也能打开网络的的pdf文件.今天终于可以兑现承诺了.frok一份代码https://github.com/J ...

最新文章

  1. 前端基于浏览器存储的AJAX性能优化
  2. python爬虫框架排行榜-8个最高效的Python爬虫框架,你用过几个?
  3. H3C RIPv2配置任务
  4. 2016 年 3 月 TIOBE 编程语言排行榜
  5. python学习笔记系列----(五)输入和输出
  6. javamail 收邮件并解析附件
  7. 计算机组成原理设计一个累加和,组成原理课设关于累加器.doc
  8. [react] 给组件设置很多属性时不想一个个去设置有什么办法可以解决这问题呢?
  9. linux命令-tar命令
  10. Draw Circle 沿着圆运动~
  11. SpringBoot实现前后端数据交互、json数据交互、Controller接收参数的几种常用方式...
  12. SpringNet整合NHibernate相关配置
  13. linux tftp 下载命令,Linux tftp命令
  14. 为什么固态硬盘比机械硬盘读取速度快?
  15. 人物画像————圆球转动效果
  16. 笔迹识别(一 笔迹特征)
  17. 微信公众号开发(1)
  18. DNS的作用及解析流程
  19. Bootstrap实战---电池充电特效编写(d-flex+JS)
  20. gm修改爆率需要重启服务器吗,传奇私服GM如何调试爆率、刷怪等

热门文章

  1. Linux MISC 驱动实验-基于正点原子IMX6ULL开发板
  2. php thinkphp是什么意思,什么是ThinkPHP?为什么要学习?
  3. 下周回国贾跃亭,Are you OK雷布斯……网红企业家是如何炼成的
  4. 51单片机c语言中断嵌套,51单片机的中断优先级及中断嵌套
  5. 单片机C51期末复习题,文末附答案
  6. java GUI开发中关于卡片式布局详细步骤讲解
  7. python数据分析基础007 -利用pandas带你玩转excel表格(中上篇)
  8. 星空投影仪美国亚马逊审核标准UL62368检测项目介绍
  9. Python-输入一串字符,判断是否为手机号码
  10. 第40篇-某公英x-s参数加密分析【2022-07-29】