最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文詳解如何使用Java獲取PDF頁面信息

 更新時間:2025年07月15日 16:08:46   作者:nuclear2011  
了解 PDF 頁面屬性是我們在處理文檔、內(nèi)容提取、打印設(shè)置或頁面重組等任務(wù)時不可或缺的一環(huán),下面我們就來看看如何使用Java語言獲取這些信息吧

引言

了解 PDF 頁面屬性是我們在處理文檔、內(nèi)容提取、打印設(shè)置或頁面重組等任務(wù)時不可或缺的一環(huán)。PDF 文件可能包含多個頁面,而這些頁面可能具有不同的寬高、旋轉(zhuǎn)角度、方向模式甚至自定義標(biāo)簽和邊框信息。

本文將介紹如何使用 Java 讀取 PDF 頁面信息,包括:

  • 獲取 PDF 頁數(shù)
  • 獲取頁面尺寸(寬高)
  • 獲取頁面旋轉(zhuǎn)角度
  • 判斷頁面方向(橫向 / 縱向)
  • 獲取頁面標(biāo)簽
  • 獲取頁面邊框信息(MediaBox、CropBox 等)

一、安裝和引入PDF處理庫

要在 Java 中獲取 PDF 頁面信息,可使用 Spire.PDF for Java 庫。它支持加載、解析、編輯和導(dǎo)出 PDF 文件。

引入依賴

1. Maven項(xiàng)目

如果你使用 Maven 構(gòu)建項(xiàng)目,可在 pom.xml 中添加如下依賴:

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>

<dependency>
    <groupId>e-iceblue</groupId>
    <artifactId>spire.pdf</artifactId>
    <version>11.7.0</version>
</dependency>

2. 非Maven項(xiàng)目

對于非 Maven 項(xiàng)目,你可以前往 官網(wǎng) 下載 jar 包并手動導(dǎo)入項(xiàng)目。

二、獲取 PDF 頁數(shù)

了解 PDF 的總頁數(shù)是處理文檔的第一步,它可以幫助我們執(zhí)行分頁提取、范圍打印或頁面遍歷等操作。

實(shí)現(xiàn)步驟:

  • 創(chuàng)建 PdfDocument 對象;
  • 使用 PdfDocument.loadFromFile() 方法打開 PDF 文檔;
  • 調(diào)用 PdfDocument.getPages().getCount() 獲取頁數(shù)。

示例代碼:

import com.spire.pdf.*;

public class GetPageCount {
public static void main(String[] args) {
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("測試.pdf");

        int pageCount = pdf.getPages().getCount();
        System.out.println("該 PDF 共 " + pageCount + " 頁。");

        pdf.close();
    }
}

三、獲取頁面尺寸(寬高)

頁面的尺寸決定了內(nèi)容的排版范圍,不同的 PDF 頁面可能采用不同的紙張標(biāo)準(zhǔn),如 A4、Letter 或自定義大小。

實(shí)現(xiàn)步驟:

  • 打開 PDF 文檔;
  • 使用PdfDocument.getPages().get()方法獲取指定頁面(通過索引);
  • 調(diào)用 PdfPageBase.getSize().getWidth() 和 PdfPageBase.getSize().getHeight() 方法獲取寬高信息;
  • 輸出尺寸數(shù)據(jù)。

示例代碼:

import com.spire.pdf.*;

public class GetPageSize {
    public static void main(String[] args) {
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("測試.pdf");

        PdfPageBase page = pdf.getPages().get(0); // 獲取第一頁
        double width = page.getSize().getWidth();
        double height = page.getSize().getHeight();

        System.out.printf("第一頁尺寸為:%.2f x %.2f pt%n", width, height);

        pdf.close();
    }
}

注意,頁面尺寸默認(rèn)單位為 pt(磅),1 英寸 = 72 磅。如果你需要將尺寸轉(zhuǎn)換為英寸、像素、厘米或毫米進(jìn)行打印適配或前端渲染,可以使用 PdfUnitConvertor 類進(jìn)行單位轉(zhuǎn)換:

float pointValue = 595.0f; // 示例:A4 寬度為 595 pt

PdfUnitConvertor converter = new PdfUnitConvertor();

float inch = converter.convertUnits(pointValue, PdfGraphicsUnit.Point, PdfGraphicsUnit.Inch);
float pixel = converter.convertUnits(pointValue, PdfGraphicsUnit.Point, PdfGraphicsUnit.Pixel);
float mm = converter.convertUnits(pointValue, PdfGraphicsUnit.Point, PdfGraphicsUnit.Millimeter);
float cm = converter.convertUnits(pointValue, PdfGraphicsUnit.Point, PdfGraphicsUnit.Centimeter);

System.out.printf("595 pt 對應(yīng):%.2f 英寸,%.2f 像素,%.2f 毫米,%.2f 厘米%n", inch, pixel, mm, cm);

四、獲取頁面旋轉(zhuǎn)角度

頁面旋轉(zhuǎn)信息可以幫助我們判斷是否需要在程序中進(jìn)行角度還原或頁面調(diào)整,避免內(nèi)容呈現(xiàn)異常。

實(shí)現(xiàn)步驟:

  • 打開 PDF 文檔;
  • 獲取目標(biāo)頁面;
  • 使用 PdfPageBase.getRotation().getValue() 方法獲取旋轉(zhuǎn)角度;
  • 輸出角度信息。

示例代碼:

import com.spire.pdf.*;

public class GetPageRotation {
    public static void main(String[] args) {
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("測試.pdf");

        PdfPageBase page = pdf.getPages().get(0);
        int rotation = page.getRotation().getValue();

        System.out.println("第一頁旋轉(zhuǎn)角度為:" + rotation + "°");

        pdf.close();
    }
}

五、判斷頁面方向(橫向 / 縱向)

PDF 頁面可分為 Portrait(縱向)和 Landscape(橫向),不同方向適用于不同類型的內(nèi)容展示(如文字或表格)。

實(shí)現(xiàn)步驟:

  • 打開 PDF 文檔;
  • 獲取目標(biāo)頁面;
  • 調(diào)用 PdfPageBase.getSize().getWidth() 和 PdfPageBase.getSize().getHeight() 方法獲取頁面的寬高信息;
  • 比較寬度與高度。若寬度 > 高度,則為橫向,否則為縱向;
  • 輸出頁面方向信息。

示例代碼:

import com.spire.pdf.*;

public class GetPageOrientation {
    public static void main(String[] args) {
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("測試.pdf");

        PdfPageBase page = pdf.getPages().get(0);
        double width = page.getSize().getWidth();
        double height = page.getSize().getHeight();

        String orientation = width > height ? "橫向" : "縱向";
        System.out.println("第一頁頁面方向?yàn)椋? + orientation);

        pdf.close();
    }
}

六、獲取頁面標(biāo)簽

PDF 頁面標(biāo)簽(Page Label)可用于自定義頁碼(如 i, ii, iii, A-1, A-2),對于章節(jié)分隔、目錄定位等功能尤為常見。

實(shí)現(xiàn)步驟:

