欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java在?PDF?中添加數(shù)字簽名、水印與權(quán)限控制的詳細(xì)過程

 更新時(shí)間:2025年06月09日 09:54:58   作者:E-iceblue  
通過在PDF中添加數(shù)字簽名、水印以及權(quán)限控制,不僅可以防止文檔被擅自修改或打印,還能提升文檔的法律效力與專業(yè)性,下面給大家介紹Java在PDF中添加數(shù)字簽名、水印與權(quán)限控制的詳細(xì)過程,感興趣的朋友一起看看吧

一、為什么需要數(shù)字簽名、水印和權(quán)限控制?

在日常的合同管理、發(fā)票開具、文件審批等場景中,PDF 文件已經(jīng)成為企業(yè)傳遞和保存資料的標(biāo)準(zhǔn)格式。但如果缺乏有效的保護(hù)機(jī)制,PDF 內(nèi)容容易被篡改、復(fù)制或非法傳播,可能會帶來法律與安全風(fēng)險(xiǎn)。

通過在 PDF 中添加數(shù)字簽名、水印以及權(quán)限控制,不僅可以防止文檔被擅自修改或打印,還能提升文檔的法律效力與專業(yè)性,幫助企業(yè)實(shí)現(xiàn)數(shù)字化管理的安全閉環(huán)。

二、添加數(shù)字簽名:為 PDF 文件嵌入帶圖像的身份認(rèn)證簽章

在合同簽署、報(bào)表確認(rèn)等場景中,數(shù)字簽名是一種常用且可信的認(rèn)證方式。與傳統(tǒng)的蓋章或手寫簽名不同,數(shù)字簽名依賴于加密證書,可以驗(yàn)證文檔是否被篡改,并具備法律效力。借助 Spire.PDF for Java,我們可以創(chuàng)建既包含圖章圖像,又具備身份認(rèn)證能力的可視化數(shù)字簽名。

(1)簽名文件準(zhǔn)備

  • 需要一份擴(kuò)展名為 .pfx 的數(shù)字證書文件(可向 CA 機(jī)構(gòu)申請,也可自行生成測試證書)。
  • 準(zhǔn)備一張簽名圖(如公司章或手寫簽名),建議使用透明背景的 PNG 。

(2)核心步驟概覽

  • 讀取目標(biāo) PDF 文件。
  • 載入 .pfx 證書,創(chuàng)建 PdfSignature 對象。
  • 設(shè)定簽名在頁面上的位置與尺寸。
  • 填寫簽名人信息并插入簽名圖片。
  • (可選)設(shè)置禁止修改等權(quán)限。
  • 保存為新 PDF 文件。

(3)完整代碼示例(可直接復(fù)制到 IDEA 編輯和使用)

import com.spire.pdf.*;
import com.spire.pdf.graphics.*;
import com.spire.pdf.security.*;
import java.awt.*;
import java.awt.geom.*;
public class AddVisibleSignature {
    public static void main(String[] args) {
        // 創(chuàng)建 PDF 文檔對象
        PdfDocument doc = new PdfDocument();
        // 載入要簽名的 PDF 文件
        doc.loadFromFile("/示例PDF.pdf");
        // 加載證書(包含私鑰)
        PdfCertificate cert = new PdfCertificate(
            "/gary.pfx", 
            "e-iceblue");
        // 創(chuàng)建簽名對象,并指定位置和大小
        PdfSignature signature = new PdfSignature(
            doc, doc.getPages().get(0), cert, "我的簽名");
        Rectangle2D rect = new Rectangle2D.Float();
        rect.setFrame(
            new Point2D.Float(
                (float) doc.getPages().get(0).getActualSize().getWidth() - 320,
                (float) doc.getPages().get(0).getActualSize().getHeight() - 140),
            new Dimension(270, 100));
        signature.setBounds(rect);
        // 設(shè)置簽章顯示模式:圖像 + 簽章詳情
        signature.setGraphicMode(GraphicMode.Sign_Image_And_Sign_Detail);
        // 填寫簽章信息(會顯示在頁面上)
        signature.setNameLabel("簽名:");
        signature.setName("我");
        signature.setContactInfoLabel("聯(lián)系方式:");
        signature.setContactInfo("02881705109");
        signature.setDateLabel("日期:");
        signature.setDate(new java.util.Date());
        signature.setLocationInfoLabel("地址:");
        signature.setLocationInfo("成都");
        signature.setReasonLabel("原因:");
        signature.setReason("文件簽署確認(rèn)");
        signature.setDistinguishedNameLabel("DN:");
        signature.setDistinguishedName(
            signature.getCertificate().get_IssuerName().getName());
        // 設(shè)置簽名圖像(如公司印章或簽字)
        signature.setSignImageSource(
            PdfImage.fromFile("/簽名.png"));
        // 設(shè)置簽名文字字體
        signature.setSignDetailsFont(
            new PdfFont(PdfFontFamily.Helvetica, 10f, PdfFontStyle.Regular));
        // 設(shè)置文檔權(quán)限:禁止修改
        signature.setDocumentPermissions(PdfCertificationFlags.Forbid_Changes);
        signature.setCertificated(true); // 標(biāo)記為已簽名
        // 保存為新文件
        doc.saveToFile("/電子簽名.pdf");
        doc.close();
    }
}

(4)效果預(yù)覽:

(Java 在 PDF 中添加電子簽名)

注意事項(xiàng):

  • .pfx 證書需提前準(zhǔn)備,可由 CA 機(jī)構(gòu)頒發(fā),也可自行生成測試用證書。
  • 簽名圖片支持 PNG、JPG 等常見格式。
  • 簽名位置坐標(biāo)以 PDF 頁面左下角為原點(diǎn),注意單位是磅(point)。

三、添加文本水?。簽?PDF 文檔標(biāo)注身份標(biāo)識

在企業(yè)內(nèi)部資料、報(bào)表、審閱稿等文檔中,添加水印是一種常見做法,既可防止文件被誤用,又能在視覺上標(biāo)明文檔用途(如“僅供內(nèi)部使用”、“樣稿”、“機(jī)密”等)。相較于手工添加圖層,使用程序批量插入文字水印更高效、統(tǒng)一。

借助 Spire.PDF for Java,我們可以在所有頁面中居中插入帶旋轉(zhuǎn)角度和透明度的文本水印,字體、顏色、位置均可自定義。

(1)操作步驟概覽

  • 讀取目標(biāo) PDF 文件;
  • 創(chuàng)建字體對象并計(jì)算水印偏移;
  • 遍歷每一頁,設(shè)置透明度、旋轉(zhuǎn)角度和繪圖位置;
  • 繪制文本水印;
  • 保存為新 PDF 文件。

(2)完整代碼示例(可直接復(fù)制到 IDEA 使用)

import com.spire.pdf.*;
import com.spire.pdf.graphics.*;
import java.awt.*;
public class insertSingleTextWaterMark {
   public static void main(String[] args) {
       // 創(chuàng)建一個(gè) PdfDocument 實(shí)例
       PdfDocument pdf = new PdfDocument();
       // 加載 PDF 文檔
       pdf.loadFromFile("/示例PDF.pdf");
       // 遍歷每一頁以便插入水印
       String text = "示例文檔";
       PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("FangSong", Font.BOLD, 50));
       float set1 = (float) (font.measureString(text).getWidth() * Math.sqrt(2)/4);
       float set2 = (float) (font.measureString(text).getHeight() * Math.sqrt(2)/4);
       for (int i = 0; i < pdf.getPages().getCount(); i++){
           // 獲取頁面
           PdfPageBase page = pdf.getPages().get(i);
           // 設(shè)置水印的透明度
           page.getCanvas().setTransparency(0.8f);
           // 設(shè)置坐標(biāo)的平移量
           page.getCanvas().translateTransform(page.getCanvas().getSize().getWidth()/2 - set1 - set2, page.getCanvas().getSize().getHeight()/2 + set1 - set2);
           // 設(shè)置旋轉(zhuǎn)角度
           page.getCanvas().rotateTransform(-45);
           // 在頁面上繪制水印文本
           page.getCanvas().drawString(text, font, PdfBrushes.getDarkGray(), 0, 0);
       }
       // 保存文檔
       pdf.saveToFile("/添加文本水印1.pdf");
   }
}

