Подписание PDF-документов со смарт-карты на Java
Contents
[
Hide
]
В текущем репозитории Java нет отдельного примера подписания с помощью смарт-карты, подкрепленного исходным кодом в разделе facades/pdffilesignature. Однако приведенный ниже рабочий процесс демонстрирует типичную схему использования API для подписания PDF с помощью сертификата, выбранного из локального хранилища сертификатов.
Подписание 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());
}
}