파일 확장자 java 확인 – Java 파일 형식 감지: 문서 유형 검증 및 확인

문서를 처리하기 전에 가장 일반적인 작업 중 하나는 파일 확장자 java를 확인하는 것입니다.

예상한 형식이 아니어서 애플리케이션이 충돌한 파일을 업로드한 적이 있나요? 당신만 그런 것이 아닙니다. Java에서 파일 형식을 감지하고 검증하는 것은 견고한 문서 처리 애플리케이션을 구축하는 데 필수적이지만, 파일 확장자를 확인하는 것보다 더 까다롭습니다(확장자는 쉽게 위조되거나 잘못될 수 있습니다).

이 가이드에서는 단순한 확장자 확인을 넘어서는 강력한 라이브러리인 GroupDocs.Signature를 사용하여 Java에서 파일 형식을 신뢰성 있게 감지하는 방법을 배웁니다. 문서 관리 시스템을 구축하든, 사용자 업로드를 검증하든, 클라우드 스토리지 서비스와 통합하든, 다양한 문서 유형을 자신 있게 처리할 수 있는 실용적인 기술을 발견하게 될 것입니다.

배우게 될 내용:

  • Java에서 지원되는 파일 형식을 프로그래밍 방식으로 가져오는 방법
  • 라이브러리 기반 감지와 내장 Java 접근 방식 중 언제 사용할지
  • 파일 유형 검증 시 흔히 발생하는 함정(및 회피 방법)
  • 실제 통합 시나리오와 성능 최적화 팁
  • 형식 감지 문제에 대한 트러블슈팅 전략

끝까지 읽으면 바로 Java 애플리케이션에 삽입할 수 있는 작동 구현을 얻게 됩니다. 필요한 모든 것이 준비되었는지 확인하고 시작해 보세요.

빠른 답변

  • 파일 확장자 java를 확인하는 가장 빠른 방법은 무엇인가요? Signature.getSupportedFileTypes()를 사용해 전체 목록을 가져오고 파일의 확장자를 비교합니다.
  • GroupDocs.Signature를 사용하려면 라이선스가 필요합니까? 무료 체험판은 개발에 사용할 수 있으며, 영구 라이선스를 구매하면 모든 평가 제한이 해제됩니다.
  • 전체 파일을 읽지 않고 업로드를 검증할 수 있나요? 예—GroupDocs.Signature는 파일 헤더만 검사하므로 전체 문서를 로드하는 것보다 훨씬 비용이 적게 듭니다.
  • GroupDocs.Signature가 지원하는 형식은 몇 개인가요? PDF, DOCX, XLSX, PPTX, JPG, PNG 등 50개 이상의 입력 및 출력 형식을 지원합니다.
  • 형식 목록을 캐시해야 할까요? 캐시하면 반복적인 리플렉션 오버헤드를 없애고 고용량 서비스의 처리량을 향상시킵니다.

전제 조건

파일 형식 감지를 시작하기 전에 다음 필수 항목을 준비하세요.

필요한 라이브러리 및 버전

  • GroupDocs.Signature Library: 버전 23.12 이상(최신 안정 버전을 사용할 예정)
  • Java Development Kit: JDK 1.8 이상(JDK 11+ 권장, 성능 향상)
  • Build Tool: Maven 3.x 또는 Gradle 6.x(의존성 관리)

환경 설정 요구 사항

다음에 익숙해야 합니다:

  • 기본 Java 프로그래밍 개념(클래스, 루프, 임포트)
  • Maven 또는 Gradle을 사용한 의존성 관리
  • IDE 또는 명령줄에서 Java 애플리케이션 실행

빠른 팁: 대용량 문서를 다루거나 파일을 동시에 처리할 계획이라면 JVM에 충분한 힙 메모리를 할당하세요(최적화 내용은 아래에서 다룹니다).

환경이 준비되었으면 프로젝트에 GroupDocs.Signature를 설정하는 단계로 넘어갑니다.

GroupDocs.Signature for Java 설정

프로젝트에 GroupDocs.Signature를 추가하는 것은 간단합니다—선호하는 빌드 도구를 선택하고 따라 하세요.

Using Maven

pom.xml 파일에 다음 의존성을 추가하세요:

<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-signature</artifactId>
    <version>23.12</version>
</dependency>

의존성을 추가한 후 mvn clean install을 실행해 라이브러리를 다운로드합니다.

Using Gradle

build.gradle 파일에 다음 라인을 포함하세요:

implementation 'com.groupdocs:groupdocs-signature:23.12'

그런 다음 Gradle 프로젝트를 동기화하거나 gradle build를 실행합니다.

Direct Download Alternative

빌드 도구를 사용하지 않나요? GroupDocs.Signature for Java releases에서 JAR 파일을 직접 다운로드하고 클래스패스에 수동으로 추가할 수 있습니다. (솔직히 말해 Maven이나 Gradle을 사용하는 것이 장기적으로 훨씬 편합니다.)

License Acquisition Steps

GroupDocs.Signature는 유연한 라이선스 옵션을 제공합니다:

  • Free Trial: 테스트에 최적—신용카드 없이 바로 시작할 수 있습니다.
  • Temporary License: 평가 기간을 더 늘리고 싶나요? 제한 없는 30일 임시 라이선스를 요청하세요.
  • Purchase: 프로덕션 준비가 되면 GroupDocs Purchase Page에서 영구 라이선스를 구매하세요.

Pro tip: 모든 기능을 탐색하려면 무료 체험부터 시작하세요. 임시 라이선스는 워터마크와 제한을 제거해 장기 평가에 유용합니다.

Basic Initialization and Setup

Signature는 GroupDocs.Signature의 모든 작업에 대한 핵심 진입점입니다. 문서 로딩, 형식 처리 및 서명 처리를 캡슐화합니다.

Java 애플리케이션에서 GroupDocs.Signature를 초기화하는 방법은 다음과 같습니다:

import com.groupdocs.signature.Signature;

// Create an instance of Signature class
Signature signature = new Signature("sample.pdf");

위 코드는 지정된 문서에 대한 서명 객체를 생성합니다. 실제 문서를 다룰 때 이 패턴을 사용하지만, 지원 형식을 조회할 때는 특정 파일이 필요하지 않습니다(다음 섹션에서 보여드림).

이제 설정이 완료되었으니 지원 파일 형식을 감지하고 조회하는 핵심 기능을 구현해 보겠습니다.

구현 가이드

실제 작업을 시작할 차례입니다. 여기서는 지원되는 모든 파일 형식을 조회하는 간단한 유틸리티를 만들 것입니다—문서 처리 파이프라인을 위한 “호환성 검사기”라고 생각하면 됩니다.

왜 이것이 중요한가

문서 처리 기능을 구현하기 전에 라이브러리가 어떤 파일 유형을 지원하는지 알아야 합니다. 이 구현은 정보를 동적으로 제공하므로:

  • 오래된 하드코딩된 확장자 목록을 없앨 수 있습니다
  • 사용자 업로드를 지원 형식과 쉽게 검증할 수 있습니다
  • UI에서 파일 유형 필터를 빠르게 구성할 수 있습니다

단계별 구현

1. 필요한 클래스 가져오기

FileType은 형식 감지의 관문이며, 지원되는 각 문서 유형에 대한 메타데이터를 포함합니다.

import com.groupdocs.signature.domain.documentpreview.FileType;
import java.util.List;

FileType 클래스는 확장자, MIME 타입, 설명 등 다양한 속성을 노출합니다.

2. 조회 클래스 만들기

전체 구현은 다음과 같습니다:

public class GetSupportedFileFormats {
    public static void run() {
        // Retrieve a list of supported file types from the FileType utility.
        List<FileType> supportedFileTypes = FileType.getSupportedFileTypes();

        // Iterate over each FileType object and print its extension to the console.
        for (FileType fileType : supportedFileTypes) {
            System.out.print("\n" + fileType.getExtension());
        }
    }
}

동작 설명:

  • getSupportedFileTypes(): 라이브러리 내부 레지스트리를 조회해 FileType 객체 리스트를 반환합니다.
  • 루프를 통해 각 형식의 확장자(.pdf, .docx, .xlsx 등)를 출력합니다.
  • FileType 객체는 추가 메타데이터도 제공하므로 아래에서 살펴보겠습니다.

기본 확장자 외에 얻을 수 있는 정보

FileType 객체는 확장자 외에도 다양한 정보를 제공합니다:

for (FileType fileType : supportedFileTypes) {
    System.out.println("Extension: " + fileType.getExtension());
    System.out.println("Format: " + fileType.getFileFormat());
    // Additional properties available depending on version
}

사용자 친화적인 형식 이름을 표시하거나 문서, 스프레드시트, 이미지 등 유형별로 그룹화할 때 유용합니다.

언제 이 접근 방식을 사용해야 할까

