# 批量提取pdf与word文档中图片和文字
## Intro
今天处理pdf文档时,想提取里面图片。在网上了解到spire。于是决定coding一下,使用Spire,以Java方式批量提取pdf/word中的图片。同理还可以批量提取文档中的文字。效果还不错,那就一探究竟吧。
![image-20220405225107763](https://mybolg-typora.oss-cn-beijing.aliyuncs.com/image-20220405225107763.png)
开发人员能在任何时间,任何地点,直接调用 SDK 开放接口, 操作 Word 文档,支持 .NET、Java、PHP、Python、JavaScript 等多种编程语言。
主要功能:
- 创建Word文档
- 添加、删除背景颜色,背景图片
- 添加word书签,获取书签内容
- 丰富的文档转换功能,支持保存Word文档为PDF、XPS、图片、 RTF、HTML、 Epub等格式
- 设置、获取文档属性
- 加密保护Word文档
- 邮件合并图片或文字
- 合并Word文档
- 添加、删除段落
- 添加、删除形状
- 插入、删除表格,插入、删除、合并、拆分表格行或列
- 添加、删除图片或文字水印
## 实现
在这里,我们以Java为例,使用Maven构建。由于Spire需要付费,我们只能试用,下相关的依赖,并进行导入。
![image-20220405225232656](https://mybolg-typora.oss-cn-beijing.aliyuncs.com/image-20220405225232656.png)
**首先**,在pom.xml文件中配置Maven仓库路径。
```xml
<repositories>
<repository>
<id>com.e-iceblue</id>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
```
**然后**,在pom.xml文件中指定Spire.PDF for Java的Maven依赖。
```xml
<dependencies>
<dependency>
<groupId> e-iceblue </groupId>
<artifactId>spire.pdf</artifactId>
<version>3.11.6</version>
</dependency>
</dependencies>
```
实现代码:
```java
package com.zhoujk.spire;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class ExtractTextAndImages {
// 文件读写位置
public final static String location = "C:\\Users\\Zhoujiankang\\Desktop\\Test";
public static List<String> readFile(String location) {
File[] fileList = new File(location).listFiles();
List<String> fileLocations = new ArrayList<>();
for (File file : fileList) {
if (file.isFile()) {
//获取到所有pdf文档的存放地址
if (file.getName().endsWith(".pdf")) {
fileLocations.add(location +"\\"+ file.getName());
System.out.println(file.getName());
}
}
}
return fileLocations;
}
public static void main(String[] args) throws IOException {
int index = 0;
PdfDocument pdfDocument = new PdfDocument();
for (String loc : readFile(location)) {
System.out.println(loc);
pdfDocument.loadFromFile(loc);
for (PdfPageBase page : (Iterable<PdfPageBase>) pdfDocument.getPages()) {
//使用extractImages方法获取指定页上图片
for (BufferedImage image : page.extractImages()) {
//指定输出文件路径及名称
File output = new File(location+"\\" + String.format("Image_%d.png", index++));
System.out.println("文档中图片导出成功,导出第"+index+"图片");
//将图片保存为PNG格式文件
ImageIO.write(image, "PNG", output);
}
}
}
}
}
```
我们来起看看效果:
![image-20220405225307850](https://mybolg-typora.oss-cn-beijing.aliyuncs.com/image-20220405225307850.png)
这是提取出来的图片。
![image-20220405225511350](https://mybolg-typora.oss-cn-beijing.aliyuncs.com/image-20220405225511350.png)
同理,您还可以利用Spire处理word、ppt、excel文档,并不局限于提取图片操作,也包括基本的文本操作、文档操作,也有加密、解密等复杂操作。
以提取pdf中的文字为例:
```java
public class Extract_Text {
public static void main(String[] args) {
//创建PdfDocument实例
PdfDocument doc = new PdfDocument();
//加载PDF文件
doc.loadFromFile("test.pdf");
//创建StringBuilder实例
StringBuilder sb = new StringBuilder();
PdfPageBase page;
//遍历PDF页面,获取每个页面的文本并添加到StringBuilder对象
for(int i= 0;i<doc.getPages().getCount();i++){
page = doc.getPages().get(i);
sb.append(page.extractText(true));
}
FileWriter writer;
try {
//将StringBuilder对象中的文本写入到文本文件
writer = new FileWriter("ExtractText.txt");
writer.write(sb.toString());
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
doc.close();
}
}
```
## 补充
如果您有兴趣,您可以去https://cloud.e-iceblue.cn了解spire更多详情。
如果您还想了解更多代码细节,您可以阅读官方文档。这是官方档
https://www.e-iceblue.com/Tutorials/Spire.PDF/Spire.PDF-Program-Guide/Spire.PDF-Program-Guide-Content.html
如果您想了解更多代码案例,请参考
https://github.com/EiceblueCloud/Spire.Cloud.Word
另外,也推荐一个在线转换文件的网站,特别好用,不收费。
https://www.online-convert.com
![image-20220405225801184](https://mybolg-typora.oss-cn-beijing.aliyuncs.com/image-20220405225801184.png)
批量提取pdf与word文档中图片和文字