Java에서 PDF의 서명 정보 추출

PDF 문서에 이미 존재하는 서명을 검사하고 관리하려면 PdfFileSignature를 사용하세요.

서명 정보 읽기

  1. PdfFileSignature 파사드를 생성하고 소스 PDF 문서를 바인딩하세요.
  2. 문서 서명 이름에 액세스하고 예제에 필요한 서명 검사 흐름을 구성하세요.
  3. PdfFileSignature 파사드에서 서명 정보를 읽고 확인하세요.
  4. 반환된 값을 읽거나 다음 처리 단계를 계속하세요.
public static void getSignatureInformation(Path inputFile) {
    PdfFileSignature pdfSignature = new PdfFileSignature();
    try {
        pdfSignature.bindPdf(inputFile.toString());
        SignatureName signatureName = pdfSignature.getSignatureNames().get_Item(0);
        System.out.println("Signature Names: " + pdfSignature.getSignNames());
        System.out.println("Signer: " + pdfSignature.getSignerName(signatureName));
        System.out.println("Date: " + pdfSignature.getDateTime(signatureName));
        System.out.println("Reason: " + pdfSignature.getReason(signatureName));
        System.out.println("Location: " + pdfSignature.getLocation(signatureName));
    } finally {
        pdfSignature.close();
    }
}

서명 확인

  1. PdfFileSignature 파사드를 생성하고 소스 PDF 문서를 바인딩하세요.
  2. 문서 서명 이름에 액세스하고 예시에 필요한 확인 흐름을 구성하세요.
  3. PdfFileSignature 파사드에서 서명 정보를 읽고 확인하세요.
public static void verifyPdfSignature(Path inputFile) {
    PdfFileSignature pdfSignature = new PdfFileSignature();
    try {
        pdfSignature.bindPdf(inputFile.toString());
        SignatureName signatureName = pdfSignature.getSignatureNames().get_Item(0);
        System.out.println("Signature '" + signatureName + "' is valid: "
                + pdfSignature.verifySignature(signatureName));
        System.out.println("Signature covers whole document: "
                + pdfSignature.coversWholeDocument(signatureName));
    } finally {
        pdfSignature.close();
    }
}

서명 인증서 추출

  1. PdfFileSignature 파사드를 생성하고 소스 PDF 문서를 바인딩하세요.
  2. 인증서 추출에 필요한 문서 서명 이름에 접근하세요.
  3. 추출된 출력을 작성하거나 PdfFileSignature 파사드에서 반환된 값을 검사하세요.
public static void extractSignatureCertificate(Path inputFile, Path outputFile) throws Exception {
    PdfFileSignature pdfSignature = new PdfFileSignature();
    try {
        pdfSignature.bindPdf(inputFile.toString());
        SignatureName signatureName = pdfSignature.getSignatureNames().get_Item(0);
        try (InputStream inputStream = pdfSignature.extractCertificate(signatureName);
             OutputStream outputStream = Files.newOutputStream(outputFile)) {
            inputStream.transferTo(outputStream);
        }
    } finally {
        pdfSignature.close();
    }
}