國產化PDF處理控件Spire.PDF教程:Java 提取 PDF 圖片,高質量提取與圖片過濾技巧

在處理包含圖片的 PDF 文件時,例如掃描文檔、產品手冊或宣傳資料,我們經常需要將其中的圖像提取出來,用于保存、識別或再加工。E-iceblue旗下Spire系列產品,是文檔處理領域的佼佼者,支持國產化信創本文將介紹如何使用?Spire.PDF for Java?實現?從 PDF 中提取圖片,并提供基礎操作方法與高級提取技巧。無論你是在開發一個圖像提取工具,還是希望通過 Java 從 PDF 中獲取嵌入圖像,本教程都將提供實用的代碼示例和詳盡的解讀。

Spire.PDF for Java免費試用下載?

環境配置與依賴庫

在 Java 中直接處理 PDF 并提取圖像并不容易。由于 PDF 文件中的圖片可能被壓縮、編碼或嵌入在復雜結構中,使用原生 API 很難有效完成圖像提取任務。

Spire.PDF for Java?提供了簡潔的 API,能夠準確識別并提取 PDF 中的嵌入圖像,非常適合構建文檔處理和圖像提取類應用。

開發環境建議如下:

  • JDK 1.6 或更高版本
  • Spire.PDF for Java
  • 開發工具:如 IntelliJ IDEA 或 Eclipse

Maven 引入方式:

<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</artifactId><version>11.7.5</version>
</dependency>

用 Java 提取 PDF 中所有圖片

我們可以使用?PdfImageHelper?類來遍歷 PDF 各頁并提取圖像信息,然后獲取圖像內容并保存。該類可自動識別嵌入或內聯圖像,并返回其內容及元數據信息(如尺寸、位置等)。

