JAVA 给PDF添加数字签名
1、首先,获取jar包。
Step 1: 下载控件包之后解压,打开“Project Structure”界面。(以下是两种在IDEA中快速打开Project Structure界面的方式:①file->Project Structure ②Shift+Ctrl+Alt+S快捷键进入‘Project Structure’。可选其中任意一种)
Step 2:按以下操作步骤进行导入。① 选择“Modules”—“Dependencies”,添加外置jar包;② 进入"Attach File or Directories"界面选择jar文件路径,然后点击“OK”;③ 勾选jar路径选项,点击“Apply/OK”;④ 导入完成。如下图:


1、import com.spire.pdf.PdfDocument;
import com.spire.pdf.security.*;
import com.spire.pdf.graphics.*;
import java.awt.*;
import java.awt.geom.*;
public class digitalSignature {
public static void main(String[] args) {
//定义输入、输出文件和数字签名文件
String inputFile = "data/Doc2.pdf";
String outputFile = "output/digitalSignature_result.pdf";
String pfxPath = "data/test.pfx";
//加载PDF文件
PdfDocument doc = new PdfDocument();
doc.loadFromFile(inputFile);
//加载证书
PdfCertificate cert = new PdfCertificate(pfxPath, "123456");
PdfSignature signature = new PdfSignature(doc, doc.getPages().get(0), cert, "signature0");
Rectangle2D rect = new Rectangle2D.Float();
rect.setFrame(new Point2D.Float(90, 550), new Dimension(270, 90));
signature.setBounds(rect);
//设置图形显示模式,如果不设置图形显示模式,则应用默认的图形显示模式
signature.setGraphicMode(GraphicMode.Sign_Image_And_Sign_Detail);
signature.setNameLabel("Signer:");
signature.setName("Gary");
signature.setContactInfoLabel("ContactInfo:");
signature.setContactInfo("136558284211");
signature.setDateLabel("Date:");
signature.setDate(new java.util.Date());
signature.setLocationInfoLabel("Location:");
signature.setLocationInfo("Chengdu");
signature.setReasonLabel("Reason: ");
signature.setReason("The certificate of this document");
signature.setDistinguishedNameLabel("DN: ");
signature.setDistinguishedName(signature.getCertificate().get_IssuerName().getName());
signature.setSignImageSource(PdfImage.fromFile("data/logo.png"));
signature.setDocumentPermissions(PdfCertificationFlags.Forbid_Changes);
signature.setCertificated(true);
//保存文件
doc.saveToFile(outputFile);
doc.close();
}
}
2、运行效果:
