Рубрики
Без рубрики

Добавление и проверка цифровой подписи в PDF с помощью Java

В этой статье показано, как добавить и проверить цифровую подпись в PDF с помощью Java. Помеченный pdf, java, цифровой подписью.

Цифровая подпись – это эффективный и широко используемый способ защиты 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”