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

Java在?PDF?中添加數字簽名、水印與權限控制的詳細過程

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

一、為什么需要數字簽名、水印和權限控制?

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

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

二、添加數字簽名:為 PDF 文件嵌入帶圖像的身份認證簽章

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

(1)簽名文件準備

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

(2)核心步驟概覽

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

(3)完整代碼示例(可直接復制到 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);
        // 設置簽章顯示模式:圖像 + 簽章詳情
        signature.setGraphicMode(GraphicMode.Sign_Image_And_Sign_Detail);
        // 填寫簽章信息(會顯示在頁面上)
        signature.setNameLabel("簽名:");
        signature.setName("我");
        signature.setContactInfoLabel("聯系方式:");
        signature.setContactInfo("02881705109");
        signature.setDateLabel("日期:");
        signature.setDate(new java.util.Date());
        signature.setLocationInfoLabel("地址:");
        signature.setLocationInfo("成都");
        signature.setReasonLabel("原因:");
        signature.setReason("文件簽署確認");
        signature.setDistinguishedNameLabel("DN:");
        signature.setDistinguishedName(
            signature.getCertificate().get_IssuerName().getName());
        // 設置簽名圖像(如公司印章或簽字)
        signature.setSignImageSource(
            PdfImage.fromFile("/簽名.png"));
        // 設置簽名文字字體
        signature.setSignDetailsFont(
            new PdfFont(PdfFontFamily.Helvetica, 10f, PdfFontStyle.Regular));
        // 設置文檔權限:禁止修改
        signature.setDocumentPermissions(PdfCertificationFlags.Forbid_Changes);
        signature.setCertificated(true); // 標記為已簽名
        // 保存為新文件
        doc.saveToFile("/電子簽名.pdf");
        doc.close();
    }
}

(4)效果預覽:

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

注意事項:

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

三、添加文本水?。簽?PDF 文檔標注身份標識

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

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

(1)操作步驟概覽

  • 讀取目標 PDF 文件;
  • 創(chuàng)建字體對象并計算水印偏移;
  • 遍歷每一頁,設置透明度、旋轉角度和繪圖位置;
  • 繪制文本水?。?/li>
  • 保存為新 PDF 文件。

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

import com.spire.pdf.*;
import com.spire.pdf.graphics.*;
import java.awt.*;
public class insertSingleTextWaterMark {
   public static void main(String[] args) {
       // 創(chuàng)建一個 PdfDocument 實例
       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);
           // 設置水印的透明度
           page.getCanvas().setTransparency(0.8f);
           // 設置坐標的平移量
           page.getCanvas().translateTransform(page.getCanvas().getSize().getWidth()/2 - set1 - set2, page.getCanvas().getSize().getHeight()/2 + set1 - set2);
           // 設置旋轉角度
           page.getCanvas().rotateTransform(-45);
           // 在頁面上繪制水印文本
           page.getCanvas().drawString(text, font, PdfBrushes.getDarkGray(), 0, 0);
       }
       // 保存文檔
       pdf.saveToFile("/添加文本水印1.pdf");
   }
}

(3)效果預覽:

(Java 在 PDF 中添加文本水?。?/p>

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

四、設置權限:限制 PDF 文件的打印與修改

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

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

(1)操作步驟概覽

  • 讀取原始 PDF 文件;
  • 設置打開密碼和權限密碼(可選是否設定打開密碼);
  • 指定允許的操作類型(如僅允許打印);
  • 選擇加密強度;
  • 保存加密后的 PDF 文件。

(2)完整代碼示例(可直接復制到 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");
        // 設置打開密碼(留空表示無需打開密碼)
        String openPsd = "";
        // 設置權限密碼(修改權限需輸入該密碼)
        String permissionPsd = "PDF密碼";
        // 設置允許的操作權限(這里只允許打印和高質量打?。?
        EnumSet permissionsFlags = EnumSet.of(
            PdfPermissionsFlags.Print,
            PdfPermissionsFlags.Full_Quality_Print);
        // 加密文檔,設定密碼、權限和加密方式(128 位加密)
        doc.getSecurity().encrypt(
            openPsd, permissionPsd, permissionsFlags, PdfEncryptionKeySize.Key_128_Bit);
        // 保存加密后的 PDF 文件
        doc.saveToFile("/添加安全權限.pdf");
    }
}