示例代碼:

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.utilities.PdfImageHelper;
import com.spire.pdf.utilities.PdfImageInfo;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;public class ExtractAllImagePDF {public static void main(String[] args) throws IOException {// 創建 PdfDocument 類的實例PdfDocument pdf = new PdfDocument();// 加載 PDF 文件pdf.loadFromFile("input.pdf");// 創建 PdfImageHelper 類的實例PdfImageHelper imageHelper = new PdfImageHelper();// 遍歷 PDF 的每一頁,提取圖片for (int i = 0; i < pdf.getPages().getCount(); i++) {PdfPageBase page = pdf.getPages().get(i);// 獲取當前頁面上的圖片信息PdfImageInfo[] imagesInfo = imageHelper.getImagesInfo(page);// 遍歷所有圖片信息for (int j = 0; j < imagesInfo.length; j++) {PdfImageInfo imageInfo = imagesInfo[j];// 獲取圖片并保存為文件BufferedImage image = imageInfo.getImage();File file = new File("output/Images/Page" + i+1 + "_Image" + j+1 + ".png");ImageIO.write(image, "png", file);           // 寫入文件}}// 關閉文檔pdf.close();}
}

提示:確保執行前已創建好“output”目錄,否則將拋出 IOException。

說明:

  • PdfImageHelper.getImagesInfo()?會返回當前頁面中所有圖像的數組;
  • 每個?PdfImageInfo?包含圖像本體、位置、分辨率等元數據;
  • 使用?ImageIO.write()?可將圖像保存為 PNG、JPG、BMP 等格式。

該方法適用于大多數含圖 PDF,可快速提取圖片資源:

進階技巧:過濾背景圖與小圖標

某些 PDF 頁面會包含水印、邊框、按鈕等裝飾性圖像。為避免提取這些不必要內容,可通過以下策略進行優化:

1. 跳過背景圖像

一些 PDF 頁面包含背景圖,而提取時背景圖通常會作為第一張圖片,可通過跳過首個圖像過濾背景圖:

for (int i = 1; i < imagesInfo.length; i++) { // 從第二張圖開始處理BufferedImage image = imagesInfo[i].getImage();ImageIO.write(image, "PNG", new File("output/image_" + (i - 1) + ".png"));
}

還可以使用 imagesInfo[].getBounds() 獲取圖像位置與尺寸,結合邏輯判斷其是否屬于背景。

2. 過濾尺寸過小的圖像元素

為避免導出圖標、按鈕等無用小圖,可設置尺寸閾值過濾掉這些小圖:

BufferedImage image = imagesInfo[i].getImage();
if (image.getWidth() > 200 && image.getHeight() > 200) {ImageIO.write(image, "PNG", new File("output/image_" + i + ".png"));
}

建議根據文檔實際情況調整尺寸閾值。

3. 輸出為不同格式或寫入流中

根據用途選擇不同格式:

ImageIO.write(image, "JPEG", new File("output/image_" + i + ".jpg"));  // 有損壓縮
ImageIO.write(image, "BMP", new File("output/image_" + i + ".bmp"));   // 無損保存
  • PNG/BMP:適合保存原始圖像,便于后續 OCR;
  • JPEG:適合網絡展示或壓縮存儲。

也可以寫入字節流,便于在線處理或上傳:

ByteArrayOutputStream stream = new ByteArrayOutputStream();
ImageIO.write(image, "PNG", stream);

常見問題解答

Java 可以提取 PDF 中的圖像嗎?

可以。Spire.PDF for Java?提供專門的圖像提取接口,能夠快速獲取頁面中的嵌入圖像。

提取的圖片是否保持原始質量?

是的。提取后的圖像保持原始分辨率與編碼。推薦使用 PNG 或 BMP 以獲取無損質量。

圖像提取與頁面渲染有何區別?

圖像提取是將 PDF 中嵌入的原始圖像提取出來;而頁面渲染是將整個 PDF 頁面(包括文字與排版)轉換為一張圖像,前者更輕量,后者更全面。

掃描版 PDF 是否也能提取圖像?

可以。大多數掃描 PDF 其實是嵌入了整頁位圖(如 JPG/TIFF),可以直接提取。

結語

通過本文的講解,我們了解了如何使用?Spire.PDF for Java?通過 Java 代碼從 PDF 文件中提取圖像,包括基礎提取方法和過濾背景圖、小圖標等進階技巧。無論是處理掃描件、設計圖,還是提取營銷資料中的圖片,我們都可以通過 Java 程序輕松提取。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91464.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91464.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91464.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Cesium 快速入門(七)材質詳解

Cesium 快速入門&#xff08;七&#xff09;材質詳解 看過的知識不等于學會。唯有用心總結、系統記錄&#xff0c;并通過溫故知新反復實踐&#xff0c;才能真正掌握一二 作為一名摸爬滾打三年的前端開發&#xff0c;開源社區給了我飯碗&#xff0c;我也將所學的知識體系回饋給大…

C++:結構體(Structure)

目錄 第一性原理出發&#xff1a;我們要解決什么問題&#xff1f; 定義結構體&#xff08;Defining Structures&#xff09; 問題&#xff1a;名字太長怎么辦&#xff1f; 如何定義結構體變量&#xff1f; 結構體的大小&#xff08;Size of Structures&#xff09; 初始化…

化學結構式解讀指南:從基礎認知到InDraw智能識別

中文名稱&#xff1a;3-[2-(二甲基氨基)乙基]-1H-吲哚英文名稱&#xff1a;3-[2-(dimethylamino)ethyl]-1H-indole分子式: C12H16N2分子量: 188.2740這是什么結構式&#xff1f;怎么繪制呢&#xff1f;可以用InDraw里的AI圖像識別這個結構式&#xff0c;也可以手動繪圖&#xf…

如何使用一臺電腦adb調試多個Android設備

目錄 一、臨時斷開其中一個設備連接 二、指定調試設備 總結 當我們使用Android調試工具調試多個設備&#xff0c;例如一開始使用adb連接了一臺Android真機進行調試&#xff0c;此時又在Android studio中打開了一個模擬機&#xff0c;此時我們在adb命令窗口中使用adb命令的…

ChatGPT的下一站:從“答案引擎”到“思維教練”

摘要&#xff1a;我們正處在一個“萬物皆可ChatGPT”的時代&#xff0c;但當它淪為最高效的“代碼搬運工”和“作業速成器”時&#xff0c;我們得到的究竟是效率的提升還是思維的退化&#xff1f;本文深入探討一個引人深思的概念——“導師模式”的AI。它不再直接提供答案&…

SpringBoot集成Flyway

SpringBoot集成Flyway_springboot flyway-CSDN博客 Flyway 本質上是一個開源的數據庫遷移工具&#xff0c;它能夠以自動化、可重復且可靠的方式管理數據庫的變更。無論是小型項目還是大型企業級應用&#xff0c;Flyway 都能助力開發者輕松應對數據庫架構的演進。它支持多種數據…

【實時Linux實戰系列】實時圖像處理應用開發

在當今快速發展的技術領域&#xff0c;實時圖像處理應用在眾多領域發揮著至關重要的作用。從自動駕駛汽車、工業自動化檢測到醫療影像診斷&#xff0c;實時圖像處理技術的應用場景無處不在。通過在實時Linux系統中開發圖像處理應用&#xff0c;開發者能夠充分利用Linux的穩定性…

Caterpillar Fungus Optimizer, CFO

核心算法解析1. 算法框架與初始化class EnhancedCFO: def __init__(self, objective_func, dim10, pop_size30, max_iter200, lb-10, ub10):??改進點??&#xff1a;針對傳統優化算法后期易停滯的問題&#xff0c;結合了精英策略、多樣性控制和自適應參數??關鍵特性??&a…

c++設計模式編程練習

一、運用觀察者模式原理編寫鳥類模型運行結果&#xff1a;二、運用簡單工廠模式編寫打怪掉裝備模型運行結果

FastMCP本地構建Server和Clinet交互

1. MCP Server介紹 MCP Server 是實現模型上下文協議&#xff08;MCP&#xff09;的服務器&#xff0c;旨在為 AI 模型提供一個標準化接口&#xff0c;連接外部數據源和工具&#xff0c;例如文件系統、數據庫或 API。 相比之下&#xff0c;在MCP出現前&#xff0c;AI調用工具…

工業企業與清潔生產匹配數據庫(1998-2015年)

1484工業企業與清潔生產匹配數據庫&#xff08;1998-2015年&#xff09;“清潔生產”近年發文趨勢及主題分布數據來源中華人民共和國生態環境部以及中國工業企業數據庫&#xff0c;由數據皮皮俠團隊整理時間跨度1998-2015年數據范圍各工業企業數據指標參考文獻孫博文,鄭世林.環…

第13屆藍橋杯C++青少組中/高級組選拔賽2022年1月22日真題

第13屆藍橋杯C青少組中/高級組選拔賽2022年1月22日真題 更多內容請查看網站&#xff1a;【試卷中心 -----> 藍橋杯----> C ----> 選拔賽】 網站鏈接 青少年軟件編程歷年真題模擬題實時更新 編程題 第 1 題 比大小 題目描述&#xff1a; 給出兩個不同的整數&#…

從0到1學PHP(七):PHP 與 HTML 表單:實現數據交互

目錄一、表單的創建與提交方式1.1 HTML 表單的基本結構1.2 GET 和 POST 提交方式的區別及適用場景二、表單數據的接收與處理2.1 使用\$_GET、\$_POST 超全局變量獲取表單數據2.2 對接收的數據進行驗證三、表單安全處理3.1 防止 XSS 攻擊的方法3.2 防止 CSRF 攻擊的措施一、表單…

Docker compose和Docker-compose的區別

Docker Compose 的兩個命令形式 docker compose&#xff08;空格連接&#xff09;與 docker-compose&#xff08;短橫線連接&#xff09;核心區別如下&#xff1a;一、技術本質docker-compose&#xff08;短橫線&#xff09;獨立可執行文件&#xff1a;早期實現方式&#xff0c…

自定心深凹槽參數檢測裝置及檢測方法 - 激光頻率梳 3D 輪廓檢測

一、引言在機械零件深凹槽檢測中&#xff0c;傳統方法常因定心不準導致檢測誤差。如平臺推表檢測時零件基準面與測量平臺難以精準對齊&#xff0c;三坐標測量需人工找正&#xff0c;效率低且誤差大。激光頻率梳 3D 輪廓檢測雖精度高&#xff0c;但缺乏自定心機制會影響深凹槽軸…

C語言---結構體(格式、用法、嵌套、初始化)、共用體、枚舉類型、typedef類型

目錄 結構體與共用體 1、結構體(struct) (1) 格式與用法 (2) 結構體允許嵌套 (3) 結構體成員初始化 (4) 指針替換變量 (5) 求結構體在內存空間所占字節 2、共用體(union) (1) 格式與概念 (2) 應用 3、枚舉類型(enum) (1) 格式與概念 (2) 應用 4、typedef 類型 結構體與共用…

輻射源定位方法簡述

文章目錄 前言 一、按照信息建模分類 1.1.時間參數 1.1.1.到達時間&#xff08;TOA, Time of Arrival&#xff09;定位 1.1.2.到達時間差&#xff08;TDOA, Time Difference of Arrival&#xff09;定位 1.2.角度參數 1.2.1.到達角度&#xff08;AOA, Angle of Arrival&a…

CamX-設置SceneMode:CONTROL_SCENE_MODE_FACE_PRIORITY不生效問題解決

應用設置CONTROL_SCENE_MODE_FACE_PRIORITY設置不生效 問題&#xff1a;app 代碼 CaptureRequest.Builder captureRequestBuilder mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);builder.set(CaptureRequest.CONTROL_SCENE_MODE, CameraMetadata.CONTRO…

MFC CChartCtrl編程

重點&#xff1a;創建CChartCtrl控件有2種方式1、直接創建CChartCtrl2、窗體上添加Custom Control&#xff08;切記一定不能是Static Text或者Picture Control&#xff0c;否則無法響應鼠標消息&#xff09;&#xff0c;然后根據ID關聯CChartCtrl控件&#xff0c;初始化代碼如下…

從0到1了解熱部署

熱部署&#xff08;Hot Deployment&#xff09;是軟件開發中一種提高開發效率的技術&#xff0c;指的是在應用程序不停止運行的情況下&#xff0c;動態更新代碼、配置或資源&#xff08;如頁面、圖片等&#xff09;&#xff0c;并讓這些修改立即生效的過程。熱部署主要用于開發…