모든 상황에 라이브러리 기반 솔루션이 필요한 것은 아닙니다. 다음 경우에 GroupDocs.Signature의 형식 감지가 특히 유용합니다:

완벽한 사용 사례

1. 문서 업로드 검증기 구축
사용자가 파일을 업로드할 때 서버 측에서 형식을 검증하고 싶다면, 이 접근 방식으로 지원 형식 목록과 비교해 안전하게 처리할 수 있습니다.

2. 동적 파일 유형 필터 생성
파일 선택기나 업로드 인터페이스를 만들 때, 정적 배열 대신 라이브러리에서 제공하는 최신 형식 목록을 동적으로 생성하세요.

3. 다중 형식 문서 처리 파이프라인
이메일 첨부, 클라우드 스토리지, 사용자 업로드 등 다양한 출처에서 문서를 처리한다면, 신뢰할 수 있는 형식 감지를 통해 파일을 적절한 핸들러로 라우팅해야 합니다.

4. 클라우드 스토리지 서비스와 통합
AWS S3, Google Drive, Azure Blob Storage와 동기화할 때, 다운로드 및 처리를 시작하기 전에 문서 호환성을 검증하면 대역폭과 처리 시간을 절약할 수 있습니다.

내장 Java만으로 충분할 때

간단한 시나리오에서는 Java 내장 방법이 충분할 수 있습니다:

  • 확장자만 확인: file.getName().endsWith(".pdf")
  • MIME 타입 감지: Files.probeContentType(path)
  • 기본 검증: 업로드 소스를 직접 제어하고 파일 확장자를 신뢰할 수 있을 때

중요한 주의점: 내장 메서드는 속일 수 있습니다. .exe 파일을 .pdf로 이름만 바꾸면 확장자 검사는 통과하지만 실제 내용은 검증에 실패합니다. GroupDocs.Signature는 더 깊은 검사를 수행합니다.

일반적인 문제와 트러블슈팅

다음은 흔히 마주치는 문제와 빠른 해결 방법입니다.

Issue 1: Empty or Null List Returned

증상: getSupportedFileTypes()가 빈 리스트 또는 null을 반환합니다.

원인 및 해결책:

  • 라이브러리 초기화 오류: Maven/Gradle 의존성이 올바르게 추가되고 동기화됐는지 확인
  • 버전 호환성: 23.12 이상을 사용하고 있는지 확인(이전 버전은 API가 다를 수 있음)
  • 클래스패스 문제: 수동 JAR 파일을 사용한다면 클래스패스에 제대로 포함됐는지 확인

빠른 해결법:

List<FileType> formats = FileType.getSupportedFileTypes();
if (formats == null || formats.isEmpty()) {
    System.err.println("Error: No file types loaded. Check library initialization.");
    return;
}

Issue 2: Missing Expected Format

증상: 기대했던 형식이 지원 목록에 없습니다.

가능한 이유:

  • 별도 플러그인이 필요한 특수 형식(CAD, 의료 영상 등)
  • 최신 버전에서 추가된 형식—릴리즈 노트를 확인
  • 서명 작업을 위한 지원이 아니라 읽기 전용 지원일 수 있음

디버깅 방법:

// Check for specific format
boolean hasPDF = supportedFileTypes.stream()
    .anyMatch(ft -> ft.getExtension().equalsIgnoreCase(".pdf"));
System.out.println("PDF supported: " + hasPDF);

Issue 3: Performance Degradation with Large Format Lists

증상: getSupportedFileTypes()를 반복 호출하면 애플리케이션이 느려집니다.

해결책: 결과를 캐시하세요! 런타임 동안 목록은 변하지 않습니다:

public class FormatCache {
    private static List<FileType> cachedFormats = null;
    
    public static List<FileType> getSupportedFormats() {
        if (cachedFormats == null) {
            cachedFormats = FileType.getSupportedFileTypes();
        }
        return cachedFormats;
    }
}

이 패턴은 애플리케이션 수명 주기당 한 번만 라이브러리를 조회하도록 보장합니다.

증상: 평가 경고가 표시되거나 형식 지원이 제한됩니다.

해결책:

  • 모든 GroupDocs 메서드 호출 전에 라이선스를 적용
  • 라이선스 파일 경로가 정확한지 확인
  • 시간 제한 라이선스인 경우 만료일을 확인
try {
    License license = new License();
    license.setLicense("path/to/GroupDocs.Signature.lic");
} catch (Exception e) {
    System.err.println("License error: " + e.getMessage());
}

파일 형식 감지를 위한 모범 사례

