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

使用Java對PDF添加水印的操作代碼

 更新時間:2025年10月24日 08:25:22   作者:LSTM97  
在當(dāng)今數(shù)字化辦公環(huán)境中,PDF 文檔作為信息交流和存儲的重要載體,其安全性和版權(quán)保護變得尤為關(guān)鍵,企業(yè)常常需要對內(nèi)部敏感文檔或?qū)ν獍l(fā)布的資料添加水印,以防止未經(jīng)授權(quán)的使用,本文將為您揭示這一問題的解決方案,深入探討如何使用Java對PDF添加水印,需要的朋友可以參考下

引言

在當(dāng)今數(shù)字化辦公環(huán)境中,PDF 文檔作為信息交流和存儲的重要載體,其安全性和版權(quán)保護變得尤為關(guān)鍵。企業(yè)常常需要對內(nèi)部敏感文檔或?qū)ν獍l(fā)布的資料添加水印,以防止未經(jīng)授權(quán)的使用、泄露或篡改。那么,如何通過 Java 編程高效、靈活地實現(xiàn) PDF 水印的添加呢?

本文將為您揭示這一問題的解決方案。我們將深入探討如何利用功能強大且易于集成的 Spire.PDF for Java 庫,為您的 PDF 文檔添加專業(yè)的文本水印圖片水印。通過本文提供的詳細教程和可運行的代碼示例,您將能夠輕松掌握 PDF 水印技術(shù),有效提升文檔的安全性和專業(yè)性。

認識 Spire.PDF for Java 及其在水印處理中的優(yōu)勢

Spire.PDF for Java 是一款專為 Java 應(yīng)用程序設(shè)計的專業(yè) PDF 文檔處理庫。它提供了豐富的功能,包括 PDF 的創(chuàng)建、編輯、轉(zhuǎn)換、合并、分割、加密解密以及各種高級操作,如表單填充、電子簽名和我們今天要重點討論的水印添加

該庫具有以下顯著優(yōu)勢:

  • 跨平臺兼容性:支持 Windows、Linux、macOS 等多種操作系統(tǒng),確保您的應(yīng)用在不同環(huán)境下穩(wěn)定運行。
  • 功能豐富:不僅限于水印,還涵蓋了 PDF 處理的方方面面,滿足企業(yè)級應(yīng)用需求。
  • 易于集成:提供清晰的 API 接口和詳細的文檔,開發(fā)者可以快速上手并將其集成到現(xiàn)有項目中。
  • 高性能:優(yōu)化了處理效率,能夠快速處理大量 PDF 文檔。
  • 靈活的水印配置:允許開發(fā)者精細控制水印的文本內(nèi)容、字體、顏色、大小、透明度、旋轉(zhuǎn)角度、位置等,以及圖片水印的尺寸、位置和透明度。

如何獲取和配置 Spire.PDF for Java 依賴

要開始使用 Spire.PDF for Java,您需要將其作為依賴添加到您的 Maven 項目中。

Maven 依賴示例:

<repositories>
    <repository>
        <id>e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.pdf</artifactId>
        <version>5.12.7</version> <!-- 請?zhí)鎿Q為最新版本 -->
    </dependency>
</dependencies>

如何使用 Java 添加文本水印到 PDF

添加文本水印是保護文檔版權(quán)和防止濫用的常見方法。Spire.PDF for Java 提供了強大的功能來定制文本水印的外觀。

以下是添加文本水印的詳細步驟和代碼示例:

  1. 加載 PDF 文檔:使用 PdfDocument 類加載現(xiàn)有 PDF 文件。
  2. 創(chuàng)建水印內(nèi)容:定義水印文本、字體、大小、顏色、旋轉(zhuǎn)角度和透明度等屬性。
  3. 遍歷頁面并應(yīng)用水印:遍歷 PDF 文檔的每一個頁面,并在頁面上繪制水印。為了實現(xiàn)頁面的平鋪效果,通常會創(chuàng)建一個 PdfTilingBrush。
  4. 保存文檔:將修改后的 PDF 文檔保存到新文件或覆蓋原文件。

關(guān)鍵文本水印屬性及 API 方法

