JavaでPDFをデジタル署名する方法
IronPDFを使用してJavaでPDFにデジタル署名することにより、ドキュメントの正当性を確認し、無許可の変更を検出する暗号署名を適用できます。 IronPDF は、PFX証明書ベースの署名を任意のPDFに添付し、可視の署名画像を設定し、PdfCertificationLevel でPDF認証レベルを制御し、長期署名の有効性のためにタイムスタンプ認証局サーバーに接続する PdfSignature をサポートしています。
クイックスタート: JavaでPDFにデジタル署名する
- MavenまたはGradleを介してJava用のIronPDFをインストールする
License.setLicenseKey()でライセンスキーを設定しますPdfDocument.fromFile()でPDFをロードします- PFX証明書ファイルとパスワードで
PdfSignatureを作成します signDigitalSignature()で署名を適用しますsaveAs()で署名済みのPDFを保存します
:title=Quickstart
//: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"));
}
}
:title=Quickstart
//: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"));
}
}
デジタル署名は、PDFドキュメントにプライベートキーと証明書に関連付けられた暗号化関連を提供します。 受取人がAdobe Acrobatやその他の適合ビューアで署名済みPDFを開くと、アプリケーションは証明書チェーンが信頼された認証局に遡ることを確認し、署名後にドキュメントの内容が変更されていないことを検証します。 この認証と整合性の組み合わせにより、契約書、請求書、規制書類、改ざん証拠が問題となる任意の文書にとってデジタル署名は不可欠です。
PDF署名には、承認署名とオーサー(認定)署名の2種類があります。 承認署名は、ある時点での署名者の承認を記録します。複数の当事者が連続して承認署名を追加しても、以前の署名が無効になることはありません。 certify() で適用された認証署名は、PdfCertificationLevel に応じてドキュメントをロックし、署名者をドキュメントの著者としてマークします。 認定署名は、ドキュメントの最初の署名である必要があり、その後の署名者が行える変更(許される場合)は制御されます。
IronPDF は、一貫した PdfSignature と PdfDocument に基づいた API を介して、両方の署名タイプを処理します。 初期セットアップ、依存関係の構成、およびライセンスキーの指示については、スタートアップ概要を参照してください。
JavaでのPDFのデジタル署名方法
- デジタル署名のためのIronPDF Javaライブラリをインストールする
- PdfDocumentクラスを使用してPDFを読み込む
- PFX証明書ファイルとパスワードを使用してPdfSignatureを作成する
setSignatureImageを使用して目に見える署名画像を設定する(任意)signDigitalSignatureを使用して署名を適用するcertifyとPdfCertificationLevelでPDFを認定するsaveAsで署名済みのPDFを保存する
始める前に何が必要ですか?
IronPDFによるPDF署名を行う前に次の前提条件を確認してください:
- Java 8以降:IronPDFはJDK8以上のバージョンを必要とします。
- IronPDF for Java:依存関係をビルドファイルに追加してください。最新バージョンはMaven Centralで確認できます。
- 有効なライセンスキー:
License.setLicenseKey()を使用してアプリケーションの起動時にキーを設定します。 設定の詳細については、ライセンスキーガイドをご覧ください。 - PFX または P12 証明書ファイル:これはプライベートキーと公開証明書をPKCS#12形式で含むパスワード保護されたアーカイブです。 自己署名証明書は開発およびテストに適しています; 本番ドキュメントで外部受取人に信頼される必要がある場合、DigiCert、Comodo、GlobalSignなどの認定機関によって発行された証明書を使用してください。
完全な依存関係のセットアップとプロジェクト構成についてはスタートアップ概要を参照してください。
PDFにデジタル署名を適用する方法は?
PdfSignature コンストラクタは、PFX証明書のファイルパスとそのパスワードを取ります。 一度構築されたら、3つのセッターメソッドを使用してオプションのメタデータを添付できます:
setSigningContact(String): 署名する人の名前またはメールアドレスsetSigningLocation(String): 署名者の物理的または組織的な場所setSigningReason(String): ドキュメントが署名される理由の簡単な説明
これらのフィールドはPDFビューアの署名プロパティパネルに表示され、コンプライアンス目的のために有用な監査記録を作成します。 ロードされたPdfDocument に対して signDigitalSignature(PdfSignature) を呼び出して暗号化署名を埋め込み、その後 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"));
}
}
//: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"));
}
}
signDigitalSignature() が完了すると、PDFには、PFXファイルからの秘密鍵で署名されたドキュメント内容の暗号化ハッシュが含まれます。このポイント以降のファイルの変更は署名を無効にします。
PDFに視覚的な署名画像を追加する方法は?
視覚的な署名画像は、署名フィールドの位置でPDFページにグラフィカルな表現を直接配置します。 これはスキャンした手書きの署名、会社のハンコまたはロゴを表示するために一般的に使用され、ドキュメントがPDFリーダーの署名パネルで検査された時だけでなく、印刷または表示された時に署名されたように見せます。
可視画像を追加するには、画像ファイルを FileInputStream として開き、PdfSignature.setSignatureImage(InputStream) に渡してから signDigitalSignature() を呼び出します。 画像はページ上の署名フィールド内に組み込まれます。
//: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"));
}
}
//: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"));
}
}
署名画像は暗号保護を置き換えはしません; グラフィカルなスタンプと基礎となる証明書は署名済みの出力の一部として残ります。 署名画像にはPNGとJPEGフォーマットがサポートされています。
特定の許可レベルでPDFを認定する方法は?
PDFを認定することは、承認署名の追加とは異なります。 pdf.certify(PdfSignature, PdfCertificationLevel) を呼び出すとき、ドキュメントの著者として署名し、後続のユーザーによる許可される変更の種類を指定します。 認定されたPDFは、Adobe Acrobatで青いリボンまたは類似の信頼指標を表示し、受取人にそのドキュメントが確認されたソースから来ていることを知らせます。
IronPDF は、PdfCertificationLevel enum を通じて 3つの認証レベルを提供します:
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"));
}
}
//: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"));
}
}
NO_CHANGES_ALLOWED で認証されると、PDFを変更しようとすると認証署名が壊れ、PDFビューアが警告を表示します。 認定されたドキュメントが後続の受領者によって記入または注釈が必要な場合は、FORM_FILLING または FORM_FILLING_AND_ANNOTATIONS を選択します。
デジタル署名にタイムスタンプを追加する方法は?
タイムスタンプ機関(TSA)サーバーは、PDFに署名と共に埋め込まれる暗号署名の時刻トークンを提供します。 このタイムスタンプは、署名者のローカルクロックとは無関係に署名が適用された時刻を証明します。 長期的な有効性はタイムスタンプに依存します:署名証明書が期限切れになった後でも、信頼されたタイムスタンプは検証者が署名が証明書がまだ有効な間に作成されたことを確認することを可能にします。
タイムスタンプを有効にするには、署名前に PdfSignature オブジェクトに 2つのプロパティを設定します:
setTimestampHashAlgorithm(PdfHashAlgorithm): タイムスタンプトークンを計算する際に使用するハッシュアルゴリズムを指定します。PdfHashAlgorithm.SHA256は標準の選択です。setTimestampUrl(String): タイムスタンプトークンを発行するTSAサーバーのHTTPまたはHTTPSエンドポイント。
テストおよび低容量の本番使用のために複数のTSAサーバーが無償で利用可能です。 https://freetsa.org/tsr と http://timestamp.digicert.com は一般的に使用される2つのエンドポイントです。
//: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"));
}
}
//: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"));
}
}
署名時にTSAが到達不能な場合、IronPDFは例外をスローします; ネットワークアクセスとTSAエンドポイントURLを確認し、本番環境に展開する前に確認してください。 高容量のプロダクションワークフローのためには、商用TSAサブスクリプションを検討して、稼働時間とスループット保証を確保してください。
JavaでPDFをデジタル署名する次のステップは?
IronPDF の PdfSignature クラスは、PDF 署名要件の全範囲をカバーし、証明書メタデータを持つ承認署名、可視グラフィカルスタンプ、アクセス制御レベルを持つ PDF 認証、および長期有効性のための TSA バックのタイムスタンプをサポートします。 PDFワークフローを署名以外にも拡張するために、これらの関連リソースを探る:
- JavaでPDFフォームを作成する:認証された後に記入可能なフォームフィールドを構築する
- JavaでPDFフォームに入力する: 既存のPDFドキュメント内のフォームフィールドをプログラムで入力します
- JavaでPDFに注釈を追加する: 特定のページ位置にコメント、ハイライト、およびマークアップを付加します
- JavaでPDFを結合する: 複数のドキュメントを単一の認定署名を適用する前に結合します
- IronPDF for Javaの例: IronPDF Java API 全体をカバーするコピー&ペースト用のコードサンプル
無料トライアルを開始してデジタル署名をJava PDFワークフローに追加します。 商用利用のライセンスを購入するには、ライセンスオプションをご覧ください。
よくある質問
JavaでIronPDFを使用してPDFにデジタル署名をする方法は?
PdfDocument.fromFile()を使用してPDFを読み込み、PFX証明書ファイルへのパスとそのパスワードを使用してPdfSignatureを作成し、signDigitalSignature(signature)を呼び出し、pdf.saveAs()で保存します。
IronPDFにおけるsignDigitalSignature()とcertify()の違いは何ですか?
signDigitalSignature()は、1人の署名者の承認を記録する承認署名を追加します。複数の承認署名を順番に追加できます。certify()は、ドキュメントの最初にある必要がある作者署名を追加し、後続の署名者が行える変更を制御するPdfCertificationLevelを設定します。
Javaで署名済みPDFに可視署名画像を追加するにはどうすればいいですか?
FileInputStreamとして画像ファイルを開き、signature.setSignatureImage(imageStream)に渡してからsignDigitalSignature()を呼び出します。画像は、ページ上の暗号署名と共に署名フィールドに埋め込まれます。
IronPDFがサポートするPDF認証レベルは何ですか?
IronPDFは、PdfCertificationLevel列挙型を介して3つのレベルをサポートします。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証明書ファイルとそのパスワードが必要です。