  • 打開 PDF 文檔并獲取目標(biāo)頁面;
  • 使用 PdfPageBase.getPageLabel() 方法獲取目標(biāo)頁的標(biāo)簽文字;
  • 判斷標(biāo)簽文字是否存在。若存在,輸出標(biāo)簽信息,否則輸出“無標(biāo)簽”。

示例代碼:

import com.spire.pdf.*;

public class GetPageLabel {
    public static void main(String[] args) {
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("示例.pdf");

        PdfPageBase page = pdf.getPages().get(0);

        String label = page.getPageLabel();
        String labelText = (label != null && !label.trim().isEmpty()) ? label : "無標(biāo)簽";

        System.out.println("第一頁頁面標(biāo)簽為:" + labelText);

        pdf.close();
    }
}

七、獲取頁面邊框信息

PDF 頁面所定義的邊框不僅用于限制內(nèi)容的顯示范圍,還涵蓋多個與印刷和裁切相關(guān)的區(qū)域。這些邊框各自承擔(dān)不同的功能,例如用于標(biāo)識紙張尺寸、設(shè)置可視區(qū)域、預(yù)留出血位置以及定義裁切和內(nèi)容區(qū)域等。下圖展示了這些邊框在頁面中的分布情況:

邊框類型說明
MediaBox頁面介質(zhì)框,表示紙張的實(shí)際物理尺寸范圍
CropBox裁剪框,定義最終用于顯示或打印的區(qū)域
BleedBox出血框,用于印刷時預(yù)留的出血區(qū)域
TrimBox成品框,表示裁剪后的頁面成品大小
ArtBox作品框,限定頁面中有效的內(nèi)容區(qū)域

實(shí)現(xiàn)步驟:

  • 打開PDF文檔并獲取目標(biāo)頁面;
  • 分別使用PdfPageBase類的 getMediaBox()、getCropBox()、getBleedBox()、getTrimBox()、getArtBox() 方法獲取各個對應(yīng)的邊框信息;
  • 分別使用 Rectangle2D類的getWidth()、getHeight()、getX()、getY() 方法讀取每個邊框的寬度、高度、以及X和Y坐標(biāo)等屬性值,輸出結(jié)果。

示例代碼:

import com.spire.pdf.*;
import java.awt.geom.Rectangle2D;

public class GetPageBoxes {
    public static void main(String[] args) {
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("測試.pdf");

        PdfPageBase page = pdf.getPages().get(0);

        Rectangle2D mediaBox = page.getMediaBox();
        Rectangle2D cropBox = page.getCropBox();
        Rectangle2D bleedBox = page.getBleedBox();
        Rectangle2D trimBox = page.getTrimBox();
        Rectangle2D artBox = page.getArtBox();

        System.out.printf("MediaBox: 寬 %.2f, 高 %.2f, X %.2f, Y %.2f%n",
                mediaBox.getWidth(), mediaBox.getHeight(), mediaBox.getX(), mediaBox.getY());
        System.out.printf("CropBox: 寬 %.2f, 高 %.2f, X %.2f, Y %.2f%n",
                cropBox.getWidth(), cropBox.getHeight(), cropBox.getX(), cropBox.getY());
        System.out.printf("BleedBox: 寬 %.2f, 高 %.2f, X %.2f, Y %.2f%n",
                bleedBox.getWidth(), bleedBox.getHeight(), bleedBox.getX(), bleedBox.getY());
        System.out.printf("TrimBox: 寬 %.2f, 高 %.2f, X %.2f, Y %.2f%n",
                trimBox.getWidth(), trimBox.getHeight(), trimBox.getX(), trimBox.getY());
        System.out.printf("ArtBox: 寬 %.2f, 高 %.2f, X %.2f, Y %.2f%n",
                artBox.getWidth(), artBox.getHeight(), artBox.getX(), artBox.getY());

        pdf.close();
    }
}

到此這篇關(guān)于一文詳解如何使用Java獲取PDF頁面信息的文章就介紹到這了,更多相關(guān)Java獲取PDF信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java 細(xì)致圖解帶你分析漢諾塔

    Java 細(xì)致圖解帶你分析漢諾塔

    漢諾塔問題是一個經(jīng)典的問題。漢諾塔(Hanoi Tower),又稱河內(nèi)塔,源于印度一個古老傳說。本文將用Java求解這一問題,感興趣的可以學(xué)習(xí)一下
    2022-03-03
  • IntelliJ IDEA 2021 Tomcat 8啟動亂碼問題的解決步驟

    IntelliJ IDEA 2021 Tomcat 8啟動亂碼問題的解決步驟

