【Java实现PDF文件转换为图片】

一、实现功能及开发环境描述

1、实现功能

上传PDF文件后,将每页的PDF页面转换为指定格式的图片文件,并将 PDF文件及图片保存到指定的本地磁盘路径。

2、开发环境

此处描述的开发环境并非都为必要条件,仅作为参考,方便其他开发人员排查因版本不同出现的问题。
Windows10-64位
JDK-1.8
Maven-3.3.9
数据库:Oracle Database 19c

二、代码实现

1、引入pom依赖

pom.xml

 <!--icepdf,用来将pdf文件转换为图片的依赖-->
        <dependency>
            <groupId>org.icepdf.os</groupId>
            <artifactId>icepdf-core</artifactId>
            <version>6.2.2</version>
        </dependency>

2、前端页面

pdf2pic.html

<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head th:include="include :: header"></head>
<body class="gray-bg">
	<form class="form-horizontal m-t" id="signupForm" enctype="multipart/form-data">
		<div class="form-group">
			<div class="col-sm-4" nowrap >
				<input name="picture" id="picture" type="file" placeholder="请选择PDF文件" onchange="allowFileType()"  />
		 	</div>
		 	<div class="col-sm-4 col-sm-offset-3">
				<button type="submit" class="btn btn-primary">提交</button>
			</div>
		</div>
	</form>	
</body>
<script type="text/javascript" src="/pdf2pic.js"></script>
</html>

pdf2pic.js

$.validator.setDefaults({
 //拦截表单验证成功后的提交表单事件,执行完函数中的代码在提交表单
	submitHandler : function() {
		save();
	}
});
function save() {
/**
* 使用FormData表单提交解决serialize不能提交表单中file类型的数据
*/
	$.ajax({
		type : "POST",
		url : "/save",
		data :new FormData(document.getElementById('signupForm')),
		// data :new FormData($('#picture')),
		processData: false,
		contentType: false,
		async: false,
		cache: false,			//上传文件不需要缓存
		error : function(request) {
			parent.layer.alert("Connection error");
		},
		success : function(data) {
			if (data.code == 0) {
				parent.layer.msg("操作成功");
				parent.reLoad();
				var index = parent.layer.getFrameIndex(window.name); // 获取窗口索引
				parent.layer.close(index);

			} else {
				parent.layer.alert(data.msg)
			}
		}
	});
}

3、控制层接口

pdf2picController.java

@Log("将pdf转为图片并保存pdf和图片")
    @ResponseBody
    @PostMapping("/save")
    public void save(@RequestParam("picture") MultipartFile pdf) throws Exception {
    	ImageUtils.pdfToImage(pdf);
	}   

4、PDF工具类

PDFUtils

/**
 * @description: PDF转换为图片的工具类
 */
@Component
public class ImageUtils {
    
    //图片文件格式
    public static final String FORMAT_NAME = "png";

    //图片文件后缀名
    public static final String PNG_SUFFIX = ".png";

    //用于将PDF文件转换为图片文件并保存到本地
    public static void pdfToImage(MultipartFile file) throws Exception {
    //1、pdf文件保存到本地
        String fileName = pdf.getOriginalFilename();
		fileName = FileUtil.renameToUUID(fileName);
        FileUtil.uploadFile(pdf.getBytes(), simpleDemoConfig.getUploadPath(), fileName);
        
    //2、将图片文件保存到本地
        Document document = new Document();
        document.setByteArray(pdf.getBytes(), 0, pdf.getBytes().length, fileName);
        for (int i = 0; i < document.getNumberOfPages(); i++) {
            //将磁盘中的图片读取到内存的图像缓冲区中
            BufferedImage image = (BufferedImage) document.getPageImage(i, GraphicsRenderingHints.SCREEN,
                    Page.BOUNDARY_CROPBOX, 0F, 2.5F);
            //创建一个后缀名为.png的File对象用于保存图片文件
            File imageFile = new File( UUID.randomUUID() + "-" + (i + 1) + PNG_SUFFIX);
            //将内存中的图片写入File对象
            ImageIO.write(image,FORMAT_NAME , imageFile);
            image.flush();
            //将File类型转为MultipartFile类型,用于将图片保存到本地文件夹
            InputStream inputStream = new FileInputStream(imageFile);
            MultipartFile imgMultipartFile = new MockMultipartFile(imageFile.getName(), inputStream);
            //将图片保存到本地
            String imageName = imgMultipartFile.getName();
            FileOutputStream out = new FileOutputStream(simpleDemoConfig.getUploadPath() + imageName);
            out.write(imgMultipartFile.getBytes());
            out.flush();
            out.close();
        }
        document.dispose();
    }
}
		/*simpleDemoConfig.getUploadPath()路径说明
		(此处也可直接写入String类型指定路径,以下注释则可忽略)
		
		simpleDemoConfig为配置类SimpleDemoConfig的实例
		@Component
		@ConfigurationProperties(prefix="config")
		public class SimpleDemoConfig {
			private String uploadPath;
			public String getUploadPath() {return uploadPath;}
		}
		
		实际路径写在application.yml配置文件中
		config:
		  uploadPath: E:/var/uploaded_files/	  
		*/ 
		

参考资料:
Java实现PDF文件转换为图片(将图片进行压缩下载)
将File转换成MultipartFile

限于作者水平,如有错误,欢迎批评指正

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java实现单层PDF转换为双层PDF可以使用 PDFBox库。Apache PDFBox是一个开源的Java库,提供了处理PDF文件的功能。 以下是实现单层PDF转换为双层PDF的步骤: 1. 导入Apache PDFBox库:首先需要在Java项目中导入Apache PDFBox库。你可以通过在项目的构建文件(如Maven或Gradle)中添加相应的依赖来导入该库。 2. 加载单层PDF文件:使用PDFBox库的PDDocument类加载单层PDF文件。可以使用PDDocument类的load()方法来加载PDF文件。 3. 创建新的双层PDF文件:使用PDDocument类的构造函数创建一个新的PDDocument对象,作为双层PDF文件。 4. 复制单层PDF页面到双层PDF文件:使用PDDocument类的importPage()方法将单层PDF文件的页面复制到双层PDF文件中。可以使用PDDocument类的getNumberOfPages()方法获取单层PDF文件的总页数,并使用for循环逐页复制。 5. 设置双层PDF页面属性:对于每个复制到双层PDF文件中的页面,可以使用PDPage类的setMediaBox()方法设置页面的尺寸和边距等属性。 6. 保存双层PDF文件:使用PDDocument类的save()方法将双层PDF文件保存到指定的路径。 下面是一个简单的示例代码: ```java import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; public class PDFConverter { public static void main(String[] args) { try { // 加载单层PDF文件 PDDocument singleLayerPDF = PDDocument.load("path/to/single_layer.pdf"); // 创建新的双层PDF文件 PDDocument doubleLayerPDF = new PDDocument(); // 复制单层PDF页面到双层PDF文件 for (int i = 0; i < singleLayerPDF.getNumberOfPages(); i++) { PDPage page = singleLayerPDF.getPage(i); doubleLayerPDF.importPage(page); // 设置双层PDF页面属性(可选) // page.setMediaBox(new PDRectangle(width, height)); } // 保存双层PDF文件 doubleLayerPDF.save("path/to/double_layer.pdf"); // 关闭文档 singleLayerPDF.close(); doubleLayerPDF.close(); } catch (Exception e) { e.printStackTrace(); } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值