ドキュメントセットのコンテンツ保護方式では、ほかに、文書を暗号化透かしを追加するために、デジタル署名の使用は、セキュリティの有効な手段です。デジタル署名ファイルを確認することが容易で、高い権威と信頼性を持っています。Adobe PDF文書、デジタル署名を追加するか確認するための機能と直接法では、PDF文書に電子署名を追加し、署名を検証することにより、Javaプログラムをご紹介します次の資料は有効です。
使用ツール: Java用Spire.PDF
ジャーファイルとインポートの方法を取得します。
方法1 :公式ウェブサイトを通じてジャーダウンロードするパッケージを。ダウンロード後は、JavaプログラムにSpire.Pdf.jarファイルの下のファイルとlibフォルダを解凍します。エフェクトを参照して本明細書で以下に紹介:(プログラム)は2つのJARファイルをモジュールに導入しました。
方法2 :によってMavenの倉庫を導入取り付けられています。
Java コード例
[実施例1 ]にデジタル署名を追加するPDF
輸入com.spire.pdf *。; 輸入com.spire.pdf.graphics.PdfImage。 輸入com.spire.pdf.graphics.PdfTrueTypeFont。 輸入com.spire.pdf.security.GraphicMode。 輸入com.spire.pdf.security.PdfCertificate。 輸入com.spire.pdf.security.PdfCertificationFlags。 輸入com.spire.pdf.security.PdfSignature。 インポート持つjava.awt。*; 輸入java.awt.geom.Point2D。 輸入java.awt.geom.Rectangle2D; パブリッククラスAddCertificate { パブリック静的無効メイン(文字列[] args){ //加载PDF文档 PdfDocument DOC =新しいPdfDocument()。 doc.loadFromFile( "test.pdfという"); //加载PFX证书、及证书秘钥 PdfCertificate CERT =新PdfCertificate( "Cermia.pfx"、 "123654yes!"); //特定のページにデジタル署名を追加し、その位置とサイズを設定 PdfSignature署名=新しいPdfSignature(DOC、 (2取得doc.getPagesを()。 )、CERT、 "MySignature"); たRectangle2D新しい新しいRectangle2D.FloatザRECT =(); rect.setFrame(Point2D.Float新しい新しい((フロート).. doc.getPages()GET(0).getActualSize()のgetWidth() - 340、(フロート)doc.getPages()GET(0).getActualSize()のgetHeight() - 230)、(280、150))新次元新; .. signature.setBounds(RECT); //設定されたピクチャと署名テキストモード signature.setGraphicMode(GraphicMode.Sign_Image_And_Sign_Detail); //設定されたコンテンツの署名 signature.setNameLabel( "署名:"); signature.setName( "ミア"); signature.setContactInfoLabel( "電話番号:"); "ArialのユニコードMS"、Font.PLAINを9))); //セットされた原稿の権限は変更を禁止します signature.setContactInfo( "02881705109")。 signature.setDateLabel( "日期:"); signature.setDate(新しい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(新しいPdfTrueTypeFont(新しいフォント( "ArialのユニコードMS"、Font.PLAIN、9)))。 署名。 signature.setCertificated(真の); //保存文档 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); } } } } }
验证结果:
(本文完)