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

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

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

引言

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

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

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

一、安裝和引入PDF處理庫(kù)

要在 Java 中獲取 PDF 頁(yè)面信息,可使用 Spire.PDF for Java 庫(kù)。它支持加載、解析、編輯和導(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)目

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

二、獲取 PDF 頁(yè)數(shù)

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

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

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

示例代碼:

import com.spire.pdf.*;

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

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

        pdf.close();
    }
}

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

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

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

  • 打開(kāi) PDF 文檔;
  • 使用PdfDocument.getPages().get()方法獲取指定頁(yè)面(通過(guò)索引);
  • 調(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("測(cè)試.pdf");

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

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

        pdf.close();
    }
}

注意,頁(yè)面尺寸默認(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 對(duì)應(yīng):%.2f 英寸,%.2f 像素,%.2f 毫米,%.2f 厘米%n", inch, pixel, mm, cm);

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

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

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

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

示例代碼:

import com.spire.pdf.*;

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

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

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

        pdf.close();
    }
}

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

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

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

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

示例代碼:

import com.spire.pdf.*;

public class GetPageOrientation {
    public static void main(String[] args) {
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("測(cè)試.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è)頁(yè)面方向?yàn)椋? + orientation);

        pdf.close();
    }
}

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

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

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

  • 打開(kāi) PDF 文檔并獲取目標(biāo)頁(yè)面;
  • 使用 PdfPageBase.getPageLabel() 方法獲取目標(biāo)頁(yè)的標(biāo)簽文字;
  • 判斷標(biāo)簽文字是否存在。若存在,輸出標(biāo)簽信息,否則輸出“無(wú)標(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 : "無(wú)標(biāo)簽";

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

        pdf.close();
    }
}

七、獲取頁(yè)面邊框信息

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

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

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

  • 打開(kāi)PDF文檔并獲取目標(biāo)頁(yè)面;
  • 分別使用PdfPageBase類的 getMediaBox()、getCropBox()、getBleedBox()、getTrimBox()、getArtBox() 方法獲取各個(gè)對(duì)應(yīng)的邊框信息;
  • 分別使用 Rectangle2D類的getWidth()、getHeight()、getX()、getY() 方法讀取每個(gè)邊框的寬度、高度、以及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("測(cè)試.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頁(yè)面信息的文章就介紹到這了,更多相關(guān)Java獲取PDF信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

    IntelliJ IDEA 2021 Tomcat 8啟動(dòng)亂碼問(wèn)題的解決步驟

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

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

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

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

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

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

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

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

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

    Java源碼解析阻塞隊(duì)列ArrayBlockingQueue介紹

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

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

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

    使用Maven打包時(shí)排除指定的目錄或指定的類

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

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

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

最新評(píng)論

宕昌县| 峨眉山市| 南岸区| 潍坊市| 星座| 从化市| 佛冈县| 乾安县| 武冈市| 西畴县| 旬阳县| 乌苏市| 金塔县| 海宁市| 南通市| 伊川县| 英吉沙县| 太康县| 武清区| 渝中区| 阿荣旗| 北辰区| 斗六市| 南投县| 盱眙县| 潼关县| 正阳县| 台东县| 晋宁县| 延安市| 高青县| 湄潭县| 土默特右旗| 饶平县| 七台河市| 保德县| 泸州市| 水富县| 诸暨市| 高雄县| 辛集市|