屬性描述對應(yīng) API 方法/類
內(nèi)容水印顯示的文字PdfTilingBrush.getGraphics().drawString()
字體水印文本的字體PdfFont
大小水印文本的字號PdfFont
顏色水印文本的顏色PdfBrushes.getColor()
透明度水印的透明度(0-1,1為完全不透明)PdfTilingBrush.getGraphics().setTransparency()
旋轉(zhuǎn)角度水印文本的旋轉(zhuǎn)角度PdfTilingBrush.getGraphics().rotateTransform()
位置水印在頁面上的起始位置PdfTilingBrush.getGraphics().translateTransform()

Java 代碼示例:添加文本水印

import com.spire.pdf.*;
import com.spire.pdf.graphics.*;

import java.awt.*;
import java.awt.geom.Dimension2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.io.IOException;

public class AddTextWatermark {
    public static void main(String[] args) throws IOException {
        // 1. 加載PDF文檔
        PdfDocument doc = new PdfDocument();
        doc.loadFromFile("input.pdf"); // 確保input.pdf存在

        // 水印文本
        String watermarkText = "公司機密 嚴(yán)禁轉(zhuǎn)載";

        // 遍歷PDF文檔的每個頁面
        for (int i = 0; i < doc.getPages().getCount(); i++) {
            PdfPageBase page = doc.getPages().get(i);

            // 創(chuàng)建一個尺寸與頁面相同的模板,用于繪制水印
            PdfTemplate template = new PdfTemplate(page.getClientSize().getWidth(), page.getClientSize().getHeight());

            // 繪制水印到模板
            drawTextWatermarkToTemplate(template, watermarkText);

            // 創(chuàng)建一個矩形,覆蓋整個頁面,用于放置水印
            Rectangle2D loRect = new Rectangle2D.Float();
            loRect.setFrame(new Point2D.Float(0, 0), page.getClientSize());

            // 創(chuàng)建水印注釋
            PdfWatermarkAnnotation watermarkAnnotation = new PdfWatermarkAnnotation(loRect);
            PdfAppearance appearance = new PdfAppearance(watermarkAnnotation);
            appearance.setNormal(template); // 將繪制了水印的模板設(shè)為水印注釋的正常外觀
            watermarkAnnotation.setAppearance(appearance);
            
            // 將水印注釋添加到當(dāng)前頁面的注釋集合中
            page.getAnnotationsWidget().add(watermarkAnnotation);
        }

        // 4. 保存帶有水印的PDF文檔
        doc.saveToFile("output_text_watermark.pdf");
        doc.close();
        System.out.println("文本水印添加成功!文件已保存為 output_text_watermark.pdf");
    }

    private static void drawTextWatermarkToTemplate(PdfTemplate template, String watermark) {
        // 創(chuàng)建一個刷子,用于平鋪水印
        // 水印的尺寸設(shè)為模板寬度的一半,高度的三分之一,以實現(xiàn)重復(fù)平鋪效果
        Dimension2D dimension2D = new Dimension();
        dimension2D.setSize(template.getWidth() / 2, template.getHeight() / 3);
        PdfTilingBrush brush = new PdfTilingBrush(dimension2D);

        // 設(shè)置水印的透明度為 0.3 (30%)
        brush.getGraphics().setTransparency(0.3f);

        // 保存當(dāng)前圖形狀態(tài)
        brush.getGraphics().save();

        // 旋轉(zhuǎn)水印,通常為負45度
        brush.getGraphics().rotateTransform(-45);

        // 設(shè)置字體和顏色
        PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 24f, PdfFontStyle.Bold);
        PdfStringFormat format = new PdfStringFormat();
        format.setAlignment(PdfStringAlignment.Center);
        format.setLineAlignment(PdfVerticalAlignment.Middle);

        // 在刷子上繪制水印文本
        // 調(diào)整繪制位置,使其在刷子區(qū)域內(nèi)居中
        brush.getGraphics().drawString(watermark, font, PdfBrushes.getGray(),
                (float) brush.getSize().getWidth() / 2, (float) brush.getSize().getHeight() / 2, format);

        // 恢復(fù)圖形狀態(tài)
        brush.getGraphics().restore();

        // 將繪制了水印的刷子應(yīng)用到模板上
        template.getGraphics().drawRectangle(brush, new Rectangle2D.Float(0, 0, template.getWidth(), template.getHeight()));
    }
}

如何使用 Java 添加圖片水印到 PDF

除了文本水印,圖片水?。ㄈ绻?Logo、保密圖章等)也是一種常見的文檔保護手段。Spire.PDF for Java 同樣支持添加圖片水印,并提供靈活的配置選項。

