Java에서 스마트 카드로 PDF 문서 서명

현재 Java 저장소에는 facades/pdffilesignature 아래에 전용 소스 지원 스마트 카드 서명 예제가 포함되어 있지 않지만 다음 작업 흐름은 로컬 인증서 저장소에서 선택한 인증서로 PDF에 서명하기 위한 일반적인 API 패턴을 보여줍니다.

스마트 카드에서 PDF 문서에 서명

  1. 원본 PDF Document를 여세요.
  2. PdfFileSignature 파사드를 생성하고 소스 PDF 문서를 바인딩하세요.
  3. 로컬 인증서를 검색하고 필수 ExternalSignature를 생성하세요.
  4. 시각적 시그니처 모양과 대상 Rectangle을 구성하세요.
  5. PdfFileSignature를 통해 PDF 문서에 서명을 적용하세요.
  6. 업데이트된 PDF 문서를 저장하세요.
  7. bindPdf(...)를 사용하여 로드된 문서를 PdfFileSignature 파사드에 바인딩하세요.
  8. getLocalCertificate()를 호출하여 스마트 카드 자격 증명을 나타내는 로컬 인증서를 검색하세요.
  9. 인증서가 발견되었는지 확인하세요. 그렇지 않은 경우 변경되지 않은 출력 파일을 저장하고 워크플로를 중지하세요.
  10. 선택한 인증서에서 ExternalSignature를 생성하세요.
  11. setSignatureAppearance(...)으로 시각적 시그니처 외관 이미지를 설정하세요.
  12. 대상 페이지, 사유, 연락처, 위치, 가시성 플래그, 서명Rectangle, 외부 서명 개체를 가지고 sign(...)를 호출하세요.
  13. 서명된 PDF를 출력 경로에 저장하세요.
public static void signWithSmartCard(Path inputFile, Path outputFile, Path pngFile) {
    try (Document document = new Document(inputFile.toString());
            PdfFileSignature pdfSignature = new PdfFileSignature()) {
        pdfSignature.bindPdf(document);
        X509Certificate2 selectedCertificate = getLocalCertificate();
        if (selectedCertificate == null) {
            System.out.println("Local certificate was not found.");
            document.save(outputFile.toString());
            return;
        }

        ExternalSignature externalSignature = new ExternalSignature(selectedCertificate, null);
        pdfSignature.setSignatureAppearance(pngFile.toString());
        pdfSignature.sign(1, "Reason", "Contact", "Location", true,
                new java.awt.Rectangle(100, 100, 200, 200), externalSignature);
        pdfSignature.save(outputFile.toString());
    }
}