以下两个方法引入头

import com.lowagie.text.*;
import com.lowagie.text.pdf.PdfWriter;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.springframework.stereotype.Component;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

1、图片转pdf文件

pom 文件引入

    <dependency><groupId>com.lowagie</groupId><artifactId>itext</artifactId><version>2.1.7</version></dependency>

 public File imageToPdf(List<String> imageUrllist, String mOutputPdfFileName) {String TAG = "PdfManager";Document doc = new Document(PageSize.A4, 20, 20, 20, 20);try {PdfWriter.getInstance(doc, new FileOutputStream(mOutputPdfFileName));doc.open();for (int i = 0; i < imageUrllist.size(); i++) {doc.newPage();
//                doc.add(new Paragraph("简单使用iText"));Image png1 = Image.getInstance(imageUrllist.get(i));float heigth = png1.getHeight();float width = png1.getWidth();int percent = getPercent2(heigth, width);png1.setAlignment(Image.MIDDLE);png1.scalePercent(percent+3);// 表示是原来图像的比例;
                doc.add(png1);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (DocumentException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {doc.close();}File mOutputPdfFile = new File(mOutputPdfFileName);if (!mOutputPdfFile.exists()) {mOutputPdfFile.deleteOnExit();return null;}return mOutputPdfFile;}
/** * 第一种解决方案 在不改变图片形状的同时,判断,如果h>w,则按h压缩,否则在w>h或w=h的情况下,按宽度压缩 * * @param h * @param w * @return */private int getPercent(float h, float w) {int p = 0; float p2 = 0.0f; if (h > w) { p2 = 297 / h * 100; } else { p2 = 210 / w * 100; } p = Math.round(p2); return p;}

/** * 第二种解决方案,统一按照宽度压缩 这样来的效果是,所有图片的宽度是相等的,自我认为给客户的效果是最好的 * * @param */private int getPercent2(float h, float w) {int p = 0; float p2 = 0.0f; p2 = 530 / w * 100; p = Math.round(p2); return p;}
 

2、pdf 转图片

pom 引入

<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.1</version></dependency>

 //经过测试,dpi为96,100,105,120,150,200中,105显示效果较为清晰,体积稳定,dpi越高图片体积越大//一般电脑显示分辨率为96public static final float DEFAULT_DPI=105;/**pdf转图片* @param pdfPath*/public  String pdfToImage(String pdfPath, HttpServletResponse res, HttpServletRequest request){try{if(pdfPath==null||"".equals(pdfPath)||!pdfPath.endsWith(".pdf"))return null;//图像合并使用参数int width = 0; // 总宽度int[] singleImgRGB; // 保存一张图片中的RGB数据int shiftHeight = 0;BufferedImage imageResult = null;//保存每张图片的像素值//利用PdfBox生成图像PDDocument pdDocument = PDDocument.load(new File(pdfPath));PDFRenderer renderer = new PDFRenderer(pdDocument);//循环每个页码for(int i=0,len=pdDocument.getNumberOfPages(); i<len; i++){BufferedImage image=renderer.renderImageWithDPI(i, DEFAULT_DPI, ImageType.RGB);int imageHeight=image.getHeight();int imageWidth=image.getWidth();if(i==0){//计算高度和偏移量width=imageWidth;//使用第一张图片宽度;//保存每页图片的像素值imageResult= new BufferedImage(width, imageHeight*len, BufferedImage.TYPE_INT_RGB);}else{shiftHeight += imageHeight; // 计算偏移高度
                }singleImgRGB= image.getRGB(0, 0, width, imageHeight, null, 0, width);imageResult.setRGB(0, shiftHeight, width, imageHeight, singleImgRGB, 0, width); // 写入流中
            }pdDocument.close();String outPath = pdfPath.replace(".pdf", "_"+DEFAULT_DPI+".jpg");File outFile = new File(outPath);ImageIO.write(imageResult, "jpg", outFile);// 写图片return outPath;}catch (Exception e) {e.printStackTrace();}return null;}

转载于:https://www.cnblogs.com/memoryXudy/p/8709931.html

springboot 使用itextpdf 框架实现多个图片合成一个pdf文件相关推荐

  1. 如何把微信中的多个图片转为一个pdf文件?

    如何把微信中的多个图片转为一个pdf文件? 1.  用360安全浏览器打开相关微信的连接. 2 浏览相关微信的图片,直至所有的微信图片都能看见 3 点击鼠标右键,点击"全屏查看" ...

  2. 扫描的图片如何转换成一个PDF文件

    在扫描一些文件资料的时候会生成很多的图片,在整理这些图片时都会按照顺序将图片合成一个文件,一般是需要将这些图片转换成一个文档格式的,如果是需要发送给他人查看一般都会转为PDF文件格式,那么如何将这些扫 ...

  3. Android 将文本和图片写入到pdf文件以及读取手机里的pdf文件

    1.首先讲一下将文本和图片写入到pdf文件这个功能实现的思路 获取PdfDocument对象-->通过page.getCanvas()获取一个Canvas对象-->在这个Canvas上进行 ...

  4. 如何查看文件夹里有几张图片_如何把几张图片合成一个pdf?图片合并为pdf的操作教程...

    我在一家公司当美工,平时要接触到很多图片素材,并把它们以pdf格式文件的形式发送给客户查看(以此来摸索出客户想要的图片效果).把几张图片合并成为一个pdf文件,即是将图片格式转换成为pdf格式,这对我 ...

  5. .net core 文件流保存图片_如何将图片打包成PDF文件进行保存?

    如何将图片打包成PDF文件进行保存?我们都知道PDF文件是一种电子文档发行和数字化信息传播的理想文档格式,支持跨平台传输.对普通读者而言,用PDF制作的电子书具有纸版书的质感和阅读效果,可以逼真地展现 ...

  6. 【python批量插入图片到一个pdf中】

    批量插入图片到一个pdf中 需求 解决思路 代码详解 需求 把大量的img图片插入到一个pdf中,一张图片为pdf的一页 解决思路 先把大量的图片转为一个个的pdf,然后合并所有的pdf 话不多说,直 ...

  7. JAVA 将图片转换成pdf文件

    /** * 将图片转换成pdf文件 *imgFilePath 需要被转换的img所存放的位置. 例如imgFilePath="D:\\projectPath\\55555.jpg" ...

  8. jpg图片转换成pdf文件,方法步骤

    如何把jpg图片转换成pdf文件?近期有不少小伙伴问我,能不能把jpg图片转换成pdf文件,让自己的jpg图片文件能稳定的在不同系统查看使用,这样也就避免了因jpg图片多和格式问题而导致的的打开慢或打 ...

  9. python多图片合并pdf_Python结合ImageMagick实现多张图片合并为一个pdf文件的方法

    本文实例讲述了Python结合ImageMagick实现多张图片合并为一个pdf文件的方法.分享给大家供大家参考,具体如下: 前段时间买了不少书,现在手头的书籍积累的越来越多,北京这边租住的小屋子空间 ...

最新文章

  1. 详解Java解析XML的四种方法
  2. HTML基础标签入门
  3. [转]手游研发数据专业术语科普 游戏热度跟啥有关
  4. ssl2294-打包【dp练习】
  5. 双向循环链表【数据结构】
  6. c# mysql 中文,c#操作mysql中文乱码的解决方案_c#应用
  7. C语言将raw转为bmp,RAW格式数据转BMP格式数据
  8. 在struts中实现验证码
  9. 2008服务器系统c盘清理,WindowsServer2008清理C盘空间
  10. 所有地区身份证开头(校验用户填写身份信息)
  11. Golang interface 接口详解
  12. 2020江苏事业编计算机类真题,2020江苏事业单位计算机类岗位考情
  13. 征途完美单机版_征途单机版下载-征途单机版最新官方版-Minecraft中文分享站
  14. 联想数字化转型之路:从传统IT到“新IT”
  15. 2019美团机器学习/数据挖掘算法实习生笔试 编程题修改矩阵
  16. 文档模式:标准模式、混杂模式
  17. cuteftp.exe
  18. DjangoUeditor添加与配置
  19. 比较容易考前计算机好的985大学,容易考的985有哪些?附性价比高的985大学排名...
  20. 信息系统项目管理师论文范文:整体管理篇

热门文章

  1. C语言入门——打印爱心
  2. 魔兽怀旧服服务器周2维护一次吗,魔兽怀旧服:服务器再次崩溃,角色全部消失,需要维护14个小时...
  3. UVA 1220 Party at Hali-Bula (树状DP+记忆化搜索)
  4. lol里的一个英雄玩了上千把是什么感觉
  5. windows8 linux双系统,win7或win8、win8.1系统下安装ubuntu实现双系统图文教程
  6. 【如何在linux系统里安装无线网卡驱动】
  7. 物联网时代,苹果被淘汰的可能性99%
  8. 在页面实现qq跳转链接
  9. creative thoughts开源软件
  10. VS2005无法找到组件的问题