将pdf文件转换成图片,图片再生成网页
1、引入依赖
<!--pdf转化为html或者图片-->
<dependency>
<groupId>net.sf.cssbox</groupId>
<artifactId>pdf2dom</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.12</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox-tools</artifactId>
<version>2.0.12</version>
</dependency>
2、增加配置信息application.yml
atp:
dir: /Users/jianchenghou/uploadjar/file
3、测试代码:Controller
package com.example.demo.rest;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.io.FileUtil;
import com.example.demo.config.Tess4jClient;
import com.example.demo.fileutil.IdWorker;
import com.example.demo.service.MinioService;
import com.example.demo.util.IdUtil;
import org.apache.commons.io.IOUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
@RestController
@RequestMapping("/pdf")
public class PdfRestController {
@Autowired
private MinioService minioService;
@Value(value = "${atp.dir}")
private String dirTmp;
//html中的图片了
@PostMapping("/pdfToHtml")
public void pdfToHtml(HttpServletResponse response, MultipartFile file){
try {
StringBuffer buffer = new StringBuffer();
PDDocument doc = PDDocument.load(file.getInputStream());
//遍历处理pdf附件
buffer.append("<!doctype html>\r\n");
buffer.append("<head>\r\n");
buffer.append("<meta charset=\"UTF-8\">\r\n");
buffer.append("</head>\r\n");
buffer.append("<body>\r\n");
buffer.append("<style>\r\n");
buffer.append("img {background-color:#fff; text-align:center; width:100%; max-width:100%;}\r\n");
buffer.append("</style>\r\n");
int size = doc.getNumberOfPages();
PDFRenderer reader = new PDFRenderer(doc);
for (int i = 0; i < size; i++) {
BufferedImage bufferedImage = reader.renderImage(i, 3f);
//文件临时存储目录
//String location = System.getProperty("user.dir") + "/" + dirTmp;
String location = dirTmp;
//生成图片,保存位置
FileOutputStream out = new FileOutputStream(location + "/" + i + ".jpg");
ImageIO.write(bufferedImage, "jpg", out);
String encode = Base64.encode(new File(location + "/" + i + ".jpg"));
//将图片路径追加到网页文件里
buffer.append("<img src=\"data:image/jpg;base64," + encode + "\"/>\r\n");
out.close();
FileUtil.del(location + "/" + i + ".jpg");
}
doc.close();
buffer.append("</body>\r\n");
buffer.append("</html>");
InputStream inputStream = IOUtils.toInputStream(buffer.toString(), StandardCharsets.UTF_8);
response.reset();
response.setContentType("");
//response.setHeader("Content-Disposition", "inline; filename=" + URLEncoder.encode(IdWorker.getIdStr(), "UTF-8"));
response.setHeader("Content-Disposition", "inline; filename=" + URLEncoder.encode(IdUtil.getId(), "UTF-8"));
byte[] buf = new byte[1024];
int len;
OutputStream outputStream = response.getOutputStream();
while ((len = inputStream.read(buf)) > 0) {
outputStream.write(buf, 0, len);
}
inputStream.close();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
4、测试
5、将响应回来的内容放到页面中,访问
页面代码格式