IRONSOFTWAREHOME

如何在Java中數位簽署PDF

Curtis Chau
Curtis Chau
Updated: 2026年6月16日

在Java中使用IronPDF對PDF進行數位簽署,讓您可以應用加密簽章來驗證文件的真實性並檢測未經授權的更改。 IronPDF支持PdfCertificationLevel控制PDF的認證級別,並連接到時間戳機構伺服器以確保長期簽名有效性。

快速入門:在Java中數位簽署PDF
  1. 透過Maven或Gradle安裝 IronPDF for Java
  2. 使用License.setLicenseKey()設置您的授權金鑰
  3. 使用PdfDocument.fromFile()載入PDF
  4. 使用您的PFX證書文件和密碼建立PdfSignature
  5. 使用signDigitalSignature()套用簽名
  6. 使用saveAs()保存已簽署的PDF
  1. 1Install IronPDF with Maven Central Repository

    > mvn install

  2. 2複製並運行這段程式碼片段。

    //:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/quickstart.java
    import java.io.IOException;
    import java.nio.file.Path;
    import com.ironsoftware.ironpdf.License;
    import com.ironsoftware.ironpdf.PdfDocument;
    import com.ironsoftware.ironpdf.signature.PdfSignature;
    
    public class Main {
        public static void main(String[] args) throws IOException {
            // Set the IronPDF license key
            License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");
    
            // Load an existing PDF document
            PdfDocument pdf = PdfDocument.fromFile(Path.of("document.pdf"));
    
            // Create a PdfSignature using a PFX certificate file and its password
            PdfSignature signature = new PdfSignature("certificate.pfx", "password123");
    
            // Set signature metadata for audit trails
            signature.setSigningContact("John Smith");
            signature.setSigningLocation("New York");
            signature.setSigningReason("Document Approval");
    
            // Apply the digital signature to the PDF
            pdf.signDigitalSignature(signature);
    
            // Save the signed PDF to a new file
            pdf.saveAs(Path.of("signed.pdf"));
        }
    }
    Java
  3. 3部署以在您的實時環境中測試

    今天就開始在您的專案中使用IronPDF,透過免費試用
    arrow pointer

數位簽章為PDF文件提供了一個與私密金鑰和證書相關的加密身份。 當收件人使用Adobe Acrobat或任何相容的檢視器打開已簽署的PDF時,應用程式會驗證證書鏈是否可追溯至受信任的機構,並且文件內容自簽署以來未進行過更改。 這種身份驗證與完整性的結合使數位簽章對於合約、發票、監管申報文件以及任何涉及抵觸證據的文件來說都至關重要。

PDF簽章有兩種型別:批准簽章和作者(認證)簽章。 批准簽章會記錄一個簽署人在某一時刻的批准;多方可以依次新增批准簽章而不會使較早的簽章失效。 認證簽章通過PdfCertificationLevel鎖定文件,並將簽署者標記為文件的作者。 認證簽章必須是文件上的第一個簽章,並管控後續簽署者可以進行的更改(如果有的話)。

IronPDF通過PdfDocument構建的統一API來處理兩種簽章型別。 有關初步設置、依賴項配置及授權金鑰說明,請參閱入門概覽。

開始之前我需要什麼準備?

在使用IronPDF簽署PDF之前,請確認以下先決條件:

  • Java 8 或更高版本:IronPDF需要JDK版本8或更高。
  • IronPDF for Java:在您的構建文件中新增此依賴項。在Maven Central找到最新版本。
  • 有效的授權金鑰:使用License.setLicenseKey()在應用程式啟動時設置金鑰。 有關詳細的設置說明,請存取授權金鑰指南。
  • PFX或P12證書文件:這是一個受密碼保護的存檔,其中包含您的私鑰和以PKCS#12格式儲存的公共證書。 自簽名證書適用於開發和測試; 對於需要外部接收者信任的生產文件,請使用由受認可的證書機構(CA)如DigiCert、Comodo或GlobalSign頒發的證書。

有關完整的依賴項設置和專案配置,請參閱入門概覽。

我如何在PDF上應用數位簽章?

PdfSignature構造函式需要您的PFX證書的文件路徑及其密碼。 構造完成後,您可以通過三個設置方法附加可選元資料:

  • setSigningContact(String):簽署人的姓名或電子郵件
  • setSigningLocation(String):簽署人的物理或組織位置
  • setSigningReason(String):文件簽署原因的簡短描述

這些欄位會顯示在PDF檢視器的簽章屬性面板中,為合規性目的建立有用的審核記錄。 在已載入的saveAs()保存結果。

//:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/apply-signature.java
import java.io.IOException;
import java.nio.file.Path;
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.signature.PdfSignature;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the IronPDF license key
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load the PDF to sign
        PdfDocument pdf = PdfDocument.fromFile(Path.of("contract.pdf"));

        // Construct the PdfSignature with the certificate path and password
        PdfSignature signature = new PdfSignature("certificate.pfx", "password123");

        // Set metadata that will appear in the signature properties panel
        signature.setSigningContact("Jane Doe");
        signature.setSigningLocation("Austin, TX");
        signature.setSigningReason("Contract Approval");

        // Embed the digital signature in the PDF
        pdf.signDigitalSignature(signature);

        // Save the signed document
        pdf.saveAs(Path.of("contract-signed.pdf"));
    }
}
Java

在signDigitalSignature()完成之後,PDF包含了用PFX文件中的私鑰簽署的文件內容的加密哈希。此時之後對文件的任何修改都將使簽名失效。

我如何在PDF上新增可見簽名圖片?

可見的簽名圖片將圖像直接放在PDF頁面上的簽名欄位位置。 這通常用於顯示掃描的手寫簽名、公司印章或商標,使文件在列印或查看時顯示為已簽名,而不僅限於PDF閱讀器的簽章面板檢查。

要新增可見圖片,將影像文件開啟為PdfSignature.setSignatureImage(InputStream)。 該圖片會嵌入到頁面的簽名欄位中。

//:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/visible-signature-image.java
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.Path;
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.signature.PdfSignature;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the IronPDF license key
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load the PDF document to sign
        PdfDocument pdf = PdfDocument.fromFile(Path.of("agreement.pdf"));

        // Build the PdfSignature from a PFX certificate
        PdfSignature signature = new PdfSignature("certificate.pfx", "password123");

        // Set signing metadata
        signature.setSigningContact("Alice Johnson");
        signature.setSigningLocation("Chicago, IL");
        signature.setSigningReason("Agreement Authorization");

        // Open the signature image file and attach it to the signature
        FileInputStream imageStream = new FileInputStream("signature.png");
        signature.setSignatureImage(imageStream);

        // Apply the digital signature with the visible image to the PDF
        pdf.signDigitalSignature(signature);

        // Save the signed PDF with the visible signature image embedded
        pdf.saveAs(Path.of("agreement-signed.pdf"));
    }
}
Java

簽名圖片不會取代加密保護; 圖形戳記和基礎證書都會是簽署後的輸出的一部分。 簽名圖片支持PNG和JPEG格式。

我如何以特定許可等級認證PDF?

認證PDF與新增批准簽章不同。 當您調用pdf.certify(PdfSignature, PdfCertificationLevel)時,您簽署文件為其作者並指定隨後使用者允許的更改型別。 經過認證的PDF在Adobe Acrobat中顯示藍色緞帶或類似的信任指標,表明收件人文件來自經驗證的來源。

IronPDF通過PdfCertificationLevel枚舉提供三種認證級別:

  • PdfCertificationLevel.NO_CHANGES_ALLOWED:在認證後,文件完全被鎖定; 不允許進一步改動。
  • PdfCertificationLevel.FORM_FILLING:收件人可以填寫表單欄位,但不能新增評論、註釋或其他變更。
  • PdfCertificationLevel.FORM_FILLING_AND_ANNOTATIONS:收件人可以填寫表單欄位並新增註釋,但仍然禁止結構性編輯。

由於認證簽章必須是文件上的第一個簽名,因此在套用來自其他方的任何批准簽章之前,調用certify()。

//:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/certify-pdf.java
import java.io.IOException;
import java.nio.file.Path;
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.signature.PdfCertificationLevel;
import com.ironsoftware.ironpdf.signature.PdfSignature;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the IronPDF license key
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load the PDF that will be certified
        PdfDocument pdf = PdfDocument.fromFile(Path.of("report.pdf"));

        // Create the PdfSignature from the author's certificate
        PdfSignature signature = new PdfSignature("author-certificate.pfx", "password123");

        // Set author metadata for the certification signature
        signature.setSigningContact("Legal Department");
        signature.setSigningLocation("San Francisco, CA");
        signature.setSigningReason("Official Publication");

        // Certify the document with NO_CHANGES_ALLOWED to lock it completely
        // Use FORM_FILLING to allow form field input after certification
        // Use FORM_FILLING_AND_ANNOTATIONS to also permit annotations
        pdf.certify(signature, PdfCertificationLevel.NO_CHANGES_ALLOWED);

        // Save the certified PDF
        pdf.saveAs(Path.of("report-certified.pdf"));
    }
}
Java

一旦用NO_CHANGES_ALLOWED進行認證,任何修改PDF的嘗試都將破壞認證簽章且PDF檢視器會顯示警告。 當認證後的文件需要由下游接收者填寫或註釋而不使作者的認證無效時,選擇FORM_FILLING_AND_ANNOTATIONS。

我如何在數位簽章中新增時間戳?

時間戳機構(TSA)伺服器提供了一個加密簽署的時間令牌,該令牌與PDF簽章一同嵌入。 這個時間戳證明在簽署者本地時鐘之外應用了何時的簽章。 長期有效性依賴於時間戳:即使在簽名證書過期後,可信的時間戳也允許驗證器確認簽名是在證書仍然有效時建立的。

為啟用時間戳功能,在簽章前於PdfSignature物件上設置兩個屬性:

  • setTimestampHashAlgorithm(PdfHashAlgorithm):指定計算時間戳令牌時使用的雜湊演算法。 標準選擇為PdfHashAlgorithm.SHA256。
  • setTimestampUrl(String):將用於發放時間戳令牌的TSA伺服器的HTTP或HTTPS端點。

有幾個TSA伺服器是免費提供給測試及低容量生產用的。 http://timestamp.digicert.com是兩個常用的端點。

//:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/timestamp-signature.java
import java.io.IOException;
import java.nio.file.Path;
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.signature.PdfHashAlgorithm;
import com.ironsoftware.ironpdf.signature.PdfSignature;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the IronPDF license key
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load the PDF to sign with a timestamp
        PdfDocument pdf = PdfDocument.fromFile(Path.of("invoice.pdf"));

        // Construct the PdfSignature from the certificate file
        PdfSignature signature = new PdfSignature("certificate.pfx", "password123");

        // Set signature metadata
        signature.setSigningContact("Finance Team");
        signature.setSigningLocation("Seattle, WA");
        signature.setSigningReason("Invoice Authorization");

        // Configure the timestamp: set the hash algorithm and TSA endpoint
        signature.setTimestampHashAlgorithm(PdfHashAlgorithm.SHA256);
        signature.setTimestampUrl("https://freetsa.org/tsr");

        // Apply the digital signature; IronPDF will contact the TSA to obtain
        // and embed a timestamp token alongside the cryptographic signature
        pdf.signDigitalSignature(signature);

        // Save the timestamped, signed PDF
        pdf.saveAs(Path.of("invoice-signed-timestamped.pdf"));
    }
}
Java

當簽署時TSA無法連接時,IronPDF將拋出異常; 請在佈署到生產之前檢查網路存取和TSA端點URL。 對於高容量生產工作流程,考慮訂閱商業TSA以保證正常運行時間和吞吐量。

接下來要如何對PDF進行數位簽署?

IronPDF的PdfSignature類涵蓋了PDF簽章需求的全範疇:具有證書元資料的批准簽章、可見的圖形戳記、具有存取控制級別的PDF認證以及TSA支持的長期有效性時間戳。 要擴展您的PDF工作流程超過簽署範疇,請探索以下相關資源:

開始您的免費試用,將數位簽章新增到您的Java PDF工作流程。 若要購買商業使用的授權,請查看授權選項。

常見問題

如何在Java中使用IronPDF數位簽署PDF?

使用PdfDocument.fromFile()載入您的PDF,使用PFX證書文件的路徑及其密碼建立PdfSignature,可選地使用setSigningContact(),setSigningLocation()和setSigningReason()設置元資料,然後調用pdf.signDigitalSignature(signature)並使用pdf.saveAs()保存。

在IronPDF中signDigitalSignature()和certify()有什麼區別?

signDigitalSignature()新增了一個記錄單個簽名人員批准的批准簽名。可以按順序新增多個批准簽名。certify()新增了一個必須在文件中首先出現的作者簽名,並設置PdfCertificationLevel以控制後續簽名者可以進行哪些更改。

如何在Java中向已簽名的PDF新增可見簽名圖像?

以FileInputStream打開圖像文件,並在調用signDigitalSignature()之前將其傳遞給signature.setSignatureImage(imageStream)。該圖像將嵌入在頁面上的簽名字段中,與加密簽名一起。

IronPDF支持哪些PDF認證級別?

IronPDF通過PdfCertificationLevel枚舉支持三個級別:NO_CHANGES_ALLOWED完全鎖定文件,FORM_FILLING僅允許表單字段輸入,FORM_FILLING_AND_ANNOTATIONS允許表單字段和註釋,同時阻止結構編輯。

如何在Java中向數位簽名新增時間戳?

在PdfSignature上設置signature.setTimestampHashAlgorithm(PdfHashAlgorithm.SHA256)和signature.setTimestampUrl("https://freetsa.org/tsr"),然後調用signDigitalSignature()。IronPDF聯繫TSA伺服器並將時間戳記標籤嵌入到已簽名的PDF中。

IronPDF在簽署PDF時需要什麼格式的證書文件?

IronPDF需要PFX或P12證書文件,這是一種包含私鑰和公共證書的PKCS#12存檔。自簽名證書可以用於開發;對於生產使用,從可信的證書頒發機構如DigiCert或GlobalSign獲取證書。

在Java中使用IronPDF數位簽署PDF的先決條件是什麼?

您需要Java 8或更高版本,通過Maven或Gradle新增IronPDF依賴,使用License.setLicenseKey()設置有效的授權金鑰,以及帶有密碼的PFX或P12證書文件。

How do I certify a document with no changes allowed using IronPDF?

To certify a document with no changes allowed, construct a PdfSignature, set any required metadata, and call pdf.certify() with the PdfCertificationLevel.NO_CHANGES_ALLOWED parameter before applying any approval signatures.

What are the benefits of using digital signatures on PDFs with IronPDF?

Digital signatures ensure the authenticity and integrity of a document by creating a cryptographic identity tied to a private key. They are ideal for contracts, invoices, and legal documents, where tamper evidence and verification are crucial.

What next steps are recommended after setting up digital signatures with IronPDF?

After setting up digital signatures, consider exploring related IronPDF functionalities, such as creating and filling PDF forms, adding annotations, and merging PDFs to enhance your Java PDF workflow.

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

...
閱讀更多

準備好開始了嗎?

版本:2026.6剛剛發布

立即獲取您的免費 30天試用金鑰。
無需信用卡或帳戶建立
PDF的Java Maven程式庫
using Maven 安裝

版本: 2026.6

<dependency>
   <groupId>com.ironsoftware</groupId>
   <artifactId>ironpdf</artifactId>
   <version>2026.6.1</version>
</dependency>
https://central.sonatype.com/artifact/com.ironsoftware/ironpdf/2026.6.1
or
Java PDF JAR
下載 JAR

版本: 2026.6

手動安裝到您的專案中

有問題嗎?聯繫我們的開發團隊。

Key in blue circle

立即免費取得 30 天試用金鑰。

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

OR
bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
預訂您的免費 即時演示
Booking Badge

全球數百萬工程師的信任

Iron Software的客戶商標
獲取您的無義務諮詢
填寫以下表格或發送電子郵件至sales@ironsoftware.com
您的詳細資訊始終保持機密。
全球數百萬工程師的信任
Iron Software的客戶商標
立即獲取您的30天試用金鑰。
無需信用卡或帳戶建立
PDF的Java Maven程式庫
using Maven 安裝

版本: 2026.6

<dependency>
   <groupId>com.ironsoftware</groupId>
   <artifactId>ironpdf</artifactId>
   <version>2026.6.1</version>
</dependency>
https://central.sonatype.com/artifact/com.ironsoftware/ironpdf/2026.6.1
or
Java PDF JAR
下載 JAR

版本: 2026.6

手動安裝到您的專案中