在我们打印或分享 pdf 文件时,最好先检查一下文件中是否有空白页面。这些空白页面不仅会造成纸张的浪费,还会让我们的文档显得不那么专业。但如果一页一页地翻阅文档,特别是那些比较大的文档,来查找并删除空白页面,会耗费很多时间和精力。我们可以选择使用简单方便的 spire.pdf for java 来解决这个问题。本文将展示如何使用 spire.pdf for java 通过编程简单快速地找到并删除 pdf 文档中的空白页面。
安装 spire.pdf for java
首先,您需要在 java 程序中添加 spire.pdf.jar 文件作为依赖项。jar 文件可以从此链接下载。如果您使用 maven,则可以将以下代码添加到项目的 pom.xml 文件中,从而在应用程序中导入 jar 文件。
com.e-iceblue
e-iceblue
https://repo.e-iceblue.cn/repository/maven-public/
e-iceblue
spire.pdf
8.12.6
查找并移除 pdf 文档中的空白页面
spire.pdf for java 提供了 pdfpagebase.isblank() 方法来检测页面是否为完全空白的页面。但有些看起来空白的页面实际上包含有白色的图片,因此使用 pdfpagebase.isblank() 方法无法检测出这样的空白页面。因此,我们需要自定义一个 isblankimage() 方法来与 pdfpagebase.isblank() 方法共同使用以检测出所有空白页面。
注意:本文所使用的方法需要将 pdf 页面转换为图片并判断图片是否为空白图片来检测空白页面,因此需要申请许可来移除转换出的图片上的评估信息,否则无法正常完成对空白页面地检测。如果你没有许可,请该email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用javascript。获取临时许可。
详细操作步骤如下:
- 创建 pdfdocument 类的对象。
- 使用 pdfdocument.loadfromfile() 方法载入 pdf 文档。
- 循环遍历 pdf 文档中的页面,并使用 pdfpagebase.isblank() 方法判断页面是否为完全空白的页面。
- 如页面为完全空白,则使用 pdfdocument.getpages().remove() 方法删除该页面。
- 如页面不是完全空白的页面,则使用 pdfdocument.saveasimage() 方法将其转换为图片,然后使用自定义的 isblankimage() 方法判断转换出的图片是否为空白图片,最后使用 pdfdocument.getpages().remove() 方法删除空白图片所对应的页面。
- 使用 pdfdocument.savetofile() 方法保存结果文档。
- java
import com.spire.pdf.pdfdocument;
import com.spire.pdf.pdfpagebase;
import com.spire.pdf.graphics.pdfimagetype;
import java.awt.*;
import java.awt.image.bufferedimage;
public class removeblankpages {
public static void main(string []args){
//创建 pdfdocument 类的对象
pdfdocument pdf = new pdfdocument();
//载入pdf文件
pdf.loadfromfile("c:/sample.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
{
//将页面转换为图片
image = pdf.saveasimage(i, pdfimagetype.bitmap);
//检测转换出的图片是否为空白图片
if (isblankimage(image))
{
//删除空白图片所对应的页面
pdf.getpages().remove(page);
}
}
}
//保存结果文档
pdf.savetofile("删除空白页面.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;
}
}
申请临时 license
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用javascript。获取有效期 30 天的临时许可证。