(3)效果預覽:

(Java 在 PDF 中添加權限限制)

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

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

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

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

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

相關文章

  • 手把手教你如何搭建SpringBoot+Vue前后端分離

    手把手教你如何搭建SpringBoot+Vue前后端分離

    這篇文章主要介紹了手把手教你如何搭建SpringBoot+Vue前后端分離,前后端分離是目前開發(fā)中常用的開發(fā)模式,達成充分解耦,需要的朋友可以參考下
    2023-03-03
  • @Value如何設置默認值

    @Value如何設置默認值

    這篇文章主要介紹了@Value如何設置默認值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Spring cloud alibaba之Gateway網關功能特征詳解

    Spring cloud alibaba之Gateway網關功能特征詳解

    spring cloud gateway是spring cloud推出的第二代網關,是由WebFlux+Netty+Reactor實現的響應式的API網關,它不能在傳統(tǒng)的servlet容器中工作,也不能構建成war包,接下來通過本文給大家分享Spring cloud alibaba--Gateway網關,需要的朋友可以參考下
    2021-08-08
  • SpringBoot使用Nacos動態(tài)配置數據源的方法

    SpringBoot使用Nacos動態(tài)配置數據源的方法

    這篇文章主要介紹了SpringBoot使用Nacos動態(tài)配置數據源的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • springboot 監(jiān)控管理模塊搭建的方法

    springboot 監(jiān)控管理模塊搭建的方法

    本篇文章主要介紹了springboot 監(jiān)控管理模塊搭建的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Java實現一鍵獲取Mysql所有表字段設計和建表語句的工具類

    Java實現一鍵獲取Mysql所有表字段設計和建表語句的工具類

    這篇文章主要為大家詳細介紹了如何利用Java編寫一個工具類,可以實現一鍵獲取Mysql所有表字段設計和建表語句,感興趣的小伙伴可以了解一下
    2023-05-05
  • 解決SpringBoot使用@Value獲取不到y(tǒng)aml中配置值的問題

    解決SpringBoot使用@Value獲取不到y(tǒng)aml中配置值的問題

    在最近的開發(fā)中遇到一個問題,使用@Value獲取yml文件中配置的屬性時始終獲取不到值,所以本文給大家詳細介紹了SpringBoot使用@Value獲取不到y(tǒng)aml中值的問題分析及解決方法,需要的朋友可以參考下
    2024-01-01
  • SpringBoot yml配置敏感信息加密的實現

    SpringBoot yml配置敏感信息加密的實現

    本文主要介紹了SpringBoot yml配置敏感信息加密的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-08-08
  • Mybatis操作Clickhouse數組的最佳實踐分享

    Mybatis操作Clickhouse數組的最佳實踐分享

    ClickHouse 的 Array(T) 數據類型支持任意有效數據類型作為元素,包括基本類型、嵌套數組和可空類型,本文給大家分享了Mybatis操作Clickhouse數組的最佳實踐,需要的朋友可以參考下
    2025-09-09
  • 深入理解Java設計模式之裝飾模式

    深入理解Java設計模式之裝飾模式

    這篇文章主要介紹了JAVA設計模式之裝飾模式的的相關資料,文中示例代碼非常詳細,供大家參考和學習,感興趣的朋友可以了解下
    2021-11-11

最新評論

丰顺县| 甘肃省| 喜德县| 奉新县| 洛宁县| 全州县| 彭州市| 合作市| 板桥市| 长岛县| 中山市| 孟连| 甘谷县| 临安市| 阳东县| 深圳市| 武汉市| 新昌县| 芦溪县| 五华县| 三明市| 柘荣县| 新闻| 晋中市| 台北县| 中山市| 扬州市| 塘沽区| 巴南区| 三明市| 商南县| 闽侯县| 元江| 平昌县| 涡阳县| 额敏县| 武功县| 五台县| 奎屯市| 岐山县| 平原县|