博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springboot 使用itextpdf 框架实现多个图片合成一个pdf文件
阅读量:6854 次
发布时间:2019-06-26

本文共 3504 字,大约阅读时间需要 11 分钟。

以下两个方法引入头

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 文件引入

com.lowagie
itext
2.1.7
public File imageToPdf(List
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 引入

org.apache.pdfbox
pdfbox
2.0.1

 

//经过测试,dpi为96,100,105,120,150,200中,105显示效果较为清晰,体积稳定,dpi越高图片体积越大    //一般电脑显示分辨率为96    public 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

 

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

你可能感兴趣的文章
我的友情链接
查看>>
qt 信号与槽
查看>>
在Linux下安装tftp服务器NFS服务器以及Samba服务器
查看>>
systemd (简体中文)
查看>>
CentOS5.5部署zlib导致yum使用不了,报错Yum Segmentation Fault (core Dumped)
查看>>
手把手安装配置 Syster Center Virtual Machiner(二)添加SCVMM主机
查看>>
我的友情链接
查看>>
charles的使用
查看>>
学习日志---python(新式类,面向对象)
查看>>
sersync+rsync实时同步配置案例
查看>>
第一章 面向系统架构的系统工程
查看>>
【学神】1-10 硬盘管理、文件系统及链接
查看>>
mvc与三层结构终极区别
查看>>
华为内部如何实施微服务架构?基本就靠这5大原则
查看>>
PC机声音图标为不可用(声音图标打叉)
查看>>
Lowest Common Ancestor of a Binary Tree Part
查看>>
ASP.NET 新增时多字段取值解决方案
查看>>
文字域替换
查看>>
springboot+vue的前后端分离与合并方案
查看>>
.net中使用存储过程output值和返回值
查看>>