Цифровая подпись – это эффективный и широко используемый способ защиты PDF-файлов от изменения другими лицами без разрешения. В этой статье будет показано, как добавить цифровую подпись в PDF-файл и проверить цифровую подпись с помощью бесплатного Java PDF API – Free Spire. PDF для Java .
Для проектов maven мы могли бы легко добавлять зависимости в бесплатный Spire.PDF для Java API, добавив следующий код в pom.xml:
com.e-iceblue e-iceblue http://repo.e-iceblue.com/nexus/content/groups/public/ e-iceblue spire.pdf.free 2.4.4
(Последняя версия бесплатного шпиля.PDF-файл для Java в репозитории maven можно найти здесь )
Для обычных Java-проектов скачайте последнюю версию бесплатного Spire.PDF для Java ( ссылка для скачивания ), затем добавьте Spire.Pdf.jar из папки lib в ваш проект.
. Добавьте цифровую подпись в PDF-файл
Чтобы создать цифровую подпись, нам нужно создать объект класса подписи Pdf, а затем задать свойства подписи. Приведенный ниже пример кода показывает, как добавить цифровую подпись на страницу PDF в указанном месте.
import com.spire.pdf.PdfDocument; import com.spire.pdf.PdfPageBase; import com.spire.pdf.security.GraphicMode; import com.spire.pdf.security.PdfCertificate; import com.spire.pdf.security.PdfCertificationFlags; import com.spire.pdf.security.PdfSignature; import java.awt.geom.Rectangle2D; import java.util.Date; public class AddDigitalSignature { public static void main(String[] args) { //Load the PDF file PdfDocument doc = new PdfDocument(); doc.loadFromFile("Input.pdf"); //Get the first Page PdfPageBase page = doc.getPages().get(0); Rectangle2D.Float rec = new Rectangle2D.Float(100, 450, 310, 100); //Load the .pfx certificate file PdfCertificate certificate = new PdfCertificate("gary.pfx", "e-iceblue"); //Add digital signature to the first page at specified location PdfSignature signature = new PdfSignature(doc, page, certificate, "signature1", rec); //Set signature details signature.setNameLabel("Signer: "); signature.setName("Gary"); signature.setContactInfoLabel("ContactInfo: "); signature.setContactInfo("010-123456"); signature.setDateLabel("Date: "); signature.setDate(new Date()); signature.setLocationInfoLabel("Location: "); signature.setLocationInfo("America"); signature.setReasonLabel("Reason: "); signature.setReason("The certificate of this document."); signature.setDistinguishedNameLabel("DL: "); signature.setDistinguishedName(signature.getCertificate().get_IssuerName().getName()); signature.setGraphicMode(GraphicMode.Sign_Name_And_Sign_Detail); signature.setDocumentPermissions(PdfCertificationFlags.Allow_Form_Fill); signature.setCertificated(true); //Save the file doc.saveToFile("AddSignature.pdf"); } }
. Проверка цифровой подписи
Метод VerifySignature() в классе Pdfsignature используется для проверки того, является ли цифровая подпись действительной или нет.
import com.spire.pdf.PdfDocument; import com.spire.pdf.security.PdfSignature; import com.spire.pdf.widget.PdfFormFieldWidgetCollection; import com.spire.pdf.widget.PdfFormWidget; import com.spire.pdf.widget.PdfSignatureFieldWidget; public class VerifyDigitalSignature { public static void main(String[] args) { //Load the PDF file PdfDocument doc = new PdfDocument(); doc.loadFromFile("AddSignature.pdf"); //Get the forms collection PdfFormWidget pdfFormWidget = (PdfFormWidget) doc.getForm(); PdfFormFieldWidgetCollection pdfFormFieldWidgetCollection = pdfFormWidget.getFieldsWidget(); //Get the signature field for (int i = 0; i < pdfFormFieldWidgetCollection.getCount(); i++) { if (pdfFormFieldWidgetCollection.get(i) instanceof PdfSignatureFieldWidget) { PdfSignatureFieldWidget signatureFieldWidget = (PdfSignatureFieldWidget) pdfFormFieldWidgetCollection.get(i); //Get the signature in the signature field PdfSignature signature = signatureFieldWidget.getSignature(); //Verify the signature boolean result = signature.verifySignature(); if(result) { System.out.println("Signature is valid"); }else { System.out.println("Signature is invalid"); } } } } }
Оригинал: “https://dev.to/eiceblue/add-and-verify-digital-signature-in-pdf-with-java-ofg”