使用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添加依赖:

1 //添加pdfbox的依赖
2 compile(‘org.apache.pdfbox:pdfbox:2.0.7‘)

  maven添加依赖:

1 <dependency>
2   <groupId>org.apache.pdfbox</groupId>
3   <artifactId>pdfbox</artifactId>
4   <version>2.0.7</version>
5 </dependency>

  其次,就是准备pdf文档一份,用来解析。

三、代码实现



  代码不是很多,不超过100行,楼主给出了很全面的注释:

 1 package cn.apache.poi.pdf;
 2
 3 import org.apache.pdfbox.io.RandomAccessBuffer;
 4 import org.apache.pdfbox.pdfparser.PDFParser;
 5 import org.apache.pdfbox.pdmodel.PDDocument;
 6 import org.apache.pdfbox.pdmodel.PDPage;
 7 import org.apache.pdfbox.rendering.PDFRenderer;
 8
 9 import javax.imageio.IIOImage;
10 import javax.imageio.ImageIO;
11 import javax.imageio.ImageWriter;
12 import javax.imageio.stream.ImageOutputStream;
13 import java.awt.image.BufferedImage;
14 import java.io.*;
15 import java.util.Iterator;
16
17 /**
18  * Created by Jon_China on 2017/7/30.
19  */
20 public class Pdf2Image {
21     public final  static String  IMG_TYPE_JPG = "jpg";
22     public final  static String  IMG_TYPE_PNG = "png";
23     public static void main( String[] args ) throws IOException{
24         Pdf2Image pdf2Image = new Pdf2Image();
25         pdf2Image.pdf2img("E:\\java测试\\java测试\\程序1\\待转换文件\\待转换pdf.pdf", "D:",IMG_TYPE_PNG);
26     }
27
28
29     /**
30      * PDF转图片
31      * @param pdfPath pdf文件的路径
32      * @param savePath 图片保存的地址
33      * @param imgType 图片保存方式
34      */
35     public void pdf2img(String pdfPath,String savePath,String imgType){
36         String fileName = pdfPath.substring(pdfPath.lastIndexOf("\\")+1, pdfPath.length());
37         fileName = fileName.substring(0,fileName.lastIndexOf("."));
38         InputStream is = null;
39         PDDocument pdDocument = null;
40         try {
41             is = new BufferedInputStream(new FileInputStream(pdfPath));
42             //创建pdf文件解析器
43             PDFParser parser = new PDFParser(new RandomAccessBuffer(is));
44             parser.parse();
45             //获取解析后的pdf文档
46             pdDocument = parser.getPDDocument();
47             //获取pdf渲染器,主要用来后面获取BufferedImage
48             PDFRenderer renderer = new PDFRenderer(pdDocument);
49             //获取pdf文件总页数
50             int pageCount = pdDocument.getNumberOfPages();
51             for (int i = 0; i < pageCount; i++) {
52                 //构造保存文件名称格式
53                 String saveFileName = savePath+"\\"+fileName+"-"+i+"."+imgType;
54                 //获取当前页对象
55                 PDPage page =  pdDocument.getPage(i);
56                 //图片转换
57                 pdfPage2Img(page,saveFileName,imgType,renderer,i);
58             }
59         } catch (Exception e) {
60             e.printStackTrace();
61         }finally{
62             if(pdDocument != null){
63                 try {
64                     pdDocument.close();
65                 } catch (IOException e) {
66                     e.printStackTrace();
67                 }
68             }
69         }
70     }
71
72     /**
73      * 将pdf单页转换为图片
74      * @param page 当页对象
75      * @param saveFileName 保存的图片名称
76      * @param imgType 保存的图片类型
77      * @param renderer 用于获取BufferedImage
78      * @param index 页索引
79      * @throws IOException
80      */
81     public void pdfPage2Img(PDPage page,String saveFileName,String imgType,PDFRenderer renderer,int index) throws IOException{
82         //构造图片
83         BufferedImage img_temp  = renderer.renderImage(index);
84         //设置图片格式
85         Iterator<ImageWriter> it = ImageIO.getImageWritersBySuffix(imgType);
86         //将文件写出
87         ImageWriter writer = (ImageWriter) it.next();
88         ImageOutputStream imageout = ImageIO.createImageOutputStream(new FileOutputStream(saveFileName));
89         writer.setOutput(imageout);
90         writer.write(new IIOImage(img_temp, null, null));
91     }
92 }

  就是这么简单,源码地址,请戳https://github.com/LJunChina/MineKnowContainer/tree/master/pdf

时间: 2024-10-14 08:40:50

使用pdfbox分页保存pdf为图片的相关文章

PDFBox的使用——分页提取PDF文本

