JavaがPDFに署名するときに信頼できるタイムスタンプを追加する方法


一、プログラム運転環境
  • コンパイル環境:IntelliJ IDEA
  • に必要なテストファイル:PDF、.pfxデジタル証明書および鍵、PDF Jarパケット(Free Spire.PDF for Java)、署名画像(.pngフォーマット)
  • トラスティッドタイムスタンプサーバ:URLアドレス
  • 注:以下のコードのすべてのテストファイルのパスは、C:\Users\Administrator\Idea Project\Centificat_PDF\test.pdfは、ファイルパスをカスタマイズできます。
    jar導入については、以下の2つの方法が参照されます。
    1.手動で導入する:jarをダウンロードしてローカルに包んで、解凍する;IDEAでは、以下のステップの導入が行われる。



    2.Maven配置導入。pom.xmlでは下記の内容をダウンロードして導入します。
    
    <repositories>
            <repository>
                <id>com.e-iceblue</id>
                <url>http://repo.e-iceblue.cn/repository/maven-public/</url>
            </repository>
        </repositories>
    <dependencies>
        <dependency>
            <groupId>e-iceblue</groupId>
            <artifactId>spire.pdf.free</artifactId>
            <version>4.4.1</version>
        </dependency>
    </dependencies>
    二、プログラムテストコード
    
    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 TimeStamp {
        public static void main(String[] args) {
            //  PDF  
            PdfDocument pdf = new PdfDocument();
            pdf.loadFromFile("test.pdf");
    
            //  pfx  ,     
            PdfCertificate cert = new PdfCertificate("pfx  ","  ");
    
            //           ,         
            PdfSignature signature = new PdfSignature(pdf, pdf.getPages().get(2), cert, "Mia");
            Rectangle2D rect = new Rectangle2D.Float();
            rect.setFrame(new Point2D.Float((float) pdf.getPages().get(0).getActualSize().getWidth() - 340, (float) pdf.getPages().get(0).getActualSize().getHeight() - 230), new Dimension(280, 120));
            signature.setBounds(rect);
    
            //            
            signature.setGraphicMode(GraphicMode.Sign_Image_And_Sign_Detail);
    
            //       
            signature.setNameLabel("   :");
            signature.setName("Manager");
            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);
    
            //        
            String timestampeServerUrl = "        ";
            signature.configureTimestamp(timestampeServerUrl);
    
            //    
            pdf.saveToFile("SignatureWithTimeStamp.pdf");
            pdf.close();
        }
    }
    タイムスタンプの効果は図の通りです。

    関連読書のオススメ:
  • Java PDFデジタル署名の追加、検証
  • この記事ではJavaがPDFに署名する際に信頼できるタイムスタンプを追加した記事を紹介します。より多くの関連Javaに信頼できるタイムスタンプを追加しました。以前の文章を検索してください。または下記の関連記事を引き続き閲覧してください。これからもよろしくお願いします。