出于某些需求需要将一张简单的图片转换为PDF的文件格式,因此自己动手写了一个图片转换PDF的系统,现在将该系统分享在这里,供大家参考。
(学习视频推荐:java课程)
具体代码:
引入依赖:
<!--该项目以SpringBoot为基础搭建--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> <relativePath/> </parent> <dependencies> <!--SpringMVC的依赖,方便我们可以获取前端传递过来的文件信息--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--ITextPdf,操作PDF文件的工具类--> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.4.2</version> </dependency> </dependencies>
前端页面:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>图片转换Pdf</title> <style> .submitButton { margin-top: 20px; margin-left: 150px; background-color: #e37e10; border-radius: 10px; border: 1px solid #ff8300; } </style> </head> <body> <div style="text-align: center"> <h1>图片转换pdf工具</h1> <form action="/pdf/image/to" enctype="multipart/form-data" method="post" onsubmit="return allowFileType)"> <input type="file" id="file" name="file" placeholder="请选择图片" onchange="allowFileType)" style="border: 1px solid black;"><br> <input type="submit" value="一键转换pdf文件"> </form> </div> </body> <script> function allowFileType) { let file = document.getElementById"file").files[0]; let fileName = file.name; console.logfileName) let fileSize = file.size; console.logfileSize) let suffix = fileName.substringfileName.lastIndexOf"."),fileName.length); if'.jpg' != suffix && '.png' != suffix) { alert"目前只允许传入.jpg或者.png格式的图片!"); return false; } iffileSize > 2*1024*1024) { alert"上传图片不允许超过2MB!"); return false; } return true; } </script> </html>
(推荐教程:java入门教程)
控制层接口
package com.hrp.controller; import com.hrp.util.PdfUtils; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; /** * @description: 用于处理Pdf相关的请求 */ @Controller @RequestMapping"pdf") public class PdfController { @PostMapping"image/to") public void imageToPdf@RequestParam"file") MultipartFile file,HttpServletResponse response) throws Exception{ PdfUtils.imageToPdffile,response); } }
PDF工具类
package com.hrp.util; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Image; import com.itextpdf.text.PageSize; import com.itextpdf.text.pdf.PdfWriter; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; /** * @description: pdf相关的工具类 */ @Component public class PdfUtils { /** * 图片转换PDF的公共接口 * * @param file SpringMVC获取的图片文件 * @param response HttpServletResponse * @throws IOException IO异常 * @throws DocumentException PDF文档异常 */ public static void imageToPdfMultipartFile file, HttpServletResponse response) throws IOException, DocumentException { File pdfFile = generatePdfFilefile); downloadPdfFilepdfFile, response); } /** * 将图片转换为PDF文件 * * @param file SpringMVC获取的图片文件 * @return PDF文件 * @throws IOException IO异常 * @throws DocumentException PDF文档异常 */ private static File generatePdfFileMultipartFile file) throws IOException, DocumentException { String fileName = file.getOriginalFilename); String pdfFileName = fileName.substring0, fileName.lastIndexOf".")) + ".pdf"; Document doc = new DocumentPageSize.A4, 20, 20, 20, 20); PdfWriter.getInstancedoc, new FileOutputStreampdfFileName)); doc.open); doc.newPage); Image image = Image.getInstancefile.getBytes)); float height = image.getHeight); float width = image.getWidth); int percent = getPercentheight, width); image.setAlignmentImage.MIDDLE); image.scalePercentpercent); doc.addimage); doc.close); File pdfFile = new FilepdfFileName); return pdfFile; } /** * * 用于下载PDF文件 * * @param pdfFile PDF文件 * @param response HttpServletResponse * @throws IOException IO异常 */ private static void downloadPdfFileFile pdfFile, HttpServletResponse response) throws IOException { FileInputStream fis = new FileInputStreampdfFile); byte[] bytes = new byte[fis.available)]; fis.readbytes); fis.close); response.reset); response.setHeader"Content-Type", "application/pdf"); response.setHeader"Content-Disposition", "attachment; filename=" + URLEncoder.encodepdfFile.getName), "UTF-8")); OutputStream out = response.getOutputStream); out.writebytes); out.flush); out.close); } /** * 等比压缩,获取压缩百分比 * * @param height 图片的高度 * @param weight 图片的宽度 * @return 压缩百分比 */ private static int getPercentfloat height, float weight) { float percent = 0.0F; if height > weight) { percent = PageSize.A4.getHeight) / height * 100; } else { percent = PageSize.A4.getWidth) / weight * 100; } return Math.roundpercent); } }
实现效果: