多语言展示
当前在线:1352今日阅读:20今日分享:50

JAVA 给PDF添加数字签名

随着电子账单、回单、通知、合同的流行,电子文档的可信度变得非常重要。为防止非法篡改,确保文档的权威性,我们可以对PDF进行数字签名。本篇经验将介绍在Java中给PDF添加数字签名。
工具/原料
1

 Free Spire.PDF for JAVA 2.4.4(免费版)

2

 IntelliJ IDEA

Jar包导入:

首先,获取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”;④ 导入完成。如下图:

Java代码参考示例:
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('1');         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

运行效果:

推荐信息