使用pdfbox分页保存pdf为图片
一、背景
pdfbox作为Apache开源的PDF操作工具,允许创建新的PDF文档,操作现有文档,以及从文档中提取内容的能力。Apache PDFBox还包括一些命令行实用工具。本文楼主主要介绍其中的PDF转图片的功能,有其他功能需求的同学,可以去官网读读文档,https://pdfbox.apache.org/
二、准备工作
只需两个jar,pdfbox-2.0.7.jar,font-box-2.0.7.jar,当然用maven或gradle的同学,只需引入pdfbox就行了,依赖添加,楼主给大家准备在下面,直接取就OK。
gradle添加依赖:
//添加pdfbox的依赖
compile('org.apache.pdfbox:pdfbox:2.0.7')
maven添加依赖:
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.7</version>
</dependency>
其次,就是准备pdf文档一份,用来解析。
三、代码实现
代码不是很多,不超过100行,楼主给出了很全面的注释:
package cn.apache.poi.pdf; import org.apache.pdfbox.io.RandomAccessBuffer;
import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.rendering.PDFRenderer; import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.Iterator; /**
* Created by Jon_China on 2017/7/30.
*/
public class Pdf2Image {
public final static String IMG_TYPE_JPG = "jpg";
public final static String IMG_TYPE_PNG = "png";
public static void main( String[] args ) throws IOException{
Pdf2Image pdf2Image = new Pdf2Image();
pdf2Image.pdf2img("E:\\java测试\\java测试\\程序1\\待转换文件\\待转换pdf.pdf", "D:",IMG_TYPE_PNG);
} /**
* PDF转图片
* @param pdfPath pdf文件的路径
* @param savePath 图片保存的地址
* @param imgType 图片保存方式
*/
public void pdf2img(String pdfPath,String savePath,String imgType){
String fileName = pdfPath.substring(pdfPath.lastIndexOf("\\")+1, pdfPath.length());
fileName = fileName.substring(0,fileName.lastIndexOf("."));
InputStream is = null;
PDDocument pdDocument = null;
try {
is = new BufferedInputStream(new FileInputStream(pdfPath));
//创建pdf文件解析器
PDFParser parser = new PDFParser(new RandomAccessBuffer(is));
parser.parse();
//获取解析后的pdf文档
pdDocument = parser.getPDDocument();
//获取pdf渲染器,主要用来后面获取BufferedImage
PDFRenderer renderer = new PDFRenderer(pdDocument);
//获取pdf文件总页数
int pageCount = pdDocument.getNumberOfPages();
for (int i = 0; i < pageCount; i++) {
//构造保存文件名称格式
String saveFileName = savePath+"\\"+fileName+"-"+i+"."+imgType;
//获取当前页对象
PDPage page = pdDocument.getPage(i);
//图片转换
pdfPage2Img(page,saveFileName,imgType,renderer,i);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(pdDocument != null){
try {
pdDocument.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
} /**
* 将pdf单页转换为图片
* @param page 当页对象
* @param saveFileName 保存的图片名称
* @param imgType 保存的图片类型
* @param renderer 用于获取BufferedImage
* @param index 页索引
* @throws IOException
*/
public void pdfPage2Img(PDPage page,String saveFileName,String imgType,PDFRenderer renderer,int index) throws IOException{
//构造图片
BufferedImage img_temp = renderer.renderImage(index);
//设置图片格式
Iterator<ImageWriter> it = ImageIO.getImageWritersBySuffix(imgType);
//将文件写出
ImageWriter writer = (ImageWriter) it.next();
ImageOutputStream imageout = ImageIO.createImageOutputStream(new FileOutputStream(saveFileName));
writer.setOutput(imageout);
writer.write(new IIOImage(img_temp, null, null));
}
}
就是这么简单,源码地址,请戳https://github.com/LJunChina/MineKnowContainer/tree/master/pdf
使用pdfbox分页保存pdf为图片的更多相关文章
- Java文件操作系列[1]——PDFBox实现分页提取PDF文本
需求:用java分页提取PDF文本. PDFBox是一个很好的可以满足上述需求的开源工具. 1.PDF文档结构 要解析PDF文本,我们首先要了解PDF文件的结构. 关于PDF文档,最重要的几点: 一, ...
- JAVA基于PDF box将PDF转为图片
在一项目中用到,本身我是.NET的,团队中有用到JAVA,故此我处理这个功能,记录以下备用. 1.引用:fontbox-2.0.16.jar.pdfbox-app-2.0.16.jar 版本一定要正确 ...
- C# 给PDF添加图片背景
C# 给PDF添加图片背景 今天要实现的是给PDF文件添加图片背景这个功能.PDF是近年来最流行的文件之一,无论是办公还是日常生活中都经常会用到,很多时候,PDF文件的背景色都是白色,看多了难免觉得累 ...
- 使用magick.net将pdf转换为图片
现在手上有个需求是要将pdf转换为一页一页的image.最开始找到的是pdfbox来处理pdf的.在pdfbox.apache.org的官网首页写了一句'convert you pdfs to ima ...
- PDF转图片 C# with Adobe API
PDF转图片大概有十几种方式,褒贬不一,我就详细给大家说一下我认为效率最高的方式,使用Adobe官方的SDK 安装acrobat reader 9.0以上即可,勾选如下组件.
- JAVA中pdf转图片的方法
JAVA中实现pdf转图片可以通过第三方提供的架包,这里介绍几种常用的,可以根据自身需求选择使用. 一.icepdf.有收费版和开源版,几种方法里最推荐的.转换的效果比较好,能识别我手头文件中的中文, ...
- [PDFBox]后台操作pdf的工具类
PDFBox是Apache下的一个操作pdf的类库.其也提供了一个命令行的工具,也提供了java调用的第三方类库. 下载地址:https://pdfbox.apache.org/ 下面的实验基于JDK ...
- Python|网页转PDF,PDF转图片爬取校园课表~
import pdfkit import requests from bs4 import BeautifulSoup from PIL import Image from pdf2image imp ...
- html页面转PDF、图片操作记录
前言 日常开发中,我们有可能会碰到从系统中导出数据并打印的需要,打印的格式是常规的表格形式,例如: 本文记录使用js库html2canvas + jspdf实现html转PDF.图片,并下载 画出页面 ...
随机推荐
- 抓包工具 - Fiddler(如何捕获Android数据包)
如何捕获Android数据包 一.移动设备访问网络原理 先看看移动设备是怎么去访问网络,如图1所示,可以看到,移动端的数据包是从wifi出去的. 图1(移动设备访问网络) 所以我们可以把自己的电脑开启 ...
- wildfly10报错2:ID注释有错
13:55:56,612 INFO [org.jboss.modules] (main) JBoss Modules version 1.5.1.Final 13:55:56,891 INFO [or ...
- iOS获取WIFI的IP、子网掩码,以及域名转IP
获取WIFI需要的头文件: #import "GetCurrentIP.h" #import <ifaddrs.h> #import <arpa/inet.h&g ...
- mysql 转义字符
在用户提交表单的时候,有的用户会提交一些特殊字符,比如单引号双引号,此时,如果直接按正常字符串插入数据库的话,可能会出现无法正确插入数据库 PDO::quote 转义mysql语句中的单引号和双引号 ...
- php提示php_network_getaddresses: getaddrinfo failed: Name or service not known
php_network_getaddresses: getaddrinfo failed: Name or service not known 面对这个错误,已经相对熟悉了.想起来应该是服务器无法访问 ...
- 1.免费安装myeclipse 10以及破解
1.材料准备 jdk1.8.0_101 网盘地址链接: http://pan.baidu.com/s/1ge8Jaz5 密码: qb6v myeclipse-10.6-offline-installe ...
- centos生成公钥私钥 securecrt通过公钥访问服务器 winscp通过公钥访问服务器
忙碌了一下午,一直到写博客现在.都在纠结阿里云服务器上配置公钥私钥,网上的说辞总是参差不齐,需要各个去综合,合理取舍.今天终于配置好了. 我就不说这种方式的重要性了,往往黑客都不需要你的登陆账户密码就 ...
- accp8.0转换教材第10章Ajax和jQuery理解与练习
C/S (Client/Server)结构,即大家熟知的客户机和服务器结构. B/S(Browser/Server)结构即浏览器和服务器结构. 认识ajax .XMLHttpRequest.使用jqu ...
- powerdesinger(MSSQLSRV2008测试通过)通过Name或comment 导出注释到sql脚本,生成sql的说明备注,包括表注释信息
导出字段信息name注释到sql2008字段的说明 在database -> edit current dbms -> MSSQLSRV2008::Script\Objects\Colum ...
- kaptcha 验证码组件使用
kaptcha 验证码组件使用简介 kaptcha 是一个非常实用的验证码生成工具.有了它,你可以生成各种样式的验证码,因为它是可配置的.kaptcha工作的原理是调用 com.google.co ...