Adding Java, PDF digital signature verification

In the document set content protection method, in addition to encrypt the document, add watermark, the use of digital signatures is also an effective means of security. The digital signature file is easy to verify, and has a high authority and credibility. In the Adobe PDF document, functional and direct method to add or verify digital signatures, the following article will introduce the Java program by adding a digital signature to PDF documents, and verifying the signature is valid.

Use tools: Spire.PDF for the Java

Jar file and obtain import method:

 

Method 1 : through the official website to download jar package. After the download, unzip the file and the lib folder under the Spire.Pdf.jar file into Java programs. Introduced herein below with reference to the effect :( program were introduced into the two jar file module)



 

Method 2 : by maven mounted introducing warehouse.

 

Java code examples

 

[Example 1 ] add digital signatures to PDF

import com.spire.pdf.*;
import com.spire.pdf.graphics.PdfImage;
import com.spire.pdf.graphics.PdfTrueTypeFont;
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.*;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;

public class AddCertificate {
    public static void main(String[]args){
        //加载PDF文档
        PdfDocument doc = new PdfDocument();
        doc.loadFromFile("test.pdf");

        //加载pfx证书,及证书秘钥
        CERT = new new PdfCertificate PdfCertificate ( "Cermia.pfx", "123654yes!"); 

        // add a digital signature to a specific page, and set its position and size 
        PdfSignature signature = new PdfSignature (doc, doc.getPages () get (2. ), CERT, "MySignature"); 
        Rectangle2D new new Rectangle2D.Float The RECT = (); 
        rect.setFrame (Point2D.Float The new new ((a float).. doc.getPages () GET (0) .getActualSize () getWidth () - 340., (a float) doc.getPages () GET (0) .getActualSize () getHeight () - 230), new new the Dimension (280, 150));.. 
        signature.setBounds (RECT); 

        // set picture and signature text mode 
        signature.setGraphicMode (GraphicMode.Sign_Image_And_Sign_Detail); 

        // set the content signature 
        signature.setNameLabel ( "the signatories:"); 
        signature.setName ( "Mia");
        signature.setContactInfoLabel ( "Tel:");  
        signature.setContactInfo ( "02,881,705,109");
        signature.setDateLabel ( "Date:"); 
        signature.setDate (new new java.util.Date ()); 
        signature.setLocationInfoLabel ( "Location:"); 
        signature.setLocationInfo ( " Chengdu "); 
        signature.setReasonLabel (" reasons: "); 
        signature.setReason (" document owner "); 
        signature.setDistinguishedNameLabel (" DN: "); 
        signature.setDistinguishedName (signature.getCertificate ().. get_IssuerName () getName ()); 
        signature.setSignImageSource (PdfImage.fromFile ( "sign.png")); 

        // set the signature font 
        signature.setSignDetailsFont (new PdfTrueTypeFont (new Font ( "Arial Unicode MS", Font.PLAIN,9))); 

        // set document permissions to prohibit changes
        signature.setDocumentPermissions(PdfCertificationFlags.Forbid_Changes);
        signature.setCertificated(true);

        //保存文档
        doc.saveToFile("AddSignature.pdf");
        doc.close();
    }
}

 Add a digital signature effects:


 

[Example 2 ] to verify the validity of digital signatures

import com.spire.pdf.*;
import com.spire.pdf.security.PdfSignature;
import com.spire.pdf.widget.PdfFormFieldWidgetCollection;
import com.spire.pdf.widget.PdfFormWidget;
import com.spire.pdf.widget.PdfSignatureFieldWidget;

import javax.swing.*;

public class ValidateSignature {
    public static void main(String[]args){
        //创建PdfDocument实例
        PdfDocument doc = new PdfDocument();
        //加载含有签名的PDF文件
        doc.loadFromFile("SignnedFile.pdf");

        //获取域集合
        PdfFormWidget pdfFormWidget = (PdfFormWidget) doc.getForm();
        PdfFormFieldWidgetCollection pdfFormFieldWidgetCollection = pdfFormWidget.getFieldsWidget();

        //遍历域
        for (int i = 0; i < pdfFormFieldWidgetCollection.getCount(); i++) {
            //判定是否为签名域
            if (pdfFormFieldWidgetCollection.get(i) instanceof PdfSignatureFieldWidget) {
                //获取签名域
                PdfSignatureFieldWidget signatureFieldWidget = (PdfSignatureFieldWidget) pdfFormFieldWidgetCollection.get(i);
                //获取签名
                PdfSignature signature = signatureFieldWidget.getSignature();

                //判定签名是否有效
                boolean result = signature.verifySignature();
                if (result) {
                    String str1 =" 有效签名";
                    JOptionPane.showMessageDialog(null,str1);
                } else {
                    String str2 =" 无效签名";
                    JOptionPane.showMessageDialog(null,str2);
                }
            }
        }

    }
}

 

验证结果:


 

 

 

(本文完)

 

 

Guess you like

Origin miaonly.iteye.com/blog/2443093