<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf.free</artifactId>
<version>9.13.0</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
package com.xhsoft.common.tool;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfImageType;
import com.xhsoft.common.props.PrintPathProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
@Component
public class RemoveBlankPages {
@Autowired
private PrintPathProperties pathProperties;
public static void main(String []args){
//创建PdfDocument对象
PdfDocument pdf = new PdfDocument();
//加载PDF文件
pdf.loadFromFile("E:\\资料\\临时pdf测试\\空白页.pdf");
BufferedImage image;
//遍历PDF中的所有页面
for(int i = pdf.getPages().getCount()-1; i>=0; i--)
{
PdfPageBase page = pdf.getPages().get(i);
//检测是否为空白页面
if(page.isBlank())
{
//移除完全空白的页面
pdf.getPages().remove(page);
}
else
{
//将PDF页面转换为图片
image = pdf.saveAsImage(i, PdfImageType.Bitmap);
//检测转换后的图片是否为空白图片
if (isBlankImage(image))
{
//移除空白图片所在页面
pdf.getPages().remove(page);
}
}
}
//保存结果文件
pdf.saveToFile("E:\\资料\\临时pdf测试\\删除空白页.pdf");
}
/**
* 判断图片是否为空白图片
*/
public static boolean isBlankImage(BufferedImage image)
{
BufferedImage bufferedImage = image;
Color pixel;
for (int i = 0; i < bufferedImage.getWidth(); i++)
{
for (int j = 0; j < bufferedImage.getHeight(); j++)
{
pixel = new Color(bufferedImage.getRGB(i, j));
if (pixel.getRed() < 240 || pixel.getGreen() < 240 || pixel.getBlue() < 240)
{
return false;
}
}
}
return true;
}
/**
* 处理空白页pdf
* @param inputPath 输入的原始pdf 地址
* @return 处理后的pdf地址
* @throws IOException
*/
public String removeBlankPages(String inputPath) throws IOException {
// 创建临时文件用于保存结果
String processFileName = pathProperties.getPdf() + UUID.randomUUID().toString();
File tempFile = File.createTempFile(processFileName, ".pdf");
tempFile.deleteOnExit();
//创建PdfDocument对象
PdfDocument pdf = new PdfDocument();
//加载PDF文件
pdf.loadFromFile(inputPath);
BufferedImage image;
//遍历PDF中的所有页面
for (int i = pdf.getPages().getCount() - 1; i >= 0; i--) {
PdfPageBase page = pdf.getPages().get(i);
//检测是否为空白页面
if (page.isBlank()) {
//移除完全空白的页面
pdf.getPages().remove(page);
} else {
//将PDF页面转换为图片
image = pdf.saveAsImage(i, PdfImageType.Bitmap);
//检测转换后的图片是否为空白图片
if (isBlankImage(image)) {
//移除空白图片所在页面
pdf.getPages().remove(page);
}
}
}
//保存结果文件到临时文件
pdf.saveToFile(tempFile.getAbsolutePath());
return tempFile.getAbsolutePath();
}
/**
* 检测PDF文件是否包含空白页
*/
public static boolean hasBlankPages(String inputPath) {
//创建PdfDocument对象
PdfDocument pdf = new PdfDocument();
try {
//加载PDF文件
pdf.loadFromFile(inputPath);
//遍历PDF中的所有页面
for (int i = pdf.getPages().getCount() - 1; i >= 0; i--) {
PdfPageBase page = pdf.getPages().get(i);
//检测是否为空白页面
if (page.isBlank()) {
return true;
} else {
BufferedImage image = pdf.saveAsImage(i, PdfImageType.Bitmap);
if (isBlankImage(image)) {
return true;
}
}
}
} finally {
pdf.close();
}
return false;
}
}