kkFileView二开系列文章:
- kkFileView二开之源码编译及部署
- kkFileView二开之内外网转换
- kkFileView二开之word转pdf接口
- kkFileView二开之Excel转pdf接口
- kkFileView二开之pdf转图片接口
- kkFileView二开之企业级安全题目处理
对应二开代码堆栈:https://gitee.com/wbj_1/kk-file-view
1 kkFileView源码下载及编译
前文 【kkFileView二开之源码编译及部署】 已完成了kkFileView源码二开的基础预备。
2 Pdf转图片接口
2.1 背景
在实际工作过程中,存在Pdf转图片的需求,好比职员证书,通过pdf模板填充后,天生对应的图片。
2.2 分析
kkFiewView 针对pdf在线预览会有两种方式,一种是转换为图片举行预览,一种是保存原始pdf格式举行预览,此处可以调用kkfiewView底层中pdf转图片预览的方式,实现对应的接口
2.2 接口开发
2.2.1 编写Pdf转图片方法
在cn.keking.service.FileHandlerService.java 中,新增转换方法:
- /**
- * pdf转换为图片
- * @param pdfFilePath
- * @param fileAttribute
- * @return
- * @throws Exception
- */
- public List<String> pdf2jpgBase64(String pdfFilePath,FileAttribute fileAttribute) throws Exception {
- String filePassword = fileAttribute.getFilePassword();
- PDDocument doc = null;
- List<String> imageFile = new ArrayList<>();
- try {
- File pdfFile = new File(pdfFilePath);
- if (!pdfFile.exists()) {
- return null;
- }
- doc = Loader.loadPDF(pdfFile, filePassword);
- doc.setResourceCache(new NotResourceCache());
- int pageCount = doc.getNumberOfPages();
- PDFRenderer pdfRenderer = new PDFRenderer(doc);
- for (int pageIndex = 0; pageIndex < pageCount; pageIndex++) {
- BufferedImage image = pdfRenderer.renderImageWithDPI(pageIndex, ConfigConstants.getPdf2JpgDpi(), ImageType.RGB);
- imageFile.add(ImgUtil.toBase64DataUri(image,"jpg"));
- }
- } catch (IOException e) {
- logger.error("Convert pdf to jpg exception, pdfFilePath:{}", pdfFilePath, e);
- throw new Exception(e);
- } finally {
- if (doc != null) { //关闭
- doc.close();
- }
- }
- return imageFile;
- }
复制代码 2.2.2 编写转换接口
在cn.keking.web.controller包下,新增ConvertController.java 文件
- package cn.keking.web.controller;
- import cn.hutool.core.io.FileUtil;
- import cn.keking.config.ConfigConstants;
- import cn.keking.model.FileAttribute;
- import cn.keking.model.FileType;
- import cn.keking.service.FileHandlerService;
- import cn.keking.service.OfficeToPdfService;
- import cn.keking.utils.KkFileUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.bind.annotation.ResponseBody;
- import org.springframework.web.multipart.MultipartFile;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.File;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- /**
- * 文件转换接口
- */
- @Controller
- public class ConvertController {
- private final String fileDir = ConfigConstants.getFileDir();
- //临时目录
- private final String tempPath = "temp" + File.separator;
- @Autowired
- private OfficeToPdfService officeToPdfService;
- @Autowired
- private FileHandlerService fileHandlerService;
- private static final String FILE_DIR = ConfigConstants.getFileDir();
-
- /**
- * pdf转换为图片
- * @param req
- * @param rep
- * @param file
- */
- @PostMapping("/pdf2Image")
- @ResponseBody
- public Map<String,Object> pdf2Image(HttpServletRequest req, HttpServletResponse rep, @RequestParam("file") MultipartFile file) {
- Map<String,Object> result = new HashMap<>();
- FileAttribute fileAttribute = new FileAttribute();
- String fullFileName = file.getOriginalFilename();
- fileAttribute.setType(FileType.typeFromFileName(fullFileName));
- fileAttribute.setName(fullFileName);
- fileAttribute.setSuffix(KkFileUtils.suffixFromFileName(fullFileName));
- try {
- String pdfName = fullFileName.substring(0, fullFileName.lastIndexOf(".") + 1) + "pdf";
- String outFilePath = FILE_DIR + pdfName;
- FileUtil.writeFromStream(file.getInputStream(),outFilePath);
- List<String> imageUrls = fileHandlerService.pdf2jpgBase64(outFilePath, fileAttribute);
- result.put("code",200);
- result.put("msg","转换成功");
- result.put("data",imageUrls);
- }catch (Exception e){
- e.printStackTrace();
- result.put("code",500);
- result.put("msg","pdf转换图片异常:"+e.getMessage());
- }
- return result;
- }
- }
复制代码 2.3 接口测试
2.3.1 Pdf文件预备
2.3.2 pdf2Image
使用Apifox新建接口,按如下方式配置,并点击发送
留意:通过源码分析可知,在Pdf举行预览过程中,预览速率会随着pdf的巨细差别而差别,pdf越大,则接口速率越慢,由于是一次性将对应的pdf全部转换后返回至前端的。
效果格式化效果(pdf文件有85页,所以data中有85条数据)
按如下方式,将天生的每一条数据写入到img标签中
- <!DOCTYPE html>
- <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta charset="utf-8" />
- <title>New Document</title>
- </head>
- <body>
- <img src="data标签中的每一行数据" alt="" />
- </body>
- </html>
复制代码 在浏览器中打开编写的html文件,如效果图所示,即为转换后的base64图片
3 部署
可参考 【kkFileView二开之源码编译及部署】 文档中,【部署】目录下的方式,根据部署的平台选择符合的方式举行部署。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |