生活中难免遇到各种文件类型转换的问题,尤其是在办理一些证件的时候。例如,申请居住证积分的时候,把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. javascript快速初始化数组

    编写代码中通常会有快速初始化数组的需求,例如我们需要一个类似matlab里的zeros函数,假如这里我们需要生成一个0-23的数组用于表示一天24小时. 最基本的做法如下: function(){ l ...

  2. Django项目如何配置日志文件信息

    1.以dict的方式配置在settings.py中 # 日志文件简单配置 ''' LOGGING = { "version": 1, "disable_existing_ ...

  3. Cython二进制逆向系列(三)运算符

    Cython二进制逆向系列(三)运算符 在开始前,先给出本文用到的py源代码 def test1(x, y): # 数学运算符 a = x + y b = x - y c = x * y d = x ...

  4. Alice与Bob-整数分解问题脚本实现

    题目: 密码学历史中,有两位知名的杰出人物,Alice和Bob.他们的爱情经过置换和轮加密也难以混淆,即使是没有身份认证也可以知根知底.就像在数学王国中的素数一样,孤傲又热情.下面是一个大整数:985 ...

  5. SCRAPY入门学习(待完善)

    Scrapy介绍 Scrapy 是用 Python 实现的一个为了爬取网站数据.提取结构性数据而编写的应用框架. Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 通常我们 ...

  6. Oracle存储过程里操作BLOB的字节数据的办法

    一.缘由 BLOB是指二进制大对象,也就是英文Binary Large Object的缩写. 在很多时候,我们是通过其他编程语言(如Java)访问BLOB的字节数据,进行字节级的操作的. 但是有些时候 ...

  7. Linux 下如何修改密码有效期?

    有时我们连接远程服务器的时候,提示密码过期,需要修改密码才能登录,这时可以用chage命令来调整下用户密码的有效期,使用户可以继续使用. chage命令 chage命令用于查看以及修改用户密码的有效期 ...

  8. 学习 Docker 如何查看镜像信息?

    学习 Docker 如何查看镜像信息? 一.images 命令列出镜像 通过使用如下两个命令,列出本机已有的镜像: docker images 或: docker image ls 如下图所示: 对上 ...

  9. Delphi 让窗体自适应屏幕显示

    unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...

  10. Open diary(每天更新)

    .col-md-8 img { display: none } .comment img { display: unset } 这是一个open diary,就是公开日记. 为什么标题用英文呢?因为觉 ...