    很多朋友遇到過IntelliJ IDEA 2021 Tomcat 8啟動的時候出現(xiàn)各種奇葩問題,最近有童鞋反映IntelliJ IDEA 2021 Tomcat 8啟動亂碼,正好我也遇到這個問題,下面我把解決方法分享給大家需要的朋友參考下吧
    2021-06-06
  • SpringMVC使用@Valid注解實(shí)現(xiàn)數(shù)據(jù)驗(yàn)證的代碼示例

    SpringMVC使用@Valid注解實(shí)現(xiàn)數(shù)據(jù)驗(yàn)證的代碼示例

    在 Web 開發(fā)中,數(shù)據(jù)驗(yàn)證是一個非常重要的環(huán)節(jié),它可以確保數(shù)據(jù)的合法性和正確性,保護(hù)系統(tǒng)不受到惡意攻擊或用戶誤操作的影響,在 SpringMVC 中,我們可以使用 @Valid 注解來實(shí)現(xiàn)數(shù)據(jù)驗(yàn)證,所以本文就給大家介紹具體的使用方法,需要的朋友可以參考下
    2023-07-07
  • java發(fā)送http請求時如何處理異步回調(diào)結(jié)果

    java發(fā)送http請求時如何處理異步回調(diào)結(jié)果

    這篇文章主要介紹了java發(fā)送http請求時如何處理異步回調(diào)結(jié)果問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Java全面詳細(xì)講解邏輯控制的使用

    Java全面詳細(xì)講解邏輯控制的使用

    在程序開發(fā)的過程之中一共會存在三種程序邏輯:順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu),對于之前所編寫的代碼大部分都是順序結(jié)構(gòu)的定義,即:所有的程序?qū)凑斩x的代碼順序依次執(zhí)行,讓我們來深入探討一下
    2022-04-04
  • JAVA拋出異常的三種形式詳解

    JAVA拋出異常的三種形式詳解

    這篇文章主要介紹了JAVA拋出異常的三種形式詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Java源碼解析阻塞隊列ArrayBlockingQueue介紹

    Java源碼解析阻塞隊列ArrayBlockingQueue介紹

    今天小編就為大家分享一篇關(guān)于Java源碼解析阻塞隊列ArrayBlockingQueue介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 一次 Java 內(nèi)存泄漏的排查解決過程詳解

    一次 Java 內(nèi)存泄漏的排查解決過程詳解

    這篇文章主要介紹了一次 Java 內(nèi)存泄漏的排查過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • 使用Maven打包時排除指定的目錄或指定的類

    使用Maven打包時排除指定的目錄或指定的類

    在maven項(xiàng)目中,通過修改pom.xml文件,在maven-compiler-plugin的configuration>excludes節(jié)點(diǎn)下添加排除匹配條件,可以剔除掉生產(chǎn)包中的測試類,注意使用**表示多級目錄匹配,*表示一級目錄匹配
    2024-11-11
  • 在SpringBoot中記錄用戶操作日志功能

    在SpringBoot中記錄用戶操作日志功能

    在Web應(yīng)用程序開發(fā)中,記錄用戶操作日志是一項(xiàng)非常重要的任務(wù),它可以幫助我們追蹤用戶行為,分析系統(tǒng)狀況,以及審計系統(tǒng)的安全性,本文將介紹如何在SpringBoot框架中實(shí)現(xiàn)用戶操作日志的記錄功能,感興趣的朋友一起看看吧
    2024-12-12

最新評論

天门市| 阿图什市| 天峻县| 崇文区| 锦州市| 武功县| 腾冲县| 泉州市| 阿拉善盟| 望城县| 华池县| 旺苍县| 同德县| 东平县| 海阳市| 富民县| 沿河| 新河县| 安泽县| 昌图县| 高邑县| 甘肃省| 澄江县| 宜阳县| 隆尧县| 琼海市| 朝阳县| 西畴县| 连平县| 望都县| 松滋市| 大宁县| 禹州市| 文昌市| 饶阳县| 揭阳市| 沙雅县| 金华市| 信阳市| 资兴市| 德令哈市|