gitee java pdf转图片_Java实现PDF文件转换为图片

引入依赖

org.springframework.boot

spring-boot-starter-parent

2.0.4.RELEASE

org.springframework.boot

spring-boot-starter-web

org.icepdf.os

icepdf-core

6.2.2

前端页面

PDf转换图片

.submitButton {

margin-top: 20px;

margin-left: 150px;

background-color: #e37e10;

border-radius: 10px;

border: 1px solid #ff8300;

}

PDF转换图片工具

function allowFileType() {

let file = document.getElementById("file").files[0];

let fileName = file.name;

let suffix = fileName.substring(fileName.lastIndexOf("."),fileName.length).toLowerCase();

if('.pdf' != suffix) {

alert("只允许传入PDF格式的文件!");

return false;

}

return true;

}

控制层接口package com.hrp.controller;

import com.hrp.util.ImageUtils;

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("to/image")

public void pdfToImage(@RequestParam("file") MultipartFile file,HttpServletResponse response) throws Exception{

ImageUtils.pdfToImage(file,response);

}

}

Image工具类package com.hrp.util;

import org.icepdf.core.pobjects.Document;

import org.icepdf.core.pobjects.Page;

import org.icepdf.core.util.GraphicsRenderingHints;

import org.springframework.stereotype.Component;

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.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

/**

* @description: PDF转换为图片的工具类

*/

@Component

public class ImageUtils {

/**

* 图片文件格式

*/

public static final String FORMAT_NAME = "png";

/**

* 图片文件后缀名

*/

public static final String PNG_SUFFIX = ".png";

/**

* 压缩文件后缀名

*/

public static final String ZIP_SUFFIX = ".zip";

/**

* 对外的开放接口,用于将PDF文件转换为图片文件压缩包进行下载

*

* @param file SpringMVC获取的图片文件

* @param response

* @throws Exception

*/

public static void pdfToImage(MultipartFile file, HttpServletResponse response) throws Exception {

File zipFile = generateImageFile(file);

downloadZipFile(zipFile, response);

}

/**

* 将PDF文件转换为多张图片并放入一个压缩包中

*

* @param file SpringMVC获取的图片文件

* @return 图片文件压缩包

* @throws Exception 抛出异常

*/

private static File generateImageFile(MultipartFile file) throws Exception {

String fileName = file.getOriginalFilename();

Document document = new Document();

document.setByteArray(file.getBytes(), 0, file.getBytes().length, fileName);

List fileList = new ArrayList<>();

for (int i = 0; i < document.getNumberOfPages(); i++) {

BufferedImage image = (BufferedImage) document.getPageImage(i, GraphicsRenderingHints.SCREEN,

Page.BOUNDARY_CROPBOX, 0F, 2.5F);

File imageFile = new File((i + 1) + PNG_SUFFIX);

ImageIO.write(image, FORMAT_NAME, imageFile);

image.flush();

fileList.add(imageFile);

}

document.dispose();

String directoryName = fileName.substring(0, fileName.lastIndexOf("."));

File zipFile = new File(directoryName + ZIP_SUFFIX);

ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile));

zipFile(fileList, zos);

zos.close();

return zipFile;

}

/**

* 下载zip文件

*

* @param zipFile zip压缩文件

* @param response HttpServletResponse

* @throws IOException IO异常

*/

private static void downloadZipFile(File zipFile, HttpServletResponse response) throws IOException {

FileInputStream fis = new FileInputStream(zipFile);

byte[] bytes = new byte[fis.available()];

fis.read(bytes);

fis.close();

response.reset();

response.setCharacterEncoding("UTF-8");

response.setHeader("Content-Type", "application/x-msdownload");

response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(zipFile.getName(), "UTF-8"));

OutputStream out = response.getOutputStream();

out.write(bytes);

out.flush();

out.close();

zipFile.delete();

}

/**

* 压缩文件

*

* @param inputFiles 具体需要压缩的文件集合

* @param zos ZipOutputStream对象

* @throws IOException IO异常

*/

private static void zipFile(List inputFiles, ZipOutputStream zos) throws IOException {

byte[] buffer = new byte[1024];

for (File file : inputFiles) {

if (file.exists()) {

if (file.isFile()) {

BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));

zos.putNextEntry(new ZipEntry(file.getName()));

int size = 0;

while ((size = bis.read(buffer)) > 0) {

zos.write(buffer, 0, size);

}

zos.closeEntry();

bis.close();

file.delete();

} else {

File[] files = file.listFiles();

List childrenFileList = Arrays.asList(files);

zipFile(childrenFileList, zos);

}

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值