견고하고 유지보수 가능한 감지를 구축하려면 다음 지침을 따르세요.

1. 조기에 검증하고 빠르게 실패

처리 파이프라인 초기에 파일 형식을 확인하세요:

public boolean validateFileFormat(String filePath) {
    String extension = getFileExtension(filePath);
    List<FileType> supported = FormatCache.getSupportedFormats();
    
    boolean isSupported = supported.stream()
        .anyMatch(ft -> ft.getExtension().equalsIgnoreCase(extension));
    
    if (!isSupported) {
        throw new UnsupportedFormatException(
            "File format " + extension + " is not supported"
        );
    }
    return true;
}

지원되지 않는 형식에 대한 불필요한 작업을 방지할 수 있습니다.

2. 명확한 사용자 피드백 제공

파일을 거부할 때는 지원되는 형식을 정확히 알려 주세요:

public String getSupportedFormatsMessage() {
    List<FileType> formats = FormatCache.getSupportedFormats();
    String extensions = formats.stream()
        .map(FileType::getExtension)
        .collect(Collectors.joining(", "));
    
    return "Supported formats: " + extensions;
}

3. 확장자만 신뢰하지 않기

.exe 파일을 .pdf로 이름만 바꾸면 확장자는 .pdf이지만 실제 내용은 PDF가 아닐 수 있습니다. GroupDocs.Signature는 실제 콘텐츠를 검증하지만, 추가적인 확장자 검증도 함께 적용하세요:

// First check extension (fast)
if (!hasValidExtension(file)) {
    return false;
}

// Then validate with library (more thorough)
try (Signature signature = new Signature(file)) {
    // If initialization succeeds, format is valid
    return true;
} catch (Exception e) {
    return false;
}

4. 예외를 우아하게 처리

파일 검증은 다양한 이유로 실패할 수 있습니다:

public ValidationResult validateDocument(String path) {
    try {
        // Your validation logic
        return ValidationResult.success();
    } catch (UnsupportedFormatException e) {
        return ValidationResult.failure("Unsupported format: " + e.getMessage());
    } catch (IOException e) {
        return ValidationResult.failure("File access error: " + e.getMessage());
    } catch (Exception e) {
        return ValidationResult.failure("Unexpected error: " + e.getMessage());
    }
}

5. 형식 지원 변경 모니터링

GroupDocs.Signature 라이브러리를 업데이트할 때는 다음을 확인하세요:

  • 새로 추가된 형식
  • 지원 중단된 형식
  • 형식 감지 동작 변경

예상 형식이 지원되는지 확인하는 단위 테스트를 추가하는 것이 좋습니다:

@Test
public void testEssentialFormatsSupported() {
    List<String> required = Arrays.asList(".pdf", ".docx", ".xlsx");
    List<FileType> supported = FileType.getSupportedFileTypes();
    
    for (String format : required) {
        assertTrue(
            supported.stream().anyMatch(ft -> ft.getExtension().equals(format)),
            format + " should be supported"
        );
    }
}

성능 고려 사항

파일 형식 감지는 사소해 보일 수 있지만, 수천 개 문서를 처리하거나 동시 업로드를 다룰 때는 중요한 요소가 됩니다.

메모리 관리

캐시 전략: 앞서 언급한 대로 지원 형식 리스트를 캐시하세요:

// Good: Load once, reuse many times
private static final List<FileType> SUPPORTED_FORMATS = 
    FileType.getSupportedFileTypes();

// Bad: Loads list every time method is called
public boolean isSupported(String ext) {
    return FileType.getSupportedFileTypes().stream()
        .anyMatch(ft -> ft.getExtension().equals(ext));
}

왜 중요한가: 리스트 로딩에는 리플렉션과 내부 초기화가 포함됩니다. 한 번만 수행하면 CPU 사이클과 메모리 할당을 크게 절감합니다.

리소스 사용 가이드라인

고용량 시나리오에서는:

  • 형식 리스트를 쓰레드‑안전하게 캐시(위 예시는 불변이므로 쓰레드‑안전)
  • 형식 감지가 필요하지 않은 경우 지연 초기화 고려
  • 문서 처리 후 Signature 객체를 즉시 닫아 리소스를 해제
try (Signature signature = new Signature(filePath)) {
    // Process document
} // Automatically closed, resources freed

배치 처리 최적화

여러 파일을 동시에 검증한다면 병렬 처리를 고려하세요:

List<String> files = Arrays.asList("doc1.pdf", "doc2.docx", "doc3.xlsx");

