Java使用 PDFBox 从 pdf 中提取图像
我们可以使用 PDFBox 从 PDF 中提取图像。
在本教程中,我们将学习使用 PDFBox 从 pdf 中提取图像并将图像保存到本地。
使用 PDFBox 从 PDF 中提取图像的步骤
以下是使用 PDFBox 从 pdf 中提取图像的分步过程。
1.扩展PDFStreamEngine
创建一个 Java 类并使用 PDFStreamEngine 对其进行扩展。
public class GetImageLocationsAndSize extends PDFStreamEngine
|
2.调用processPage()
对于 PDF 文档中的每一页,调用方法 processPage(page)。
for ( PDPage page : document.getPages() ) {
pageNum++;
printer.processPage(page);
}
|
3.重写processOperator()
对于 PDF 页面中的每个对象,processOperator 在 processPage() 中调用。我们将覆盖 processOperator()。
@Override
protected void processOperator( Operator operator, List operands) throws IOException{
. . .
}
|
4.检查图像
检查已发送到 processOperator() 的对象是否是图像对象。
if ( xobject instanceof PDImageXObject){
. . .
}
|
5. 保存图片到本地
如果对象是图像对象,则获取 BufferedImage 并将其保存到本地。使用 PDImageXObject.getImage() 我们得到一个 ARGB 类型的 BufferedImage。
BufferedImage bImage = image.getImage();
ImageIO.write(bImage, "PNG" , new File( "image_name.png" ));
|
示例 1 – 使用 PDFBox 从 PDF 中提取图像
在此示例中,我们将获取一个 PDF,并使用 PDFBox processOperator() 方法从该 PDF 中提取所有图像。
SaveImagesInPdf.java
import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.graphics.PDXObject;
import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.contentstream.operator.Operator;
import org.apache.pdfbox.contentstream.PDFStreamEngine;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.imageio.ImageIO;
/**
* This is an example on how to extract images from pdf.
*/
public class SaveImagesInPdf extends PDFStreamEngine
{
/**
* Default constructor.
*
* @throws IOException If there is an error loading text stripper properties.
*/
public SaveImagesInPdf() throws IOException
{
}
public int imageNumber = 1 ;
/**
* @param args The command line arguments.
*
* @throws IOException If there is an error parsing the document.
*/
public static void main( String[] args ) throws IOException
{
PDDocument document = null ;
String fileName = "apache.pdf" ;
try
{
document = PDDocument.load( new File(fileName) );
SaveImagesInPdf printer = new SaveImagesInPdf();
int pageNum = 0 ;
for ( PDPage page : document.getPages() )
{
pageNum++;
System.out.println( "Processing page: " + pageNum );
printer.processPage(page);
}
}
finally
{
if ( document != null )
{
document.close();
}
}
}
/**
* @param operator The operation to perform.
* @param operands The list of arguments.
*
* @throws IOException If there is an error processing the operation.
*/
@Override
protected void processOperator( Operator operator, List<COSBase> operands) throws IOException
{
String operation = operator.getName();
if ( "Do" .equals(operation) )
{
COSName objectName = (COSName) operands.get( 0 );
PDXObject xobject = getResources().getXObject( objectName );
if ( xobject instanceof PDImageXObject)
{
PDImageXObject image = (PDImageXObject)xobject;
// same image to local
BufferedImage bImage = image.getImage();
ImageIO.write(bImage, "PNG" , new File( "image_" +imageNumber+ ".png" ));
System.out.println( "Image saved." );
imageNumber++;
}
else if (xobject instanceof PDFormXObject)
{
PDFormXObject form = (PDFormXObject)xobject;
showForm(form);
}
}
else
{
super .processOperator( operator, operands);
}
}
}
|
输出
Processing page: 1
Image saved.
Image saved.
Image saved.
Processing page: 2
Image saved.
Image saved.
Processing page: 3
Processing page: 4
|
如果您想使用相同的 PDF 文件,请在此处下载apache.pdf pdf 文档。否则,您可以fileName
在 Java 程序中指定 PDF 文件路径。
结论
在这个Apache PDFBox 教程中,我们学习了使用 PDFBox 从 pdf 中提取图像,并使用 PDFStreamEngine 类将 ARGB 类型的 BufferedImage 保存到本地。
Java使用 PDFBox 从 pdf 中提取图像相关推荐
- php截取部分pdf,用PHP从pdf中提取图像
我正试图用PHP从PDF中提取图像. 我已成功部分成功 – 我有一个灰度图像-- --我知道我必须在它上面应用一个配方才能获得颜色! 但首先,我需要将图像的二进制数据转换为数字,然后应用the Ado ...
- python pdf转图片 poppler_如何使用Python中的poppler库从pdf中提取图像?
我有一个pdf,我想用 Python提取一些图像.我可以使用poppler-utils库 like this中的pdfimages从Linux命令行轻松提取图像: pdfimages my_file. ...
- python 读取pdf图片_使用Python从pdf中提取图像
下面是一些使用pyPdf读取PDF文件.提取图像并将它们生成为PIL.Image的代码.你需要根据自己的需要修改它,这里只是演示如何遍历对象树.在import io import pyPdf impo ...
- Word处理控件Aspose.Words功能演示:从 Java 中的 Word 文档中提取图像
图像通常用于表示 Word 文档中的重要信息.在文本旁边包含图像使内容更具吸引力.在某些情况下,您可能需要以编程方式提取嵌入在 Word 文档中的图像.为此,本文介绍了如何使用 Java 从 Word ...
- pdfparser java_如何使用java从PDF中提取内容?
在Java编程中,如何使用java从PDF中提取内容? 项目的目录结构如下 - Tika的工具包可从以下网址下载:http://tika.apache.org/download.html ,只下载:t ...
- java pdfbox读取pdf中的表格
java pdfbox读取pdf中的表格 目前遇到了需要解析pdf中表格的需求,遇到无法解析表格中的空格,求助大神帮助!!! <dependency><groupId>org. ...
- linux中将文本中的单词换掉的指令_为什么说从PDF中提取文本是一件困难的事?...
PDF文档处理工作中,总是绕不开对文本提取的需求.很多用户觉得我们PDFlux好用,所以对其中的底层技术也非常感兴趣.也有人为认为,从PDF里抽取文本段落和表格,应该非常简单! 近期,我们会对PDF文 ...
- Camelot:从pdf中提取表格数据
Camelot:从pdf中提取表格数据 文章目录: 一.Camelot的介绍和安装 1. Camelot介绍 2. Camelot的安装 3. 其他 二.Camelot的使用 1. 快速入门使用 2. ...
- python处理pdf提取指定数据_python从PDF中提取数据的示例
01 前言 数据是数据科学中任何分析的关键,大多数分析中最常用的数据集类型是存储在逗号分隔值(csv)表中的干净数据.然而,由于可移植文档格式(pdf)文件是最常用的文件格式之一,因此每个数据科学家都 ...
- python从字符串中提取数字并转换为相应数据类型_python从PDF中提取数据的示例
01 前言 数据是数据科学中任何分析的关键,大多数分析中最常用的数据集类型是存储在逗号分隔值(csv)表中的干净数据.然而,由于可移植文档格式(pdf)文件是最常用的文件格式之一,因此每个数据科学家都 ...
最新文章
- 投影转换_即插即用,办公投影不用愁:毕亚兹Mini DP转HDMIVGA转换器
- PAT (Basic Level) 1035 插入与归并(模拟)
- java先进先出 循环队列,JavaScript队列、优先队列与循环队列
- Amazon Glacier的Scala客户端
- python简单实践作业答案_python入门实践四:爬取牛客网面试专项练习题及答案
- fiddler修改支付金额_不容忽视的记账工具:支付宝记账
- 转载sanmusoft 论电脑报论坛的挂掉及电脑报的最后倒掉
- SolidWorks2016 从入门到入坟 下载安装+画图
- 游戏出海成为全球化趋势
- JAVA 中文乱码 idea设置
- 每日一记—获取Bing每日一图实现Android欢迎页(一)
- python 处理pdf文件 转成txt 批量提取pdf中的文字
- 移动端vue+vant+高德地图实现拖拽选址,周边选址,搜索选址,自动定位,选择城市功能,获取地址经纬度,详细地址
- 什么是生命周期?Activity生命周期的三种状态
- 附彩蛋|Spring Security 竟然故意延长登录时间?知道真相的我惊呆了!
- P2657 [SCOI2009]windy数(数位dp)
- 数据结构——冒泡排序
- 使用 Spring Quartz组件实现定时任务
- 冯山C语言第六章作业答案,C语言四川师范大学信息与计算科学冯山实验九课案.docx...
- 磁盘结构,原理,MBR,文件系统,分区,swap,加密,raid,配额
热门文章
- 京东联盟新版API接口PHP版SDK的坑
- Electron.js指南——键盘快捷键
- 谷歌浏览器如何在不登录的情况下保存书签
- IntelliJ IDEA 2020 提示“Unmapped Spring configuration files found.Please configure Spring facet.”解决办法
- 1.7 爬取汽车之家实战
- 利用Freessl部署免费SSL证书
- 一篇博客带你入门shiro
- 如何让自己每天按时睡觉
- lbochs模拟器最新版_bochs模拟器官方下载
- 【码上实战】【立体匹配系列】经典SGM:(3)代价聚合