需求:用java分页提取PDF文本. PDFBox是一个很好的可以满足上述需求的开源工具. 1.PDF文档结构 要解析PDF文本,我们首先要了解PDF文件的结构. 关于PDF文档,最重要的几点: 一,PDF文档内容比较复杂,比如有纯文本(可以提取出其中的文字,可以用PDF软件中的“复制”功能).图片(无法使用PDF软件中的“复制”功能).表单.视频.音频等,总之形式比较复杂: 二,PDF文件采用二进制流与纯文字混合的编码模式,并且没有采用 Unicode 等标准字符编码方式,其字符编码采用 Ad

C# 给PDF添加图片背景

今天要实现的是给PDF文件添加图片背景这个功能.PDF是近年来最流行的文件之一,无论是办公还是日常生活中都经常会用到,很多时候,PDF文件的背景色都是白色,看多了难免觉得累,更换PDF的背景不仅可以让眼睛看起来更舒服,还可以让PDF文件看上去更美观.如何实现?作为一名程序猿,当然要亲自“操刀上阵”,这篇文章我主要写的是如何使用C# 给PDF文件添加图片背景. 这是我准备的PDF文件: 代码使用: 第一步:创建一个Visual C#控制台项目,添加引用并使用命名空间. 1 2 using Syst

PDF转图片以及转html

嘿,笔者就是本着有意思的心态.其实实现的原理与ppt转html的一致.先转成图片,然后把图片呈现在html上.直接贴代码喽. package com.css.java.learning.massbag; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.Iterator; im

PDF转图片,怎样实现PDF转图片

PDF怎样转图片呢?因为图片传输信息的直观性和方便性,所以现在很多的信息都是通过图片进行传递的,那么如果我们手上有一份需要以图片格式进行传输的PDF文件,那么我们应该怎样实现PDF转图片的问题呢?下面跟随小编的步伐一起来看一下吧.步骤一:在电脑上将需要进行转换的PDF文件准备好,同时通过浏览器搜索迅捷PDF在线转换器,借助这款转换工具来完成后面的操作.步骤二:进入转换器页面后,在页面中心很多的功能方格中,选择PDF转图片的功能方格.步骤三:PDF转图片的功能页面转入后,先不要将PDF文件添加进来

[PDFBox]后台操作pdf的工具类

PDFBox是Apache下的一个操作pdf的类库.其也提供了一个命令行的工具,也提供了java调用的第三方类库. 下载地址:https://pdfbox.apache.org/ 下面的实验基于JDK8+pdfbox-2.0.13.jar+pdfbox-app-2.0.13.jar(命令行工具库) 1.命令行使用 文档参考:https://pdfbox.apache.org/2.0/commandline.html 命令行工具可以提取pdf中的图片.文本,合并pdf与拆分pdf,pdf转换为图片

那些PDF转换图片、PPT、Word的神操作,一键互转不是梦

无论你是职场办公,还是日常学习,只要使用电脑你就逃不开PDF文件. 因为PDF兼容性强,又能保证无论你在什么系统和端口打开的时候,内容格式都不会发生变形.尤其是在打印文件的时候,这个优势就特别明显. 今天咱们就来聊聊,关于PDF版本转换的那些事! 一.直接转换 直接转换的意思就是你不需要借助任何工具,也能直接进行版本转换.比如Word文档.Excel表格.PPT等,都能直接转换为PDF版本,这个小窍门很多人还不知道. 举个例子,将Excel表格直接换为PDF版本: 文件- -另存为- -选择保存

【VC++技术杂谈006】截取电脑桌面并将其保存为bmp图片

本文主要介绍如何截取电脑桌面并将其保存为bmp图片. 1. Bmp图像文件组成 Bmp是Windows操作系统中的标准图像文件格式. Bmp图像文件由四部分组成: (1)位图头文件数据结构,包含Bmp图像文件的类型.文件大小等信息. (2)位图信息数据结构,包含Bmp图像的宽.高.压缩类型等信息. (3)颜色表,该部分可选,有些位图需要,有些位图(如24位真彩色位图)不需要. (4)位图数据. 1.1位图头文件数据结构 位图头文件数据结构包含Bmp图像文件的类型.文件大小等信息,占用14个字节.

PHP《将画布(canvas)图像保存成本地图片的方法》

用PHP将网页上的Canvas图像保存到服务器上的方法 2014年6月27日 歪脖骇客 发表回复 8 在几年前HTML5还没有流行的时候,我们的项目经理曾经向我提出这样一个需求:让项目评审专家们在评审结束时用笔在平板电脑上进行电子签名. 这需要我们评审软件里提供这样一个功能:打开浏览器,登录,进入评审意见页,页面最下部有个方块区域,用户在这里用触摸笔进行签名,然后这个签名将会保持 的服务器上. 这样的一个需求在当时是让我大费周折,但如今想起来,如果用html5的canvas实现,真是太简单了.在

PDF转图片

1.第三方库下载:PyPDF2.PythonMagick.Ghostscript. 2.PythonMagick的官方下载链接为:http://www.imagemagick.org/download/python/,需要自己编译:一个好用的非官方链接为:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pythonmagick. 3.如果报下面这种错误,多半是因为没装Ghostscript. RuntimeError: python.exe: Postscr