以下是添加圖片水印的詳細步驟和代碼示例:

  1. 加載 PDF 文檔:使用 PdfDocument 加載現(xiàn)有 PDF 文件。
  2. 加載圖片文件:使用 PdfImage.fromFile() 方法加載圖片文件作為水印。
  3. 設(shè)置圖片水印屬性:定義圖片水印的位置、大小、透明度和旋轉(zhuǎn)角度。
  4. 遍歷頁面并應(yīng)用水印:遍歷 PDF 文檔的每個頁面,并在指定位置繪制圖片。
  5. 保存文檔:將修改后的 PDF 文檔保存。

關(guān)鍵圖片水印屬性及 API 方法

屬性描述對應(yīng) API 方法/類
來源水印圖片文件的路徑PdfImage.fromFile()
位置水印在頁面上的 X, Y 坐標(biāo)page.getCanvas().drawImage()
大小水印圖片的寬度和高度page.getCanvas().drawImage()
透明度水印的透明度(0-1,1為完全不透明)PdfGraphics.setTransparency()
旋轉(zhuǎn)角度水印圖片的旋轉(zhuǎn)角度PdfGraphics.rotateTransform()

Java 代碼示例:添加圖片水印

import com.spire.pdf.*;
import com.spire.pdf.graphics.*;

import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.io.IOException;

public class AddImageWatermark {
    public static void main(String[] args) throws IOException {
        // 1. 加載PDF文檔
        PdfDocument doc = new PdfDocument();
        doc.loadFromFile("input.pdf"); // 確保input.pdf存在

        // 2. 加載圖片文件作為水印
        PdfImage image = PdfImage.fromFile("watermark.png"); // 確保watermark.png存在

        // 遍歷PDF文檔的每個頁面
        for (int i = 0; i < doc.getPages().getCount(); i++) {
            PdfPageBase page = doc.getPages().get(i);

            // 創(chuàng)建一個尺寸與頁面相同的模板
            PdfTemplate template = new PdfTemplate(page.getClientSize().getWidth(), page.getClientSize().getHeight());

            // 設(shè)置模板的圖形透明度
            template.getGraphics().setTransparency(0.2f); // 20% 透明度

            // 計算圖片水印的位置和大小
            float imgWidth = image.getWidth() * 0.5f; // 圖片寬度縮放為原始的50%
            float imgHeight = image.getHeight() * 0.5f; // 圖片高度縮放為原始的50%
            
            // 將水印放置在頁面中心
            float x = (page.getClientSize().getWidth() - imgWidth) / 2;
            float y = (page.getClientSize().getHeight() - imgHeight) / 2;

            // 繪制圖片水印到模板
            template.getGraphics().drawImage(image, x, y, imgWidth, imgHeight);

            // 創(chuàng)建一個矩形,覆蓋整個頁面,用于放置水印
            Rectangle2D loRect = new Rectangle2D.Float();
            loRect.setFrame(new Point2D.Float(0, 0), page.getClientSize());

            // 創(chuàng)建水印注釋
            PdfWatermarkAnnotation watermarkAnnotation = new PdfWatermarkAnnotation(loRect);
            PdfAppearance appearance = new PdfAppearance(watermarkAnnotation);
            appearance.setNormal(template); // 將繪制了水印的模板設(shè)為水印注釋的正常外觀
            watermarkAnnotation.setAppearance(appearance);

            // 將水印注釋添加到當(dāng)前頁面的注釋集合中
            page.getAnnotationsWidget().add(watermarkAnnotation);
        }

        // 4. 保存帶有水印的PDF文檔
        doc.saveToFile("output_image_watermark.pdf");
        doc.close();
        System.out.println("圖片水印添加成功!文件已保存為 output_image_watermark.pdf");
    }
}

總結(jié)

通過本文的詳細教程,您已經(jīng)掌握了如何使用 Spire.PDF for Java 庫為 PDF 文檔添加文本水印圖片水印的關(guān)鍵技術(shù)。我們深入探討了 Spire.PDF for Java 的優(yōu)勢、依賴配置,并提供了清晰、可操作的代碼示例,涵蓋了水印內(nèi)容設(shè)置、樣式調(diào)整、透明度控制以及頁面應(yīng)用等核心環(huán)節(jié)。

