在后端开发、文档自动化系统中,经常会遇到需要移除 PDF 中部分页面的需求,例如剔除封面、清理空白页、过滤无效附件页等。Java 生态里有多种 PDF 处理组件,本文使用 Free Spire.PDF for Java 免费版本完成页面删除功能,演示删除单页、多页等常见场景。

一、环境配置

Maven 方式

pom.xml 中添加仓库和依赖:

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>

<dependency>
    <groupId>e-iceblue</groupId>
    <artifactId>spire.pdf.free</artifactId>
    <version>9.13.0</version>
</dependency>

重要提示:Free Spire.PDF for Java 在处理输出结果时存在 10 页的页数限制,适合处理页数不多的文档。

二、删除单个页面

删除页面的核心方法是 PdfDocument.getPages().removeAt(int index),通过指定页面索引(从 0 开始)删除特定页面。

import com.spire.pdf.PdfDocument;

public class DeletePage {
    public static void main(String[] args) {
        // 创建 PdfDocument 实例
        PdfDocument pdf = new PdfDocument();
        // 加载 PDF 文档
        pdf.loadFromFile("sample.pdf");
        // 删除第二页(索引从 0 开始,1 表示第二页)
        pdf.getPages().removeAt(1);
        // 保存文档
        pdf.saveToFile("output/deletePage.pdf");
        pdf.close();
    }
}

注意事项:页码从 0 开始计数,容易与常见的"第一页=1"搞混,操作前务必确认索引。删除操作不可逆,建议处理前备份原始文件。

三、删除多个页面

当需要一次删除多个页面时,必须从后往前删。如果正序遍历删除,删完前面的页面后,后续页面的索引会发生变化,导致删除错误。

import com.spire.pdf.PdfDocument;
import java.util.Arrays;

public class DeleteMultiplePages {
    public static void main(String[] args) {
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("sample.pdf");
        
        // 要删除的页面索引:第2、4、6页(索引从0开始)
        int[] pagesToDelete = {1, 3, 5};
        // 排序后从后往前删除
        Arrays.sort(pagesToDelete);
        for (int i = pagesToDelete.length - 1; i >= 0; i--) {
            pdf.getPages().removeAt(pagesToDelete[i]);
        }
        
        pdf.saveToFile("output/deleteMultiplePages.pdf");
        pdf.close();
    }
}

四、删除空白页

除了按索引删除,你还可以自动检测并剔除空白页。isBlank() 方法会判断页面是否完全空白(不含任何文本、图像或图形元素)。

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;

public class RemoveBlankPages {
    public static void main(String[] args) {
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("sample.pdf");
        
        // 从后往前遍历
        for (int i = pdf.getPages().getCount() - 1; i >= 0; i--) {
            PdfPageBase page = pdf.getPages().get(i);
            if (page.isBlank()) {
                pdf.getPages().remove(page);
            }
        }
        
        pdf.saveToFile("output/removeBlankPages.pdf");
        pdf.close();
    }
}

注意:若页面仅包含白色图片或极淡内容,isBlank() 可能无法识别。此时可考虑将页面转换为图像后,通过像素分析判断是否为空白。


使用Java 实现 PDF 页面删除逻辑很简洁,核心三步:加载文档、执行页面移除、保存并关闭资源。开发时重点关注索引从 0 开始、多页删除倒序遍历、资源释放这几点,就可以稳定实现页面删除需求,适用于日常 PDF 页面管理。