// Process in parallel
files.parallelStream()
    .forEach(file -> {
        if (validateFileFormat(file)) {
            processDocument(file);
        }
    });

주의: 과도한 병렬화는 오히려 성능을 저하시킬 수 있습니다. I/O가 병목이라면 스레드 수를 적절히 조절해 최적의 값을 찾아야 합니다.

JVM 튜닝 팁

문서‑무거운 애플리케이션을 위해:

  • 힙 크기 확대: -Xmx2g (필요에 따라 조정)
  • 가비지 컬렉션 모니터링: -XX:+PrintGCDetails 사용
  • 일시 중단 시간을 줄이려면 G1GC 사용: -XX:+UseG1GC

실용적인 적용 사례와 통합

파일 형식 감지가 필수적인 실제 시나리오를 살펴보겠습니다.

1. 문서 관리 시스템

시나리오: 사용자가 업로드한 문서를 인덱싱, 처리, 저장해야 함.

구현 패턴:

public class DocumentUploadHandler {
    public void handleUpload(MultipartFile file) {
        // Validate format first
        if (!isFormatSupported(file.getOriginalFilename())) {
            throw new InvalidFormatException(
                "Please upload: " + getSupportedFormatsString()
            );
        }
        
        // Process valid document
        processAndStore(file);
    }
    
    private boolean isFormatSupported(String filename) {
        String ext = getExtension(filename);
        return FormatCache.getSupportedFormats().stream()
            .anyMatch(ft -> ft.getExtension().equalsIgnoreCase(ext));
    }
}

2. 클라우드 스토리지 통합

시나리오: AWS S3 또는 Google Drive에서 문서를 동기화하고, 지원되는 형식만 처리.

효과: 지원되지 않는 파일을 다운로드하고 처리하려는 비용을 절감합니다.

public void syncFromS3(String bucketName) {
    S3Client s3 = S3Client.create();
    ListObjectsV2Request listReq = ListObjectsV2Request.builder()
        .bucket(bucketName)
        .build();
    
    ListObjectsV2Response listing = s3.listObjectsV2(listReq);
    
    for (S3Object object : listing.contents()) {
        if (isFormatSupported(object.key())) {
            // Download and process only supported formats
            downloadAndProcess(bucketName, object.key());
        } else {
            logger.info("Skipping unsupported format: " + object.key());
        }
    }
}

3. 엔터프라이즈 워크플로 자동화

시나리오: 문서를 유형별로 다른 파이프라인에 라우팅.

예시: PDF는 서명 워크플로, 스프레드시트는 데이터 추출, 이미지는 OCR 처리.

public void routeDocument(String filePath) {
    try (Signature signature = new Signature(filePath)) {
        FileType type = signature.getDocumentInfo().getFileType();
        
        switch (type.getExtension()) {
            case ".pdf":
            case ".docx":
                sendToSignatureWorkflow(filePath);
                break;
            case ".xlsx":
            case ".csv":
                sendToDataExtractionWorkflow(filePath);
                break;
            case ".jpg":
            case ".png":
                sendToOCRWorkflow(filePath);
                break;
            default:
                logger.warn("No workflow defined for: " + type.getExtension());
        }
    }
}

4. 파일 유형 선택기 구축

시나리오: 동적 형식 지원을 반영한 UI 컴포넌트 만들기.

프론트엔드 연동 예시:

@RestController
public class FormatController {
    @GetMapping("/api/supported-formats")
    public ResponseEntity<List<String>> getSupportedFormats() {
        List<String> extensions = FileType.getSupportedFileTypes().stream()
            .map(FileType::getExtension)
            .sorted()
            .collect(Collectors.toList());
        
        return ResponseEntity.ok(extensions);
    }
}

프론트엔드에서는 이 정보를 사용해 파일 업로드 컴포넌트를 구성할 수 있습니다:

// Frontend code (for context, not part of Java implementation)
fetch('/api/supported-formats')
    .then(res => res.json())
    .then(formats => {
        fileInput.accept = formats.join(',');
    });

How to check file extension java?

파일 이름을 로드하고 접미사를 추출한 뒤, Signature.getSupportedFileTypes()가 반환하는 캐시된 목록과 비교합니다. 이 두 단계 접근 방식은 하드코딩된 배열이 아닌 최신 카탈로그와 비교하므로 스푸핑된 확장자를 방지하고 파일 헤더 검증도 수행합니다.

What is GroupDocs.Signature?

