PDF에서 원하지 않는 메모, 하이라이트 또는 잉크 표시를 제거하는 것은 배포용 깨끗한 문서를 준비할 때 자주 요구되는 작업입니다. GroupDocs.Annotation Cloud SDK for Node.js는 PDF 주석을 프로그래밍 방식으로 관리할 수 있는 강력한 REST‑기반 라이브러리를 제공합니다. 이 가이드에서는 REST를 사용하여 Node.JS에서 PDF의 Annotation 객체를 제거하는 방법을 단계별로 보여줍니다. 전체 코드 예제, 동등한 cURL 명령, 구성 팁 및 서비스에 주석 제거를 통합하기 위한 모범 사례 권장 사항을 확인할 수 있습니다.

REST를 사용하여 Node.JS에서 PDF의 주석 객체를 제거하는 전체 작업 예제

이 예제는 PDF를 업로드하고, 모든 주석을 삭제한 다음, GroupDocs.Annotation SDK를 사용하여 정리된 파일을 다운로드하는 방법을 보여줍니다.

const fs = require('fs');
const path = require('path');
const GroupDocsAnnotationCloud = require("@groupdocs/annotation-cloud");

// ==== Authentication =========================================================
const clientId = "YOUR_CLIENT_ID";
const clientSecret = "YOUR_CLIENT_SECRET";

const config = new GroupDocsAnnotationCloud.Configuration(clientId, clientSecret);
const annotationsApi = new GroupDocsAnnotationCloud.AnnotationsApi(config);
const storageApi = new GroupDocsAnnotationCloud.StorageApi(config);

// ==== Local & Remote file definitions =======================================
const localInputPath = path.resolve(__dirname, "input.pdf");
const localOutputPath = path.resolve(__dirname, "output.pdf");
const remoteFilePath = "input.pdf";

// ==== Main workflow ==========================================================
(async () => {
    // 1. Upload PDF to GroupDocs Cloud storage
    const fileBytes = fs.readFileSync(localInputPath);
    const uploadRequest = new GroupDocsAnnotationCloud.UploadFileRequest({
        path: remoteFilePath,
        file: fileBytes
    });
    await storageApi.uploadFile(uploadRequest);

// 2. Build FileInfo object for the uploaded PDF
    const fileInfo = new GroupDocsAnnotationCloud.FileInfo({
        filePath: remoteFilePath
    });

// 3. Retrieve all existing annotations
    const getAnnotationsRequest = new GroupDocsAnnotationCloud.GetAnnotationsRequest({
        fileInfo: fileInfo
    });
    const annotationsResult = await annotationsApi.getAnnotations(getAnnotationsRequest);
    const annotationIds = (annotationsResult.annotations || []).map(a => a.id);

// 4. Delete all annotations (if any)
    if (annotationIds.length > 0) {
        const deleteRequest = new GroupDocsAnnotationCloud.DeleteAnnotationsRequest({
            fileInfo: fileInfo,
            annotationIds: annotationIds
        });
        await annotationsApi.deleteAnnotations(deleteRequest);
    }

// 5. Download the cleaned PDF back to local storage
    const downloadRequest = new GroupDocsAnnotationCloud.DownloadFileRequest({
        path: remoteFilePath
    });
    const fileStream = await storageApi.downloadFile(downloadRequest);
    fs.writeFileSync(localOutputPath, fileStream);
    console.log(`All annotations removed. Clean file saved to ${localOutputPath}`);
})();

Note: 이 코드 예제는 핵심 기능을 보여줍니다. 프로젝트에서 사용하기 전에 파일 경로와 구성 값을 실제 환경에 맞게 업데이트하고, 모든 필수 종속성이 올바르게 설치되었는지 확인하며, 개발 환경에서 충분히 테스트하십시오. 문제가 발생하면 공식 문서를 참조하거나 지원 팀에게 문의하십시오.

cURL을 사용한 REST API를 통한 PDF 주석 삭제

아래는 GroupDocs.Annotation Cloud REST 엔드포인트를 통해 동일한 주석 제거 워크플로를 수행하는 cURL 명령입니다.

1. 액세스 토큰 얻기

# 1. Obtain an access token
curl -X POST "https://api.groupdocs.cloud/v2.0/auth/token" \
     -H "Content-Type: application/json" \
     -d "{\"client_id\":\"YOUR_CLIENT_ID\",\"client_secret\":\"YOUR_CLIENT_SECRET\"}"
# 2. Upload the source PDF
curl -X PUT "https://api.groupdocs.cloud/v2.0/storage/file/input.pdf" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -H "Content-Type: application/pdf" \
     --data-binary "@input.pdf"
# 3. Retrieve annotation IDs
curl -X GET "https://api.groupdocs.cloud/v2.0/annotation/annotations?filePath=input.pdf" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
# 4. Delete all retrieved annotations
curl -X DELETE "https://api.groupdocs.cloud/v2.0/annotation/annotations?filePath=input.pdf" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -H "Content-Type: application/json" \
     -d "{\"annotationIds\":[\"id1\",\"id2\"]}"
# 5. Download the cleaned PDF
curl -X GET "https://api.groupdocs.cloud/v2.0/storage/file/input.pdf" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -o output.pdf

엔드포인트 및 매개변수의 전체 목록은 공식 API 문서를 참조하십시오.

Node.JS에서 REST를 사용하여 PDF의 주석 객체를 제거하는 방법

  1. 인증 설정 - Configuration 클래스가 clientId와 clientSecret으로 인스턴스화되어 이후 모든 API 호출에 대한 인증된 컨텍스트를 생성합니다.

    const config = new GroupDocsAnnotationCloud.Configuration(clientId, clientSecret);
    
  2. 파일 업로드 - UploadFileRequest는 로컬 PDF 바이트를 GroupDocs Cloud 스토리지로 전송합니다. storageApi.uploadFile 메서드가 전송을 처리합니다.

    const uploadRequest = new GroupDocsAnnotationCloud.UploadFileRequest({
        path: remoteFilePath,
        file: fileBytes
    });
    await storageApi.uploadFile(uploadRequest);
    
  3. 주석 검색 - GetAnnotationsRequest는 FileInfo 참조를 포함한 요청 객체를 생성합니다. annotationsApi.getAnnotations 호출은 주석 객체 컬렉션을 반환하며, 여기서 ID를 추출합니다.

    const getAnnotationsRequest = new GroupDocsAnnotationCloud.GetAnnotationsRequest({
        fileInfo: fileInfo
    });
    const annotationsResult = await annotationsApi.getAnnotations(getAnnotationsRequest);
    
  4. 주석 삭제 - ID가 존재하면 DeleteAnnotationsRequest를 채워 annotationsApi.deleteAnnotations에 전달합니다. 이 메서드는 저장된 PDF에서 주석을 영구적으로 제거합니다.

    const deleteRequest = new GroupDocsAnnotationCloud.DeleteAnnotationsRequest({
        fileInfo: fileInfo,
        annotationIds: annotationIds
    });
    await annotationsApi.deleteAnnotations(deleteRequest);
    
  5. 정리된 PDF 다운로드 - 마지막으로 DownloadFileRequest가 업데이트된 파일을 가져오고, fs.writeFileSync가 로컬 파일 시스템에 저장합니다.

    const downloadRequest = new GroupDocsAnnotationCloud.DownloadFileRequest({
        path: remoteFilePath
    });
    const fileStream = await storageApi.downloadFile(downloadRequest);
    fs.writeFileSync(localOutputPath, fileStream);
    

자세한 클래스 및 메서드 정의는 API reference를 참조하십시오.

Node.js용 GroupDocs.Annotation Cloud SDK 설치 및 구성

SDK는 npm 패키지로 배포됩니다. 아래 명령을 사용하여 설치한 다음 프로젝트에서 require하십시오.

npm install groupdocs-annotation-cloud

최신 패키지는 GitHub 릴리스 페이지 또는 공식 다운로드 URL에서 직접 다운로드할 수 있습니다.

설치 후, 라이브러리를 가져오고 아래 코드 예제와 같이 구성 객체를 생성합니다:

const GroupDocsAnnotationCloud = require("@groupdocs/annotation-cloud");
const config = new GroupDocsAnnotationCloud.Configuration("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET");

런타임 환경이 Node.js 버전 요구 사항을 충족하고, 클라이언트 자격 증명을 얻기 위해 유효한 GroupDocs 계정을 보유하고 있는지 확인하십시오.

주석 제거 옵션 및 설정

SDK는 조정할 수 있는 여러 매개변수를 제공합니다:

  • clientId / clientSecret - OAuth 인증을 위한 자격 증명입니다. Configuration 생성자에 설정하십시오.
  • fileInfo.filePath - GroupDocs Cloud 저장소에 있는 PDF의 경로입니다. 파일을 다른 폴더에 저장하는 경우 이 값을 조정하십시오.
  • annotationIds - GetAnnotations에서 반환된 ID 배열입니다. 일부만 제공하면 선택적으로 삭제할 수 있습니다.

추가 설정(예: 요청 시간 초과 및 프록시 구성)은 SDK 문서에서 확인할 수 있습니다; 전체 목록은 공식 문서를 참조하십시오.

REST를 통한 PDF 주석 제거 모범 사례

  • 주석 ID 검증 - 삭제하려는 ID가 존재하는지 항상 확인하십시오; 존재하지 않는 ID를 삭제하려고 하면 404 오류가 발생할 수 있습니다.
  • HTTPS 사용 - 모든 API 호출은 자격 증명 및 문서 데이터를 보호하기 위해 HTTPS를 통해 이루어져야 합니다.
  • 청크 업로드를 사용한 대용량 파일 처리 - 100 MB보다 큰 PDF의 경우, 시간 초과를 방지하기 위해 멀티파트 업로드 엔드포인트를 사용하는 것이 좋습니다.
  • API 응답 로그 기록 - 감사 추적 및 보다 쉬운 문제 해결을 위해 요청 ID와 응답을 저장하십시오.
  • 액세스 토큰 재사용 - 인증 오버헤드를 줄이기 위해 OAuth 토큰이 만료될 때까지 캐시하십시오.

자주 묻는 질문

  • GroupDocs.Annotation Cloud API에 어떻게 인증합니까?
    클라이언트 ID와 비밀 키를 GroupDocs 계정에서 얻은 다음, OAuth 엔드포인트를 통해 액세스 토큰을 요청하십시오. 자세한 내용은 공식 문서를 참조하세요.

  • 전체가 아니라 특정 주석만 삭제할 수 있나요?
    예, DeleteAnnotationsRequest에 삭제하려는 주석의 ID를 제공하십시오. SDK는 GetAnnotations 호출 후 주석 ID 목록을 반환합니다.

  • REST와 Node.JS를 사용하여 PDF에서 Annotation 객체를 제거하려면 어떻게 해야 하나요?
    GroupDocs.Annotation Cloud SDK for Node.js를 사용하여 Annotation ID를 가져온 후 DeleteAnnotations 엔드포인트를 호출합니다. 전체 워크플로는 이 가이드의 코드 예제와 cURL 섹션에 설명되어 있습니다.

  • 프로덕션 사용에 필요한 라이선스는 무엇인가요?
    프로덕션에서는 유료 라이선스가 필요합니다. 평가 중에는 임시 라이선스 페이지를 통해 임시 라이선스를 획득할 수 있습니다.

추가 읽기