Java での スマートカードからPDFドキュメントに署名
Contents
[
Hide
]
現在の Java リポジトリには、専用のソースバックされたスマートカード署名サンプルが facades/pdffilesignature 配下に含まれていませんが、以下のワークフローはローカル証明書ストアから選択した証明書で PDF に署名する典型的な API パターンを示しています。
スマートカードから PDF ドキュメントに署名
- 元の PDF を開いて Document を取得してください。
- PdfFileSignature ファサードを作成し、元の PDF ドキュメントをバインドしてください。
- ローカル証明書を取得し、必要な ExternalSignature を作成してください。
- ビジュアル署名の外観と対象の Rectangle を構成してください。
- PDF 文書に署名を適用するには、PdfFileSignature ファサードを使用してください。
- 更新された PDF ドキュメントを保存してください。
- 読み込んだドキュメントを PdfFileSignature ファサードにバインドするには、
bindPdf(...)を使用してください。 - スマートカード資格情報を表すローカル証明書を取得するには、
getLocalCertificate()を呼び出してください。 - 証明書が見つかったか確認してください。見つからない場合は、変更のない出力ファイルを保存し、ワークフローを停止してください。
- 選択された証明書から ExternalSignature を作成してください。
- 視覚的な署名外観の画像を設定するには、
setSignatureAppearance(...)を使用してください。 sign(...)を呼び出す際は、対象ページ、理由、連絡先、場所、可視性フラグ、署名の Rectangle、および外部署名オブジェクトを指定してください。- 署名された PDF を出力パスに保存してください。
public static void signWithSmartCard(Path inputFile, Path outputFile, Path pngFile) {
try (Document document = new Document(inputFile.toString());
PdfFileSignature pdfSignature = new PdfFileSignature()) {
pdfSignature.bindPdf(document);
X509Certificate2 selectedCertificate = getLocalCertificate();
if (selectedCertificate == null) {
System.out.println("Local certificate was not found.");
document.save(outputFile.toString());
return;
}
ExternalSignature externalSignature = new ExternalSignature(selectedCertificate, null);
pdfSignature.setSignatureAppearance(pngFile.toString());
pdfSignature.sign(1, "Reason", "Contact", "Location", true,
new java.awt.Rectangle(100, 100, 200, 200), externalSignature);
pdfSignature.save(outputFile.toString());
}
}