在 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());
}
}