(3)效果預(yù)覽:

(Java 在 PDF 中添加文本水印)

溫馨提示:如果只是處理簡單任務(wù)或者測試 Spire.PDF,你可以嘗試 Spire.PDF for Java 的免費(fèi)版。它生成的文件沒有水印,對于處理輕量化文件或項(xiàng)目很合適。

四、設(shè)置權(quán)限:限制 PDF 文件的打印與修改

在信息敏感或需要控制分發(fā)范圍的場景中,僅添加簽名和水印往往還不夠。為了進(jìn)一步保護(hù) PDF 文件內(nèi)容,我們可以通過加密和設(shè)置權(quán)限,限制用戶的打印、復(fù)制、編輯等操作。

Spire.PDF for Java 支持為 PDF 添加密碼,并靈活設(shè)定各類操作權(quán)限,保障文檔在分發(fā)過程中的安全性與合規(guī)性。

(1)操作步驟概覽

  • 讀取原始 PDF 文件;
  • 設(shè)置打開密碼和權(quán)限密碼(可選是否設(shè)定打開密碼);
  • 指定允許的操作類型(如僅允許打?。?/li>
  • 選擇加密強(qiáng)度;
  • 保存加密后的 PDF 文件。

(2)完整代碼示例(可直接復(fù)制到 IDEA 使用)

import com.spire.pdf.PdfDocument;
import com.spire.pdf.security.PdfEncryptionKeySize;
import com.spire.pdf.security.PdfPermissionsFlags;
import java.util.EnumSet;
public class ChangeSecurityPermissions {
    public static void main(String[] args) {
        // 創(chuàng)建 PDF 文檔對象
        PdfDocument doc = new PdfDocument();
        // 載入原始 PDF 文件
        doc.loadFromFile("/示例文檔.pdf");
        // 設(shè)置打開密碼(留空表示無需打開密碼)
        String openPsd = "";
        // 設(shè)置權(quán)限密碼(修改權(quán)限需輸入該密碼)
        String permissionPsd = "PDF密碼";
        // 設(shè)置允許的操作權(quán)限(這里只允許打印和高質(zhì)量打?。?
        EnumSet permissionsFlags = EnumSet.of(
            PdfPermissionsFlags.Print,
            PdfPermissionsFlags.Full_Quality_Print);
        // 加密文檔,設(shè)定密碼、權(quán)限和加密方式(128 位加密)
        doc.getSecurity().encrypt(
            openPsd, permissionPsd, permissionsFlags, PdfEncryptionKeySize.Key_128_Bit);
        // 保存加密后的 PDF 文件
        doc.saveToFile("/添加安全權(quán)限.pdf");
    }
}

(3)效果預(yù)覽:

(Java 在 PDF 中添加權(quán)限限制)

五、總結(jié)與擴(kuò)展:構(gòu)建更安全、專業(yè)的 PDF 工作流

通過前文的操作,我們已經(jīng)掌握了在 Java 中使用 Spire.PDF 添加數(shù)字簽名、水印和權(quán)限控制的完整流程。這三項(xiàng)功能常用于企業(yè)日常的電子合同、內(nèi)部報(bào)表、政策文檔等關(guān)鍵文件處理場景,幫助實(shí)現(xiàn):

  • 簽名認(rèn)證:保證文檔來源可信、內(nèi)容未被篡改;
  • 視覺提示:通過水印強(qiáng)化保密意識,防止誤用或泄漏;
  • 操作權(quán)限管理:限制打印、復(fù)制或編輯,防止內(nèi)容被隨意篡改或外泄。

如果你在使用 Spire.PDF for Java 的過程中遇到問題,或有定制化的開發(fā)需求,歡迎留言交流。

到此這篇關(guān)于Java在 PDF 中添加數(shù)字簽名、水印與權(quán)限控制的文章就介紹到這了,更多相關(guān)java pdf數(shù)字簽名內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring boot啟動后直接關(guān)閉了的問題解決

    spring boot啟動后直接關(guān)閉了的問題解決

    本文主要介紹了spring boot啟動后直接關(guān)閉了的問題解決,SpringBoot項(xiàng)目啟動后自動關(guān)閉的原因是未引入web依賴,導(dǎo)致以普通Java項(xiàng)目運(yùn)行,下面就來介紹一下解決方法,感興趣的可以了解一下
    2025-02-02
  • mybatis使用foreach標(biāo)簽進(jìn)行嵌套插入

    mybatis使用foreach標(biāo)簽進(jìn)行嵌套插入

    數(shù)據(jù)庫插入操作常見于多層架構(gòu)設(shè)計(jì)中,本文提供了一個(gè)具體的實(shí)現(xiàn)方案,涉及三層實(shí)體類結(jié)構(gòu),第一層實(shí)體類負(fù)責(zé)基本數(shù)據(jù)結(jié)構(gòu)的定義,第二層和第三層實(shí)體類則提供更詳細(xì)的業(yè)務(wù)邏輯處理,同時(shí),文章還介紹了相應(yīng)的mapper接口和配置文件設(shè)置
    2024-09-09
  • Java的web開發(fā)中SSH框架的協(xié)作處理應(yīng)用筆記

    Java的web開發(fā)中SSH框架的協(xié)作處理應(yīng)用筆記

    這篇文章主要介紹了Java的web開發(fā)中SSH框架的協(xié)作處理應(yīng)用筆記,SSH是指Struts和Spring以及Hibernate的框架搭配,需要的朋友可以參考下
    2015-12-12
  • Java實(shí)現(xiàn)優(yōu)雅停止線程的有效方法詳解

    Java實(shí)現(xiàn)優(yōu)雅停止線程的有效方法詳解

    這篇文章主要為大家詳細(xì)如何安全有效停止 Java 線程的,確保多線程應(yīng)用程序平穩(wěn)運(yùn)行并實(shí)現(xiàn)最佳資源管理,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • 基于Java class對象說明、Java 靜態(tài)變量聲明和賦值說明(詳解)

    基于Java class對象說明、Java 靜態(tài)變量聲明和賦值說明(詳解)

    下面小編就為大家?guī)硪黄贘ava class對象說明、Java 靜態(tài)變量聲明和賦值說明(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • java中 IO 常用IO操作類繼承結(jié)構(gòu)分析

    java中 IO 常用IO操作類繼承結(jié)構(gòu)分析

    本篇文章小編為大家介紹,java中 IO 常用IO操作類繼承結(jié)構(gòu)分析。需要的朋友參考下
    2013-04-04
  • 詳解Java中NullPointerException異常的原因詳解以及解決方法

    詳解Java中NullPointerException異常的原因詳解以及解決方法

    這篇文章主要介紹了詳解Java中NullPointerException異常的原因詳解以及解決方法。文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 淺談Java 將圖片打包到j(luò)ar中的路徑問題

    淺談Java 將圖片打包到j(luò)ar中的路徑問題

    下面小編就為大家分享一篇淺談Java 將圖片打包到j(luò)ar中的路徑問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • java Zookeeper簡述

    java Zookeeper簡述

    ZooKeeper是一個(gè)分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個(gè)開源的實(shí)現(xiàn),是Hadoop和Hbase的重要組件。下面通過本文給大家分享java 中 zookeeper簡單使用,需要的朋友參考下吧
    2021-09-09
  • 深入理解Java中的HashMap的實(shí)現(xiàn)機(jī)制

    深入理解Java中的HashMap的實(shí)現(xiàn)機(jī)制

    這篇文章主要介紹了深入理解Java中的HashMap的實(shí)現(xiàn)機(jī)制,同時(shí)也有助于理解Java中對于哈希函數(shù)的相關(guān)處理方式,需要的朋友可以參考下
    2015-07-07

最新評論