Java实现图片转换PDF文件的示例代码

时间:2021-05-19

最近因为一些事情,需要将一张简单的图片转换为PDF的文件格式,在网上找了一些工具,但是这些工具不是需要注册账号,就是需要下载软件。

而对于只是转换一张图片的情况下,这些操作显然是非常繁琐的,所以作者就直接使用Java写了一个图片转换PDF的系统,现在将该系统分享在这里。

引入依赖

<!--该项目以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 lang="en"><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文件" class="submitButton"> </form> </div></body><script> function allowFileType() { let file = document.getElementById("file").files[0]; let fileName = file.name; console.log(fileName) let fileSize = file.size; console.log(fileSize) let suffix = fileName.substring(fileName.lastIndexOf("."),fileName.length); if('.jpg' != suffix && '.png' != suffix) { alert("目前只允许传入.jpg或者.png格式的图片!"); return false; } if(fileSize > 2*1024*1024) { alert("上传图片不允许超过2MB!"); return false; } return true; }</script></html>

控制层接口

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.imageToPdf(file,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相关的工具类 */@Componentpublic class PdfUtils { /** * 图片转换PDF的公共接口 * * @param file SpringMVC获取的图片文件 * @param response HttpServletResponse * @throws IOException IO异常 * @throws DocumentException PDF文档异常 */ public static void imageToPdf(MultipartFile file, HttpServletResponse response) throws IOException, DocumentException { File pdfFile = generatePdfFile(file); downloadPdfFile(pdfFile, response); } /** * 将图片转换为PDF文件 * * @param file SpringMVC获取的图片文件 * @return PDF文件 * @throws IOException IO异常 * @throws DocumentException PDF文档异常 */ private static File generatePdfFile(MultipartFile file) throws IOException, DocumentException { String fileName = file.getOriginalFilename(); String pdfFileName = fileName.substring(0, fileName.lastIndexOf(".")) + ".pdf"; Document doc = new Document(PageSize.A4, 20, 20, 20, 20); PdfWriter.getInstance(doc, new FileOutputStream(pdfFileName)); doc.open(); doc.newPage(); Image image = Image.getInstance(file.getBytes()); float height = image.getHeight(); float width = image.getWidth(); int percent = getPercent(height, width); image.setAlignment(Image.MIDDLE); image.scalePercent(percent); doc.add(image); doc.close(); File pdfFile = new File(pdfFileName); return pdfFile; } /** * * 用于下载PDF文件 * * @param pdfFile PDF文件 * @param response HttpServletResponse * @throws IOException IO异常 */ private static void downloadPdfFile(File pdfFile, HttpServletResponse response) throws IOException { FileInputStream fis = new FileInputStream(pdfFile); byte[] bytes = new byte[fis.available()]; fis.read(bytes); fis.close(); response.reset(); response.setHeader("Content-Type", "application/pdf"); response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(pdfFile.getName(), "UTF-8")); OutputStream out = response.getOutputStream(); out.write(bytes); out.flush(); out.close(); } /** * 等比压缩,获取压缩百分比 * * @param height 图片的高度 * @param weight 图片的宽度 * @return 压缩百分比 */ private static int getPercent(float 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.round(percent); }}

页面效果

这就是系统启动之后的页面效果,虽然页面比较简陋,但是功能却没有任何折扣,有兴趣或者有需要的同学可以自己搭建一下,试一试图片转换PDF文件的效果。

注意:作者自己测试了一下,普通图片基本是没有问题的,但是遇到一些特殊的图片可能会出现异常,毕竟只是一个比较简单的图片转换PDF系统,难以兼容所有图片。

到此这篇关于Java实现图片转换PDF文件的示例代码的文章就介绍到这了,更多相关Java 图片转换PDF内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章