生活中难免遇到各种文件类型转换的问题,尤其是在办理一些证件的时候。例如,申请居住证积分的时候,把PDF版本的毕业证扫描件转换成jpg或者png等。下面提供一个工具,用于把PDF转换成指定后缀名的图片,需要的话,可以拿来即用。

package com.swagger.demo.controller;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File; public class Pdf2Image {
private final static Logger logger = LoggerFactory.getLogger(Pdf2Image.class); public static void main(String[] args) {
// 文件存放目录
String pathName = "D:\\testfiles";
convertFileType(pathName);
} public static void convertFileType(String path) {
File file = new File(path);
if (file.exists()) {
File[] files = file.listFiles();
if (null != files) {
for (File innerFile : files) {
if (innerFile.isDirectory()) {
logger.info("文件夹:" + innerFile.getAbsolutePath());
convertFileType(innerFile.getAbsolutePath());
} else {
logger.info("文件:" + innerFile.getAbsolutePath());
String fileName = innerFile.getName();
//获取文件的后缀名
String suffix = fileName.substring(fileName.lastIndexOf("."));
logger.info(fileName + ", suffix = " + suffix);
// 只处理PDF文件,当然,可以根据需要,自行更改待处理文件类型
if (".pdf".equals(suffix)) {
String imagePath = innerFile.getAbsolutePath();
imagePath = imagePath.substring(0, imagePath.lastIndexOf(".")).concat(".jpg");
pdfToImage(innerFile, imagePath);
}
}
}
}
} else {
logger.info("文件不存在!");
}
} /**
* 把pdf转换成PNG、jpg等类型的图片
*
* @param file pdf文件
* @param imagePath 图片路径
*/
public static String pdfToImage(File file, String imagePath) {
logger.info("------------pdf转PNG---------------");
long start = System.currentTimeMillis();
try (PDDocument doc = PDDocument.load(file)) {
PDFRenderer renderer = new PDFRenderer(doc);
int pageCount = doc.getNumberOfPages();
for (int i = 0; i < pageCount; i++) {
// 第二个参数越大转换后图片分辨率越高,转换耗时也就越长
BufferedImage image = renderer.renderImage(i, 2f);
ImageIO.write(image, "JPG", new File(imagePath));
// ImageIO.write(image, "PNG", new File(imagePathAndName));
}
logger.info(file.getName() + "转换完成,耗时:" + (System.currentTimeMillis() - start) + "ms。");
} catch (Exception e) {
logger.error("------pdf转PNG失败,异常信息:" + e.getMessage() + "---------");
}
return imagePath;
}
}

把PDF转换成指定后缀名的图片的更多相关文章

  1. 利用jpedal进行pdf转换成jpeg,jpg,png,tiff,tif等格式的图片

    项目中运用到pdf文件转换成image图片,开始时使用pdfbox开源库进行图片转换,但是转换出来的文件中含有部分乱码的情况.下面是pdfBox 的pdf转换图片的代码示例. try{ String ...

  2. 泛型(二)封装工具类CommonUtils-把一个Map转换成指定类型的javabean对象

    1.commons-beanutils的使用 commons-beanutils-1.9.3.jar 依赖 commons-logging-1.2.jar 代码1: String className ...

  3. Python 将pdf转换成txt(不处理图片)

    上一篇文章中已经介绍了简单的python爬网页下载文档,但下载后的文档多为doc或pdf,对于数据处理仍然有很多限制,所以将doc/pdf转换成txt显得尤为重要.查找了很多资料,在linux下要将d ...

  4. ABBYY把pdf转换成word的方法

    有时候我们在网上下载的资料文献是PDF格式文档,遇到喜欢的字句总忍不住想要收藏起来,但是PDF文档不同于普通的Word文档可以直接进行复制粘贴,需要下载安装相关的编辑工具,才能对文字内容进行编辑.倒不 ...

  5. 如何用ABBYY把PDF转换成PPT

    在电子科技迅速发展的今天,文件格式转换并不是什么稀罕事,因为现在都是电子化办公,出现很多文件格式,但是不同的场合需要的格式不同,所以常常需要进行文件格式的转换.PDF转换成PPT也是众多文件格式转换中 ...

  6. PDF转换成二进制字符串写入 HTTP 输出流

    最近项目需要做电子签章,需要网页打开PDF签章后保存:正好复习哈二进制和流的转换: 文件转换成二进制字符串写入HTTP输出流 protected void Page_Load(object sende ...

  7. Java基础知识强化之IO流笔记49:IO流练习之 复制指定目录下指定后缀名的文件并修改名称的案例

    1. 复制指定目录下指定后缀名的文件并修改名称的案例     需求:复制指定目录下的指定文件,并修改后缀名.  • 指定的文件是:.java文件.     • 指定的后缀名是:.jad     • 指 ...

  8. SQL SERVER 自定义函数 整数转成指定长度的16进制 转换成指定长度的16进制 不足补0

    最近做项目扩展的时候,遇到问题就是将整型转换成指定长度的16进制 刚开始就是直接使用 cast(12 as varbinary(4))但是发现这个不能解决我的问题 所以就上网搜了一下,然后改了改,下面 ...

  9. C#技术分享【PDF转换成图片——13种方案】(2013-07-25重新整理)

    原文:C#技术分享[PDF转换成图片--13种方案](2013-07-25重新整理) 重要说明:本博已迁移到 石佳劼的博客,有疑问请到 文章新地址 留言!!! 写在最前面:为了节约大家时间,撸主把最常 ...

  10. 利用pdf2swf将PDF转换成SWF

    将PDF转换成SWF可以使用SWFTools工具中的pdf2swf(http://www.swftools.org/),CSDN快速免积分下载地址http://download.csdn.net/de ...

随机推荐

  1. DeepSeek 官方推出的提示词库,AI内容生成的精准导航仪!

    前言 在当今数字化时代,人工智能(AI)正以前所未有的速度改变着我们的生活方式和工作模式.从简单的数据处理到复杂的创意生成,AI技术正逐渐渗透到各个领域,成为推动社会进步的重要力量.然而,如何高效地利 ...

  2. python py文件名称不能和库名称一样,否则报错module 'requests' has no attribute 'post'

    这个问题自己犯过几次,加深一下记忆

  3. Qt QDateEdit下拉日历的样式设计

    文章目录 QDateEdit样式设计 QDateEdit QCalendarWidget QDateEdit样式设计   最近做了一个用到QDateEdit的项目,涉及到对这个控件进行设计的方面,对于 ...

  4. DeepSeek 加持!IvorySQL 文档智能助手正式上线!

    DeepSeek 加持!IvorySQL 文档智能助手正式上线! "那个配置参数到底在第几章?"--正在部署 IvorySQL 的运维工程师小 "I",第 5 ...

  5. 从 PostgreSQL 升级至 IvorySQL 4.0

    本文作者:严少安,IvorySQL 贡献者. 本文为授权转载. 2024 年 8 月,我在<PG 12 即将退役,建议升级到 16.4>一文中提到,PostgreSQL 12 版本即将&q ...

  6. 探秘Transformer系列之(17)--- RoPE

    探秘Transformer系列之(17)--- RoPE 目录 探秘Transformer系列之(17)--- RoPE 文章总表 0x00 概述 0x01 总体思路 1.1 注意力机制回顾 1.2 ...

  7. MySQL中怎么分析性能?

    MySQL中主要有4种方式可以分析数据库性能,分别是慢查询日志,profile,Com_xxx和explain. 慢查询日志 先用下面命令查询慢查询日志是否开启, show variables lik ...

  8. 【QT】Linux下安装QT开发环境

    Linux下安装QT开发环境 零.下载安装包 从以下网址可以下载QT的所有版本: https://download.qt.io/ 这次演示安装5.9.0版本,因为是长期支持的版本,所以进入到archi ...

  9. sqlite的firedac显示设置

  10. Python字典及基本操作(超级详细)

    今天小张帮大家简单介绍下Python的一种数据结构: 字典,字典是 Python 提供的一种常用的数据结构,它用于存放具有映射关系的数据. 比如有份成绩表数据,语文:79,数学:80,英语:92,这组 ...