出于某些需求需要将一张简单的图片转换为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);
}
}
实现效果:
