首页 > 编程语言 >Java 删除PDF页面 (免费工具分享)

Java 删除PDF页面 (免费工具分享)

时间:2023-11-20 14:58:32浏览次数:38  
标签:Java 删除 PdfDocument pdf PDF 页面

对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文档中的所有空白页。

代码执行前:

执行后:

 

标签:Java,删除,PdfDocument,pdf,PDF,页面
From: https://www.cnblogs.com/Yesi/p/17843918.html

相关文章

  • PHP调用java的jar包方法
    制作创建测试的jar包打开idea,文件->新建项目->java模块->选择SDK->项目名称为calcutil在src中新建名为Calc.java,内容如下publicclassCalc{publicstaticintadd(inta,intb){returna+b;}}配置工件:文件->项目结构->工件->添加->jar......
  • c# AES 解密 快手店铺 java的AES加密方法
    JAVA版本的解密:/***参数说明:*message:带解密的密文*privateKey:加密密钥**/StringdecodeMessage=PlatformEventSecurityUtil.decode(message,privateKey);/***方法详情**/privatestaticfinalStringCIPHER_ALGORITHM="AES/CBC/PKCS5Padding"......
  • 这才是java对象正解
    这才是Java对象正解 在深入讨论对象之前,让我们先明确对对象和实例的理解。什么是对象?对象(Object)是内存中分配的实际数据结构,它包含了数据和方法。在Java中,对象是类的一个实例,可以是具体类(例如Child)的实例,也可以是抽象类或接口的实现类的实例。对象是具体的实体,它具有特......
  • 什么是Java中的process_reaper线程?
     随着时间的推移,我在应用程序中获得了成百上千个这样的process_reaper线程。有人知道这些可能是什么吗?它们似乎是在我的Runtime.exec()中使用的,但是我在finally语句中销毁了我的进程,但它们仍然会出现屏幕截图:http://www.dropmocks.com/mBxM5Processproc=null;Str......
  • 掌握Java面向对象OOP篇(一)
    掌握面向对象OOP篇(一)边学边记--OOP(ObjectOrientatedPrograming)1.为什么要引入面向对象?原因:封装、继承、多态举个例子理解面向对象代码的好处:比如:我们有一个实际问题,假设现在一个宠物店有两只小狗,第一只叫做小白,年龄2岁,白色;第二只叫做小红,年龄3岁,红色;现在我们的宠物......
  • JAVA分批处理数据简单示例
    功能描述在处理业务时,经常遇到需要分批次处理数据的场景,例如有105条数据,每次推送20条,分批次推送最后不足20条数据时,一次性推送全部剩余数据DEMO示例packageshiguang.test;importjava.util.ArrayList;importjava.util.List;publicclassBatchProcessingExample{......
  • [944] Extracting tables from a PDF in Python
    ToextracttablesfromaPDFinPython,wecanuseseverallibraries.Onepopularchoiceisthe tabula-pylibrary,whichisaPythonwrapperforApachePDFBox.Hereisastep-by-stepguidetogetstarted:1.Installtherequiredlibraries:pipinstalltab......
  • Java 学生管理系统
    需求:​ 采取控制台的方式去书写学生管理系统。分析:初始菜单:"-------------欢迎来到学生管理系统----------------""1:添加学生""2:删除学生""3:修改学生""4:查询学生""5:退出""请输入您的选择:"学生类:​ 属性:id、姓名、年龄、家庭住址添加功能:​ 键盘录入每一个学生信......
  • java数值前面补零
    Java数值前面补零在Java编程中,有时候我们需要对数字进行格式化,例如在输出时希望数字的前面补零。这在一些情况下是很有用的,比如显示日期、时间、序列号等。在本文中,我们将介绍几种方法来实现Java数值前面补零的操作,并提供相应的代码示例。使用String类的format方法Java中的String......
  • Java -day3
    四方法4.4命令行传递参数main方法也可以传递参数通过cmd命令提示符运行先编译注意包的位置(回退)publicclassDemo03{publicstaticvoidmain(String[]args){for(inti=0;i<args.length;i++){System.out.println(args[i]);......