翻譯|使用教程|編輯:吉煒煒|2025-07-28 11:46:19.627|閱讀 90 次
概述:在處理包含圖片的 PDF 文件時,例如掃描文檔、產品手冊或宣傳資料,我們經常需要將其中的圖像提取出來,用于保存、識別或再加工。本文將介紹如何使用 Spire.PDF for Java 實現 從 PDF 中提取圖片,并提供基礎操作方法與高級提取技巧。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
在處理包含圖片的 PDF 文件時,例如掃描文檔、產品手冊或宣傳資料,我們經常需要將其中的圖像提取出來,用于保存、識別或再加工。E-iceblue旗下Spire系列產品,是文檔處理領域的佼佼者,支持國產化信創。本文將介紹如何使用 Spire.PDF for Java 實現 從 PDF 中提取圖片,并提供基礎操作方法與高級提取技巧。無論你是在開發一個圖像提取工具,還是希望通過 Java 從 PDF 中獲取嵌入圖像,本教程都將提供實用的代碼示例和詳盡的解讀。
加入Spire技術交流QQ群(125237868),與更多開發者一起提升文檔開發技能。
在 Java 中直接處理 PDF 并提取圖像并不容易。由于 PDF 文件中的圖片可能被壓縮、編碼或嵌入在復雜結構中,使用原生 API 很難有效完成圖像提取任務。
Spire.PDF for Java 提供了簡潔的 API,能夠準確識別并提取 PDF 中的嵌入圖像,非常適合構建文檔處理和圖像提取類應用。
開發環境建議如下:
Maven 引入方式:
<repositories> <repository> <id>com.e-iceblue</id> <name>e-iceblue</name> <url>//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>
我們可以使用 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。
該方法適用于大多數含圖 PDF,可快速提取圖片資源:
某些 PDF 頁面會包含水印、邊框、按鈕等裝飾性圖像。為避免提取這些不必要內容,可通過以下策略進行優化:
一些 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() 獲取圖像位置與尺寸,結合邏輯判斷其是否屬于背景。
為避免導出圖標、按鈕等無用小圖,可設置尺寸閾值過濾掉這些小圖:
BufferedImage image = imagesInfo[i].getImage(); if (image.getWidth() > 200 && image.getHeight() > 200) { ImageIO.write(image, "PNG", new File("output/image_" + i + ".png")); }
建議根據文檔實際情況調整尺寸閾值。
根據用途選擇不同格式:
ImageIO.write(image, "JPEG", new File("output/image_" + i + ".jpg")); // 有損壓縮 ImageIO.write(image, "BMP", new File("output/image_" + i + ".bmp")); // 無損保存
也可以寫入字節流,便于在線處理或上傳:
ByteArrayOutputStream stream = new ByteArrayOutputStream(); ImageIO.write(image, "PNG", stream);
可以。Spire.PDF for Java 提供專門的圖像提取接口,能夠快速獲取頁面中的嵌入圖像。
是的。提取后的圖像保持原始分辨率與編碼。推薦使用 PNG 或 BMP 以獲取無損質量。
圖像提取是將 PDF 中嵌入的原始圖像提取出來;而頁面渲染是將整個 PDF 頁面(包括文字與排版)轉換為一張圖像,前者更輕量,后者更全面。
可以。大多數掃描 PDF 其實是嵌入了整頁位圖(如 JPG/TIFF),可以直接提取。
通過本文的講解,我們了解了如何使用 Spire.PDF for Java 通過 Java 代碼從 PDF 文件中提取圖像,包括基礎提取方法和過濾背景圖、小圖標等進階技巧。無論是處理掃描件、設計圖,還是提取營銷資料中的圖片,我們都可以通過 Java 程序輕松提取。
————————————————————————————————————————
關于慧都科技:
慧都科技是一家行業數字化解決方案公司,長期專注于軟件、油氣與制造行業。公司基于深入的業務理解與管理洞察,以系統化的業務建模驅動技術落地,幫助企業實現智能化運營與長期競爭優勢。在軟件工程領域,我們提供開發控件、研發管理、代碼開發、部署運維等軟件開發全鏈路所需的產品,提供正版授權采購、技術選型、個性化維保等服務,幫助客戶實現技術合規、降本增效與風險可控。慧都科技E-iceblue的官方授權代理商,提供E-iceblue系列產品免費試用,咨詢,正版銷售等于一體的專業化服務。E-iceblue旗下Spire系列產品是國產文檔處理領域的優秀產品,支持國產化信創,幫助企業高效構建文檔處理的應用程序。
歡迎下載|體驗更多E-iceblue產品
獲取更多信息請咨詢 ;技術交流Q群(125237868)
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網