这篇文章将介绍如何在Java应用程序中给PDF文档添加数字签名。
使用工具:
Free Spire.PDF for JAVA
步骤:
1.创建一个Java project,并添加一个class SignPDF.JAVA
2.下载Free Spire.PDF for JAVA包并解压缩,然后从lib文件夹下,导入Spire.Pdf.jar包和Spire.Common.jar包到程序中:
3.SignPDF.JAVA中添加代码:
import com.spire.ms.System.DateTime;
import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfImage;
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;
public class SignPDF {
public static void main(String[] args){
//加载PDF文档并获取第一页
PdfDocument doc = new PdfDocument();
doc.loadFromFile("Input.pdf");
PdfPageBase page = doc.getPages().get(0);
Rectangle2D.Float rec = new Rectangle2D.Float(100, 450, 310, 100);
//Load pfx文件
PdfCertificate certificate = new PdfCertificate("gary.pfx", "e-iceblue");
//添加数字签名
PdfSignature signature = new PdfSignature(doc, page, certificate, "signature1", rec);
//设置签名详细信息
PdfImage img = PdfImage.fromFile("E-iceblueLogo.png");
signature.setSignImageSource(img);
signature.setNameLabel("Signer: ");
signature.setName("Gary");
signature.setContactInfoLabel("ContactInfo: ");
signature.setContactInfo("support@e-iceblue.com");
signature.setDateLabel("Date: ");
signature.setDate(DateTime.getToday());
signature.setLocationInfoLabel("Location: ");
signature.setLocationInfo("Chengdu");
signature.setReasonLabel("Reason: ");
signature.setReason("The certificate of this document.");
signature.setDistinguishedNameLabel("DL: ");
signature.setDistinguishedName(signature.getCertificate().get_IssuerName().getName());
signature.setGraphicMode(GraphicMode.Sign_Image_And_Sign_Detail);
signature.setDocumentPermissions(PdfCertificationFlags.Allow_Form_Fill);
signature.setCertificated(true);
//保存文件
doc.saveToFile("SimpleSign.pdf", FileFormat.PDF);
}
}
结果文件: