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

Java利用Spire.PDF for Java實現(xiàn)在PDF中添加或刪除數(shù)字簽名

 更新時間:2025年11月19日 15:46:57   作者:用戶033212666367  
在數(shù)字化辦公日益普及的今天,PDF文檔的安全性與真實性變得尤為重要,本文將深入探討如何在Java環(huán)境中,利用強大的Spire.PDF for Java庫,對PDF文檔進行數(shù)字簽名的添加與刪除操作,有需要的可以了解下

在數(shù)字化辦公日益普及的今天,PDF文檔的安全性與真實性變得尤為重要。數(shù)字簽名作為一種電子加密技術(shù),能夠有效驗證文檔的來源、確保內(nèi)容完整性,并提供不可抵賴的法律效力。本文將深入探討如何在Java環(huán)境中,利用強大的Spire.PDF for Java庫,對PDF文檔進行數(shù)字簽名的添加與刪除操作。

1. Spire.PDF for Java 庫介紹與安裝

Spire.PDF for Java是一款功能豐富的PDF處理庫,它允許開發(fā)者在Java應(yīng)用程序中輕松創(chuàng)建、讀寫、編輯和轉(zhuǎn)換PDF文檔。其突出優(yōu)勢在于對PDF標準的高度兼容性、強大的渲染能力以及對復(fù)雜PDF特性(如數(shù)字簽名、表單、圖層等)的良好支持。對于數(shù)字簽名操作,Spire.PDF for Java提供了直觀易用的API,極大地簡化了開發(fā)流程。

Maven 依賴配置:

  <repositories>
    <repository>
        <id>com.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>11.10.3</version>
    </dependency>
</dependencies>

2. Java 在 PDF 中添加數(shù)字簽名

添加數(shù)字簽名通常涉及加載PDF、加載數(shù)字證書、設(shè)置簽名外觀和信息,最后保存文檔。

步驟詳解:

  • 加載PDF文檔: 使用PdfDocument類加載目標PDF文件。
  • 加載數(shù)字證書: 數(shù)字證書通常以PKS12(.pfx或.p12)格式存儲,包含私鑰和公鑰。使用PdfCertificate類加載證書文件及密碼。
  • 創(chuàng)建簽名對象: 實例化PdfSignature對象,指定PDF文檔、簽名頁、證書和簽名名稱。
  • 設(shè)置簽名區(qū)域: 定義簽名在頁面上的位置和大小,通過setBounds方法設(shè)置。
  • 配置簽名外觀: Spire.PDF支持多種簽名外觀模式,例如只顯示圖像、只顯示簽名詳情、同時顯示圖像和詳情等??梢酝ㄟ^setGraphicMode方法進行設(shè)置。
  • 設(shè)置簽名信息: 包括簽名者姓名、聯(lián)系信息、簽名地點、簽名原因等。
  • 保存PDF: 將帶有數(shù)字簽名的PDF文檔保存到新文件或覆蓋原文件。

Java 代碼示例:

import com.spire.pdf.graphics.*;
import com.spire.pdf.security.GraphicMode;
import com.spire.pdf.security.PdfCertificate;
import com.spire.pdf.security.PdfCertificationFlags;
import com.spire.pdf.security.PdfSignature;

import java.awt.*;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;

public class AddDigitalSignature {

    public static void main(String[] args) {

        //加載PDF文檔
        PdfDocument doc = new PdfDocument();
        doc.loadFromFile("C:\Users\Administrator\Desktop\sample.pdf");

        //加載pfx證書
        PdfCertificate cert = new PdfCertificate("C:\Users\Administrator\Desktop\gary.pfx", "e-iceblue");

        //添加數(shù)字簽名,設(shè)置其位置和大小
        PdfSignature signature = new PdfSignature(doc, doc.getPages().get(0), cert, "MySignature");
        Rectangle2D rect = new Rectangle2D.Float();
        rect.setFrame(new Point2D.Float((float) doc.getPages().get(0).getActualSize().getWidth() - 340, (float) doc.getPages().get(0).getActualSize().getHeight() - 150), new Dimension(270, 100));
        signature.setBounds(rect);

        //設(shè)置簽名為圖片加文本模式
        signature.setGraphicMode(GraphicMode.Sign_Image_And_Sign_Detail);

        //設(shè)置簽名的內(nèi)容
        signature.setNameLabel("簽字者:");
        signature.setName("Gary");
        signature.setContactInfoLabel("聯(lián)系電話:");
        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("C:\Users\Administrator\Desktop\logo-2.png"));

