springboot 使用itextpdf 框架实现多个图片合成一个pdf文件
以下两个方法引入头
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文件相关推荐
- 如何把微信中的多个图片转为一个pdf文件?
如何把微信中的多个图片转为一个pdf文件? 1. 用360安全浏览器打开相关微信的连接. 2 浏览相关微信的图片,直至所有的微信图片都能看见 3 点击鼠标右键,点击"全屏查看" ...
- 扫描的图片如何转换成一个PDF文件
在扫描一些文件资料的时候会生成很多的图片,在整理这些图片时都会按照顺序将图片合成一个文件,一般是需要将这些图片转换成一个文档格式的,如果是需要发送给他人查看一般都会转为PDF文件格式,那么如何将这些扫 ...
- Android 将文本和图片写入到pdf文件以及读取手机里的pdf文件
1.首先讲一下将文本和图片写入到pdf文件这个功能实现的思路 获取PdfDocument对象-->通过page.getCanvas()获取一个Canvas对象-->在这个Canvas上进行 ...
- 如何查看文件夹里有几张图片_如何把几张图片合成一个pdf?图片合并为pdf的操作教程...
我在一家公司当美工,平时要接触到很多图片素材,并把它们以pdf格式文件的形式发送给客户查看(以此来摸索出客户想要的图片效果).把几张图片合并成为一个pdf文件,即是将图片格式转换成为pdf格式,这对我 ...
- .net core 文件流保存图片_如何将图片打包成PDF文件进行保存?
如何将图片打包成PDF文件进行保存?我们都知道PDF文件是一种电子文档发行和数字化信息传播的理想文档格式,支持跨平台传输.对普通读者而言,用PDF制作的电子书具有纸版书的质感和阅读效果,可以逼真地展现 ...
- 【python批量插入图片到一个pdf中】
批量插入图片到一个pdf中 需求 解决思路 代码详解 需求 把大量的img图片插入到一个pdf中,一张图片为pdf的一页 解决思路 先把大量的图片转为一个个的pdf,然后合并所有的pdf 话不多说,直 ...
- JAVA 将图片转换成pdf文件
/** * 将图片转换成pdf文件 *imgFilePath 需要被转换的img所存放的位置. 例如imgFilePath="D:\\projectPath\\55555.jpg" ...
- jpg图片转换成pdf文件,方法步骤
如何把jpg图片转换成pdf文件?近期有不少小伙伴问我,能不能把jpg图片转换成pdf文件,让自己的jpg图片文件能稳定的在不同系统查看使用,这样也就避免了因jpg图片多和格式问题而导致的的打开慢或打 ...
- python多图片合并pdf_Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
本文实例讲述了Python结合ImageMagick实现多张图片合并为一个pdf文件的方法.分享给大家供大家参考,具体如下: 前段时间买了不少书,现在手头的书籍积累的越来越多,北京这边租住的小屋子空间 ...
最新文章
- 详解Java解析XML的四种方法
- HTML基础标签入门
- [转]手游研发数据专业术语科普 游戏热度跟啥有关
- ssl2294-打包【dp练习】
- 双向循环链表【数据结构】
- c# mysql 中文,c#操作mysql中文乱码的解决方案_c#应用
- C语言将raw转为bmp,RAW格式数据转BMP格式数据
- 在struts中实现验证码
- 2008服务器系统c盘清理,WindowsServer2008清理C盘空间
- 所有地区身份证开头(校验用户填写身份信息)
- Golang interface 接口详解
- 2020江苏事业编计算机类真题,2020江苏事业单位计算机类岗位考情
- 征途完美单机版_征途单机版下载-征途单机版最新官方版-Minecraft中文分享站
- 联想数字化转型之路:从传统IT到“新IT”
- 2019美团机器学习/数据挖掘算法实习生笔试 编程题修改矩阵
- 文档模式:标准模式、混杂模式
- cuteftp.exe
- DjangoUeditor添加与配置
- 比较容易考前计算机好的985大学,容易考的985有哪些?附性价比高的985大学排名...
- 信息系统项目管理师论文范文:整体管理篇
热门文章
- C语言入门——打印爱心
- 魔兽怀旧服服务器周2维护一次吗,魔兽怀旧服:服务器再次崩溃,角色全部消失,需要维护14个小时...
- UVA 1220 Party at Hali-Bula (树状DP+记忆化搜索)
- lol里的一个英雄玩了上千把是什么感觉
- windows8 linux双系统,win7或win8、win8.1系统下安装ubuntu实现双系统图文教程
- 【如何在linux系统里安装无线网卡驱动】
- 物联网时代,苹果被淘汰的可能性99%
- 在页面实现qq跳转链接
- creative thoughts开源软件
- VS2005无法找到组件的问题