GroupDocs.Signature는 50개 이상의 문서 형식에 대해 디지털 서명을 추가, 검증 및 관리할 수 있는 Java 라이브러리입니다. PDF, Office, 이미지 등 다양한 유형을 단일 API로 처리하며, 암호화 파일, 비밀번호 보호 문서, 다중 페이지 서명 등 복잡한 검증 시나리오도 지원합니다.

Why use library‑based detection instead of Java built‑in methods?

라이브러리 기반 감지는 실제 파일 헤더와 내부 구조를 검사해 내용이 주장된 형식과 일치하는지 확인합니다. Files.probeContentType이나 단순 문자열 접미사 검사는 파일 이름을 바꾸면 쉽게 속일 수 있습니다. GroupDocs.Signature는 본격적인 콘텐츠 분석을 수행해 이후 처리 단계에서 위험을 최소화합니다.

When should I cache supported file formats?

애플리케이션 시작 시 또는 처음 필요할 때 형식 목록을 캐시하고, JVM이 종료될 때까지 불변 컬렉션을 재사용하세요. 특히 고처리량 웹 서비스에서는 각 요청마다 리플렉션이 무거운 라이브러리 초기화를 피해 수 밀리초 수준의 지연을 크게 줄일 수 있습니다.

How to handle unsupported file formats in Java?

지원되지 않는 형식을 조기에 감지하고, 감사 로그에 시도 내용을 기록한 뒤, 허용된 확장자를 나열한 명확한 오류 메시지를 사용자에게 반환하세요. 이렇게 하면 사용자 경험이 향상되고 백엔드에 불필요한 처리 부하가 감소합니다.

Frequently Asked Questions

Q: Maven에서 GroupDocs.Signature 라이브러리 버전을 어떻게 업데이트하나요?
A: pom.xml<version> 태그를 원하는 버전으로 변경한 뒤 mvn clean install을 실행합니다. 항상 release notes를 확인해 호환성 변경 사항을 검토하세요.

Q: 파일 확장자가 잘못돼 있어도 GroupDocs.Signature가 형식을 감지할 수 있나요?
A: 네. 라이브러리는 콘텐츠 기반 검증을 수행하므로 .exe 파일을 .pdf로 이름만 바꿔도 유효한 PDF가 아니면 거부됩니다. getSupportedFileTypes()는 라이브러리가 처리할 수 있는 형식 목록만 제공하므로 실제 파일을 열어 진짜 유형을 확인해야 합니다.

Q: 무료 체험과 임시 라이선스의 차이는 무엇인가요?
A: 무료 체험은 즉시 시작할 수 있지만 평가용 워터마크와 일부 기능 제한이 있습니다. 임시 라이선스는 30일 동안 워터마크와 제한 없이 전체 기능을 사용할 수 있어 프로덕션에 가까운 환경에서 충분히 테스트할 수 있습니다.

Q: 애플리케이션에서 지원되지 않는 파일 형식을 어떻게 처리해야 하나요?
A: “지원되지 않는 형식입니다. 지원되는 확장자는: .pdf, .docx, .xlsx, .png, .jpg 입니다.”와 같이 간결한 오류를 반환하고, 시도를 로그에 남겨 보안 모니터링에 활용하세요. UI 툴팁에 허용 형식을 표시하면 사용자 친화적입니다.

Q: GroupDocs.Signature가 암호화되거나 비밀번호가 설정된 파일을 지원하나요?
A: 예, 지원합니다. 다만 Signature 인스턴스를 생성할 때 비밀번호를 제공해야 합니다. 형식 감지는 비밀번호 없이도 가능하지만, 이후 서명 추가 등 작업을 위해서는 비밀번호가 필요합니다.

Q: GroupDocs.Signature를 위한 커뮤니티나 지원 포럼이 있나요?
A: 물론 있습니다! GroupDocs Forum에서 커뮤니티 토론, 코드 예제 및 GroupDocs 팀의 직접 답변을 확인할 수 있습니다.

Resources

Documentation:

Downloads and Licensing:

Support and Community:


Last Updated: 2026-05-11
Tested With: GroupDocs.Signature 23.12 for Java
Author: GroupDocs

<version>24.1</version>  <!-- Update to newer version -->
try {
    validateAndProcess(file);
} catch (UnsupportedFormatException e) {
    return ResponseEntity
        .badRequest()
        .body("Unsupported format. Please upload: " + getSupportedFormatsString());
}
LoadOptions loadOptions = new LoadOptions();
loadOptions.setPassword("your-password");
Signature signature = new Signature("protected.pdf", loadOptions);