        //設(shè)置簽名的字體
        signature.setSignDetailsFont(new PdfTrueTypeFont(new Font("宋體", Font.PLAIN, 12)));

        //設(shè)置文檔權(quán)限為禁止更改
        signature.setDocumentPermissions(PdfCertificationFlags.Forbid_Changes);
        signature.setCertificated(true);

        //保存文檔
        doc.saveToFile("output/AddSignature.pdf");
        doc.close();
    }
}

上述代碼將會在PDF文檔的第一頁的指定區(qū)域添加一個包含證書信息、簽名者姓名、聯(lián)系方式、地點和原因的數(shù)字簽名。

3. Java 在 PDF 中刪除數(shù)字簽名

刪除數(shù)字簽名相對簡單,主要步驟是識別并移除簽名域。

步驟詳解:

  • 加載PDF文檔: 加載包含數(shù)字簽名的PDF文件。
  • 獲取表單字段: PDF中的數(shù)字簽名通常被視為一種特殊的表單字段。通過doc.getForm().getFields()獲取所有表單字段。
  • 遍歷并識別簽名域: 遍歷字段列表,判斷字段類型是否為PdfSignatureField。
  • 移除簽名域: 從表單字段列表中移除找到的簽名域。
  • 保存PDF: 保存修改后的PDF文檔。

Java 代碼示例:

import com.spire.pdf.PdfDocument;
import com.spire.pdf.widget.PdfFieldWidget;
import com.spire.pdf.widget.PdfFormWidget;
import com.spire.pdf.widget.PdfSignatureFieldWidget;

public class RemoveSignature {

    public static void main(String[] args) {

        //創(chuàng)建PdfDocument對象 
        PdfDocument pdf = new PdfDocument();

        //加載PDF文檔
        pdf.loadFromFile("C:\Users\Administrator\Desktop\Signature.pdf");

        //從文檔獲取form widget集合
        PdfFormWidget widgets = (PdfFormWidget) pdf.getForm();

        //遍歷集合中的每一個元素
        for (int i = 0; i < widgets.getFieldsWidget().getList().size(); i++)
        {
            //獲取指定widget
            PdfFieldWidget widget = (PdfFieldWidget)widgets.getFieldsWidget().getList().get(i);

            //判斷widget是否為PdfSignatureFieldWidget
            if (widget instanceof PdfSignatureFieldWidget)
            {
                //刪除數(shù)字簽名widget
                widgets.getFieldsWidget().remove(widget);
            }
        }

        //保存文檔
        pdf.saveToFile("RemoveSignature.pdf");
    }
}

注意事項:

刪除數(shù)字簽名會破壞原始文檔的完整性,通常用于測試或特殊場景。

如果文檔被多個數(shù)字簽名保護,上述代碼會移除所有簽名。若需選擇性刪除,則需要根據(jù)簽名名稱或其他屬性進行判斷。

總結(jié)

本文詳細介紹了如何使用Spire.PDF for Java庫在PDF文檔中添加和刪除數(shù)字簽名。通過直觀的API和清晰的代碼示例,開發(fā)者可以輕松地實現(xiàn)PDF文檔的數(shù)字簽名操作,從而增強文檔的安全性、真實性和法律效力。數(shù)字簽名在合同簽署、電子票據(jù)、證書管理等領(lǐng)域發(fā)揮著不可替代的作用,掌握這一技術(shù)對于構(gòu)建安全的數(shù)字化應(yīng)用至關(guān)重要。

