Java 刪除PDF頁面 (免費工具分享)

来源:https://www.cnblogs.com/Yesi/archive/2023/11/20/17843918.html
-Advertisement-
Play Games

對PDF頁面的增刪通常需要藉助專門的工具,而這些工具一般需要付費才能使用。那麼我們可以通過Java代碼免費實現這一功能嗎?答案是肯定的。這篇文章就教大家如何使用一個免費的國產Java庫來刪除PDF中的指定頁面或者刪除PDF中的空白頁。 使用Java快速刪除PDF中的指定頁面 1. 首先,我們需要先將 ...


對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文檔中的所有空白頁。

代碼執行前:

執行後:

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 主要涵蓋了Spring與持久層技術的整合,以及Spring與MyBatis的整合。第一章介紹了為什麼需要將Spring與持久層技術整合,以及Spring可以與哪些持久層技術進行整合。第二章詳細介紹了Spring與MyBatis的整合思路、開發步驟和編碼實例,並解決了MyBatis開發過程中存在的問題... ...
  • 背景 公司產品部收到了一些重要客戶的需求,他們希望能夠依賴獨立的資料庫存儲來支持他們的業務數據。與此同時,仍有許多中小客戶,可以繼續使用公共庫以滿足其需求。技術實現方面,此前持久層框架使用的Mybatis-plus,部分業務場景使用到了Sharding-JDBC用於分表,另外,我們的資料庫版本控制工 ...
  • 近年來,車輛保險成為廣大車主必須購買的一項重要保障。然而,如何查詢車輛保險狀態及保單信息卻是許多車主面臨的難題。隨著技術的不斷發展,API的出現為我們提供了一條便捷的解決之路。本文介紹的《車輛保險查詢API——查詢車輛保險狀態及保單信息》便是一款實用的API工具。 一、API的介紹 挖數據平臺車輛保 ...
  • hello,大家好!新手小白踏入 Python 的大門有點像冒險,但別擔心,我已經整理了一個超實用的入門指南,幫你規避學習過程中的十大雷區。這裡有關於 Python 的錯誤你應該註意的建議,一起來看看吧! 1. 拼寫錯誤 小心 prin 和 print 的奇妙之旅! # 錯誤示例 prin("Hel ...
  • 通俗解釋:單例模式 > 單:唯一 > > 例:實例 > > 單例設計模式,即某個類在整個系統中只能有一個實例對象可被獲取和使用的代碼模式 > > 例如:代表JVM運行環境的Runtime類 ...
  • 接上一隨筆,這次學習針對圖像數據的訪問(Numpy.array) 在OpenCV中,使用 imread() 方法可以訪問圖像,其返回值是一個數組,而根據傳入的不同圖像,將會返回不同維度的數組。 針對返回的圖像數據,即數組,我們是可以進行操作的: 1 import cv2 2 3 # MyPic.pn ...
  • 在開發過程中,如果需要在本地調用openAI介面進行開發調試,一般主要是通過以下兩種方式:直連和代理轉發。歡迎私信交流。 1. 直連 1.簡單粗暴,懂的都懂 2. 代理轉發 代理轉發又有兩種類型,使用第三方代理和自建代理兩種,下麵將分別舉例說明 2.1. 第三方AI網關 1.註冊Cloudflare ...
  • 在平時的開發過程中,整數越界是一個容易被忽視的問題,關註潛在的整數越界問題可使我們編寫的代碼更加健壯,規避因整數越界導致的 bug。 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...