Spire.PDF for Java 憑借其強大的功能和靈活的 API 設(shè)計,使得在 Java 應(yīng)用程序中實現(xiàn)專業(yè)的 PDF 水印功能變得異常簡單和高效。無論是為了保護企業(yè)機密、確保版權(quán)所有,還是提升文檔的專業(yè)形象,掌握這一技術(shù)都將為您的項目帶來顯著價值。

現(xiàn)在,您可以將這些知識和代碼應(yīng)用于您的實際項目中,提升文檔的安全性和管理水平。希望本文能為您在 Java PDF 處理領(lǐng)域提供有益的參考和幫助!

以上就是使用Java對PDF添加水印的操作代碼的詳細內(nèi)容,更多關(guān)于Java對PDF添加水印的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Springboot升級至2.4.0中出現(xiàn)的跨域問題分析及修改方案

    Springboot升級至2.4.0中出現(xiàn)的跨域問題分析及修改方案

    這篇文章主要介紹了Springboot升級至2.4.0中出現(xiàn)的跨域問題分析及修改方案,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Spring依賴注入的幾種方式分享梳理總結(jié)

    Spring依賴注入的幾種方式分享梳理總結(jié)

    這篇文章主要介紹了Spring依賴注入的幾種方式分享梳理總結(jié),文章圍繞主題展開詳細,具有一定參考價值,需要的朋友可以參考一下
    2022-07-07
  • Java實現(xiàn)中文字符串與unicode互轉(zhuǎn)工具類

    Java實現(xiàn)中文字符串與unicode互轉(zhuǎn)工具類

    這篇文章主要為大家詳細介紹了Java實現(xiàn)中文字符串與unicode互轉(zhuǎn)的工具類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • java實現(xiàn)2048游戲源代碼

    java實現(xiàn)2048游戲源代碼

    這篇文章主要為大家詳細介紹了java實現(xiàn)2048游戲源代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • SpringBoot集成Liquibase的詳細步驟

    SpringBoot集成Liquibase的詳細步驟

    Liquibase 是一個強大的數(shù)據(jù)庫版本控制工具,能夠與 Spring Boot
    無縫集成,以簡化數(shù)據(jù)庫遷移和管理的過程,以下是從開始集成到最終運行的詳細步驟,需要的朋友可以參考下
    2024-12-12
  • Java實現(xiàn)加油站支付小程序功能(存款與消費)

    Java實現(xiàn)加油站支付小程序功能(存款與消費)

    本文給大家介紹Java實現(xiàn)加油站支付小程序功能(存款與消費),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-08-08
  • Java微信公眾平臺之消息管理

    Java微信公眾平臺之消息管理

    這篇文章主要為大家詳細介紹了Java微信公眾平臺之消息管理的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Java8語法糖之Lambda表達式的深入講解

    Java8語法糖之Lambda表達式的深入講解

    這篇文章主要給大家介紹了關(guān)于Java8語法糖之Lambda表達式的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 淺談SpringCloud的微服務(wù)架構(gòu)組件

    淺談SpringCloud的微服務(wù)架構(gòu)組件

    這篇文章主要介紹了淺談SpringCloud的微服務(wù)架構(gòu)組件,Spring Cloud根據(jù)分布式服務(wù)協(xié)調(diào)治理的需求成立了許多子項目,每個項目通過特定的組件去實現(xiàn),需要的朋友可以參考下
    2023-04-04
  • Spring中的@Autowired、@Qualifier和@Primary注解詳解

    Spring中的@Autowired、@Qualifier和@Primary注解詳解

    這篇文章主要介紹了Spring中的@Autowired、@Qualifier和@Primary注解詳解,@Autowired?注解,可以對類成員變量、方法和構(gòu)造函數(shù)進行標(biāo)注,完成自動裝配的工作,@Autowired?是默認根據(jù)?byType?進行自動裝配的,需要的朋友可以參考下
    2023-11-11

最新評論

龙游县| 福州市| 奈曼旗| 谢通门县| 望城县| 平塘县| 凤冈县| 清水县| 修武县| 东阳市| 江安县| 洛阳市| 武山县| 来宾市| 大宁县| 阿拉善右旗| 松滋市| 淅川县| 马公市| 民丰县| 伊春市| 佛冈县| 富锦市| 象山县| 孟州市| 奉新县| 福建省| 灯塔市| 遵化市| 沾益县| 英德市| 中阳县| 张家口市| 涟水县| 岫岩| 剑川县| 缙云县| 赞皇县| 宜丰县| 靖边县| 侯马市|