到此這篇關(guān)于Java利用Spire.PDF for Java實現(xiàn)在PDF中添加或刪除數(shù)字簽名的文章就介紹到這了,更多相關(guān)Java PDF添加或刪除數(shù)字簽名內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot實現(xiàn)基于URL和IP的訪問頻率限制

    SpringBoot實現(xiàn)基于URL和IP的訪問頻率限制

    在現(xiàn)代?Web?應(yīng)用中,接口被惡意刷新或暴力請求是一種常見的攻擊手段,為了保護系統(tǒng)資源,需要對接口的訪問頻率進行限制,下面我們就來看看如何使用?Spring?Boot?實現(xiàn)基于?URL?和?IP?的訪問頻率限制吧
    2025-01-01
  • Java設(shè)計模式之建造者模式

    Java設(shè)計模式之建造者模式

    這篇文章介紹了Java設(shè)計模式之建造者模式,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • java IO流讀取圖片供前臺顯示代碼分享

    java IO流讀取圖片供前臺顯示代碼分享

    這篇文章主要介紹了java IO流讀取圖片供前臺顯示代碼分享,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Spring Boot項目實戰(zhàn)之攔截器與過濾器

    Spring Boot項目實戰(zhàn)之攔截器與過濾器

    這篇文章主要介紹了Spring Boot項目實戰(zhàn)之攔截器與過濾器,文中給大家詳細介紹了springboot 攔截器和過濾器的基本概念,過濾器的配置,需要的朋友可以參考下
    2018-01-01
  • Java編程中避免equals方法的隱藏陷阱介紹

    Java編程中避免equals方法的隱藏陷阱介紹

    這篇文章主要介紹了Java編程中避免equals方法的隱藏陷阱介紹,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Java虛擬線程原理與實踐指南(含實際案例)

    Java虛擬線程原理與實踐指南(含實際案例)

    Java虛擬線程是一種輕量級線程,由JVM管理而非操作系統(tǒng),這篇文章主要介紹了Java虛擬線程原理與實踐指南的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2026-06-06
  • jsp+dao+bean+servlet(MVC模式)實現(xiàn)簡單用戶登錄和注冊頁面

    jsp+dao+bean+servlet(MVC模式)實現(xiàn)簡單用戶登錄和注冊頁面

    這篇文章主要介紹了jsp+dao+bean+servlet(MVC模式)實現(xiàn)簡單用戶登錄和注冊頁面,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 使用Runtime 調(diào)用Process.waitfor導(dǎo)致的阻塞問題

    使用Runtime 調(diào)用Process.waitfor導(dǎo)致的阻塞問題

    這篇文章主要介紹了使用Runtime 調(diào)用Process.waitfor導(dǎo)致的阻塞問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • MyBatisPlus代碼生成器實踐(自己二次封裝)

    MyBatisPlus代碼生成器實踐(自己二次封裝)

    這段描述主要講解了如何配置MybatisPlus以生成代碼,并強調(diào)了官方文檔的重要性,同時提到了.xml文件的放置位置以及自動掃描的功能,適合對MybatisPlus感興趣的開發(fā)者閱讀
    2026-05-05
  • Linux下用java -jar運行可執(zhí)行jar包的方法教程

    Linux下用java -jar運行可執(zhí)行jar包的方法教程

    這篇文章主要給大家介紹了在Linux下用java -jar運行可執(zhí)行jar包的方法教程,文中介紹的非常詳細,相信對大家的工作或者學(xué)習(xí)具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-05-05

最新評論

新津县| 依兰县| 孟津县| 冀州市| 陈巴尔虎旗| 双柏县| 浙江省| 宝兴县| 汾阳市| 利川市| 新郑市| 白山市| 郸城县| 阜城县| 辽源市| 海丰县| 宁夏| 阜阳市| 老河口市| 武鸣县| 青龙| 崇明县| 梨树县| 康平县| 灵石县| 斗六市| 科尔| 临沧市| 济宁市| 剑河县| 安徽省| 五家渠市| 临桂县| 五常市| 隆回县| 成武县| 龙山县| 闸北区| 荔浦县| 个旧市| 启东市|