对PDF页面的增删通常需要借助专门的工具,而这些工具一般需要付费才能使用。那么我们可以通过Java代码免费实现这一功能吗?答案是肯定的。这篇文章就教大家如何使用一个免费的国产Java库来删除PDF中的指定页面或者删除PDF中的空白页。

使用Java快速删除PDF中的指定页面

1. 首先,我们需要先将免费库 Free Spire.PDF for Java 添加到Java项目中。下载后手动导入jar或者通过Maven仓库安装都可。

2. 创建一个Java类,并导入所需的类。

import com.spire.pdf.*;

3. 通过PdfDocument类的loadFromFile()方法加载PDF文档。

4. 通过索引删除指定PDF页面 (页面的索引从零开始)。

PdfDocument.getPages().removeAt(0); //此为删除第一页

5. 删除页面后,将PDF 文档保存保存至指定文件路径。

下面是完整代码,比较简单:

import com.spire.pdf.*; public class DeletePage {    public static void main(String[] args) {         //创建PdfDocument对象        PdfDocument pdf = new PdfDocument();         //加载PDF文档        pdf.loadFromFile("示例.pdf");         //删除第一页        pdf.getPages().removeAt(0);         //保存结果文件        pdf.saveToFile("删除PDF页面.pdf");        pdf.close();    }}

使用Java自动查找并删除PDF中的空白页面

1. 安装免费库Free Spire.PDF for Java后,新建一个Java类,并导入如下类:

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

2. 通过 PdfDocument 类的 loadFromFile() 方法加载PDF文档。

3. 遍历PDF中的页面并通过 PdfPageBase 类的 isBlank() 方法来检测页面是否为空白页面。

1) 如果是完全空白的页面可以使用 remove() 方法直接删除;

2) 如果不是完全空白的页面,需要先将这些页面转为图片,然后再自定义一个 isBlankImage() 方法判断转换出的图片是否为空白图片,如果是,再删除空白图片所在的页面。

4. 删除所有空白页后,将PDF文档保存保存至指定文件路径。

具体实现代码:

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("空白页.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("删除空白页.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;    }}

PdfPageBase.isBlank()方法无法检测出包含白色图片的页面,所以需要自定义一个方法来检测这些空白图片,这样才能删除PDF文档中的所有空白页。

代码执行前:

执行后: