Java 添加、验证PDF 数字签名

  • 2019 年 10 月 3 日
  • 笔记

???????????????????????????????????????????????????????????????????????????PDF?????????????????????????????????Java????????????PDF??????????????

?????Spire.PDF for Java

Jar??????????

??1????????jar???????????????lib?????Spire.Pdf.jar?????Java??????????????????jar?????????module?

 

??2????maven???????

 

Java????

???1????????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????????          PdfCertificate cert = new PdfCertificate("Cermia.pfx","123654yes!");            //?????????????????????          PdfSignature signature = new PdfSignature(doc, doc.getPages().get(2), cert, "MySignature");          Rectangle2D rect = new Rectangle2D.Float();          rect.setFrame(new Point2D.Float((float) doc.getPages().get(0).getActualSize().getWidth() - 340, (float) doc.getPages().get(0).getActualSize().getHeight() - 230), new Dimension(280, 150));          signature.setBounds(rect);            //????????????          signature.setGraphicMode(GraphicMode.Sign_Image_And_Sign_Detail);            //???????          signature.setNameLabel("????");          signature.setName("Mia");          signature.setContactInfoLabel("?????");          signature.setContactInfo("02881705109");          signature.setDateLabel("???");          signature.setDate(new java.util.Date());          signature.setLocationInfoLabel("???");          signature.setLocationInfo("??");          signature.setReasonLabel("???");          signature.setReason("?????");          signature.setDistinguishedNameLabel("DN: ");          signature.setDistinguishedName(signature.getCertificate().get_IssuerName().getName());          signature.setSignImageSource(PdfImage.fromFile("sign.png"));            //???????          signature.setSignDetailsFont(new PdfTrueTypeFont(new Font("Arial Unicode MS", Font.PLAIN, 9)));            //???????????          signature.setDocumentPermissions(PdfCertificationFlags.Forbid_Changes);          signature.setCertificated(true);            //????          doc.saveToFile("AddSignature.pdf");          doc.close();      }  }

?????????

 

???2??????????

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

?????

 

???Java ??????PDF??????????

 

?????