Node.js 사용하여 PDF 파일을 압축하는 방법
대용량 PDF 파일은 파일 전송 속도를 저하시켜 저장 비용을 증가시키고 문서 중심 애플리케이션의 성능을 저하시킵니다. IronPDF for Node.js는 문서의 포함된 이미지 품질을 줄이고 이미지의 문서 내 보이는 크기로 재조정하여 파일 크기를 50% 이상 줄이는 compressSize 메서드를 제공합니다. 그러나 문서 구조는 변경하지 않습니다.
패키지를 설치하고, PDF를 로드한 다음 품질 값을 1에서 100 사이로 설정하여 compressSize를 호출하세요:
//:path=/static-assets/pdf/content-code-examples/how-to/nodejs-compress-pdf/quickstart.js
import { PdfDocument } from "@ironsoftware/ironpdf";
// 기존 PDF 로드
const pdf = await PdfDocument.fromFile("report.pdf");
// 내장된 이미지를 60% JPEG 품질로 압축
await pdf.compressSize(60);
// 결과를 저장
await pdf.saveAs("report-compressed.pdf");
최소 워크플로우(5단계)
- IronPDF 설치:
npm install @ironsoftware/ironpdf PdfDocument을(를)@ironsoftware/ironpdf(으)로 부터 가져오기PdfDocument.fromFile(path)으로 소스 파일 가져오기await pdf.compressSize(quality)호출 - 품질 범위 1-100await pdf.saveAs(outputPath)으로 결과 저장
Node.js 애플리케이션에서 PDF 파일 크기가 중요한 이유
PDF 크기는 두 가지 운영 문제에 직접 영향을 미칩니다: 전달 속도와 저장 비용. API 엔드포인트를 통해 전송되는 20 MB 보고서 PDF는 모바일 연결에서 측정 가능한 지연을 추가합니다. 매일 수천 개의 문서를 처리하는 일괄 처리 파이프라인에서는 심지어 30%의 크기 감소도 상당한 저장 공간 절약으로 이어집니다.
IronPDF의 compressSize 메서드는 큰 PDF 파일의 주요 원인인 포함된 이미지를 대상으로 합니다. 텍스트와 벡터 그래픽은 렌더링 중에 PDF 객체 수준에서 잘 압축되지만, 원본 해상도로 임베드된 래스터 이미지는 일반적인 비즈니스 문서에서 대부분의 초과 용량을 차지합니다. JPEG 품질을 기본값(대개 95-100%)에서 60-85%로 줄이면, 눈에 띄는 품질 손실은 최소화하면서 파일 크기를 가장 크게 줄일 수 있습니다.
compressSize 메서드는 어떻게 작동합니까?
compressSize 메서드는 두 가지 파라미터 quality (필수, 1-100 정수)와 scaleImages (선택, 불리언)을 수용합니다. scaleImages가 false인 경우 (기본값) 메서드는 각 포함된 JPEG를 목표 품질에서 다시 인코딩합니다. scaleImages가 true인 경우, 페이지에 소규모로 렌더링된 이미지의 해상도를 낮추어 PDF 레이아웃에서 보이는 크기에 맞게 이미지를 다운샘플링합니다.
//:path=/static-assets/pdf/content-code-examples/how-to/nodejs-compress-pdf/compress-with-scaling.js
import { PdfDocument } from "@ironsoftware/ironpdf";
// 원본 문서 로드
const pdf = await PdfDocument.fromFile("product-catalog.pdf");
// 이미지를 90% 품질로 압축하고 보이는 크기로 축소하십시오
await pdf.compressSize(90, true);
// 최적화된 문서 저장
await pdf.saveAs("product-catalog-optimized.pdf");
특히 고 DPI 스캔에서 생성된 PDF 또는 표시 크기와 무관하게 고해상도로 이미지를 포함시킨 HTML 템플릿의 경우 매우 효과적입니다. 활성화하면 품질만 조정하는 것보다 더욱 파일 크기를 줄일 수 있으며, 일반적인 출력이나 화면 해상도에서 눈에 띄는 저하 없이 가능합니다.
이 메서드는 PdfDocument 객체를 제자리에서 수정합니다. 원본을 유지해야 하는 경우, compressSize를 호출하기 전에 문서를 복제하거나 다른 저장 경로를 사용하세요.
어떤 품질 설정을 사용해야 하나요?
PDF의 압축 후 사용 방식에 따라 적절한 품질 값이 달라집니다:
90-100: 거의 손실이 없음. 문서를 전체 배율로 인쇄하거나 볼 때 사용합니다.
- 80-89: 높은 품질, 눈에 띄게 작은 파일. 대부분의 비즈니스 문서의 기본 시작점. 60-79: 중간 품질. 화면 표시, 웹 전달 및 이메일 첨부에 적합합니다.
- 60 미만: 낮은 품질. 미리보기 썸네일, 보관용 사본 혹은 파일 크기가 중요한 상황에 적합합니다.
Node.js에서 압축 결과를 측정하는 방법은?
압축이 예상한 감소를 달성했는지 확인하는 것은 Node.js fs 모듈을 사용하여 간단합니다. compressSize을 호출하기 전후에 파일 크기를 읽은 후, 비율을 계산하여 결과가 애플리케이션의 요구 사항을 충족하는지 확인하세요.
//:path=/static-assets/pdf/content-code-examples/how-to/nodejs-compress-pdf/measure-compression.js
import { PdfDocument } from "@ironsoftware/ironpdf";
import { statSync } from "fs";
const inputPath = "annual-report.pdf";
const outputPath = "annual-report-compressed.pdf";
const beforeBytes = statSync(inputPath).size;
const pdf = await PdfDocument.fromFile(inputPath);
await pdf.compressSize(75);
await pdf.saveAs(outputPath);
const afterBytes = statSync(outputPath).size;
const reduction = (((beforeBytes - afterBytes) / beforeBytes) * 100).toFixed(1);
console.log(`Before: ${(beforeBytes / 1024).toFixed(1)} KB`);
console.log(`After: ${(afterBytes / 1024).toFixed(1)} KB`);
console.log(`Reduced by ${reduction}%`);
Node.js fs.statSync API는 바이트로 size 속성을 포함하는 Stats 객체를 반환합니다. 프로덕션 파이프라인에서는 이 비율을 문서별로 기록하여 압축이 예상대로 크기를 줄이지 못한 예외적인 경우를 식별할 수 있습니다. 이는 일반적으로 이미 원본에서 압축된 스캔 문서가 해당됩니다.
IRONPDF_ENGINE_PATH 환경 변수를 설정하거나 IronPdfGlobalConfig을 구성하세요. IronPDF Node.js 문서에서 엔진 설정 세부 정보를 참조하십시오.여러 PDF 파일을 일괄적으로 압축하려면 어떻게 해야 하나요?
프로덕션 애플리케이션은 드물게 단일 문서를 개별적으로 압축합니다. 아래 예제는 Promise.all를 사용하여 파일 경로 배열을 동시에 처리하며, 이는 Node.js 이벤트 루프가 여러 compressSize 작업을 차단 없이 처리할 수 있게 합니다.
//:path=/static-assets/pdf/content-code-examples/how-to/nodejs-compress-pdf/batch-compress.js
import { PdfDocument } from "@ironsoftware/ironpdf";
import path from "path";
async function compressPdfFiles(inputPaths, quality = 80) {
const results = await Promise.all(
inputPaths.map(async (inputPath) => {
const pdf = await PdfDocument.fromFile(inputPath);
await pdf.compressSize(quality);
const outputPath = inputPath.replace(".pdf", "-compressed.pdf");
await pdf.saveAs(outputPath);
return { input: inputPath, output: outputPath };
})
);
return results;
}
// 사용
const files = ["report-q1.pdf", "report-q2.pdf", "report-q3.pdf"];
const compressed = await compressPdfFiles(files, 75);
compressed.forEach(r => console.log(`Saved: ${r.output}`));
PdfDocument.fromFile 및 compressSize 각각의 호출은 독립적이며, 병렬화하기에 안전합니다. 매우 큰 배치(수백 개의 파일)를 처리할 경우 Node.js 메모리 제한을 초과하지 않도록 배열을 분할하는 것을 고려하세요. Node.js의 이벤트 루프에 대한 문서는 어떻게 Promise.all이 동시에 I/O를 스케줄링하여 메인 스레드를 차단하지 않는지 설명합니다.
압축을 다른 PDF 작업과 결합하려면 어떻게 하나요?
압축은 더 큰 문서 처리 체인에 자연스럽게 들어맞습니다. 일반적인 패턴은 HTML에서 PDF를 생성하고, 워터마크 또는 서명을 추가한 다음, 전달 전에 압축하는 것입니다:
//:path=/static-assets/pdf/content-code-examples/how-to/nodejs-compress-pdf/compress-after-render.js
import { PdfDocument, ChromePdfRenderer } from "@ironsoftware/ironpdf";
// HTML을 PDF로 렌더링
const renderer = new ChromePdfRenderer();
const pdf = await renderer.renderHtmlAsPdf("<h1>인보이스 #1042</h1><p>지불할 금액: $540.00</p>");
// 저장하기 전에 압축 -- Chrome에서 렌더링된 콘텐츠의 이미지 무게를 줄입니다
await pdf.compressSize(85);
// 최종 문서를 저장
await pdf.saveAs("invoice-1042.pdf");
ChromePdfRenderer은 종종 배경 이미지 및 CSS 참조 자산을 전체 해상도로 포함합니다. 랜더링 후 compressSize을 호출하면 HTML 소스 PDF의 파일 크기를 일관되게 줄입니다. IronPDF HTML to PDF 튜토리얼에서는 렌더러 설정에 대해 자세히 다룹니다.
전자 서명이 필요한 문서의 경우, 전자 서명을 압축 후에 적용하세요. 서명은 문서의 바이트 스트림을 잠그며, 이후 수정은 서명을 무효화합니다.
다중 페이지 문서를 다룰 때, 압축하기 전에 PdfDocument.merge()로 병합하세요. 병합된 결과를 압축하는 것이 개별 파일을 압축하고 다시 병합하는 것보다 더 효율적입니다.
Node.js에서 PDF 압축의 다음 단계는 무엇입니까?
compressSize 메서드는 포함된 이미지 무게를 줄이는 가장 일반적인 압축 사용 사례를 다룹니다. 특수한 시나리오에 대해서는 IronPDF PDF 압축 예제가 추가적인 코드 샘플을 제공하며, API 레퍼런스는 사용 가능한 모든 메서드 서명을 문서화하고 있습니다.
IronPDF는 이미지를 PDF로 변환, PDF 텍스트 읽기, PDF에서 페이지 제거를 지원하며, 모든 작업은 같은 PdfDocument API와 통합됩니다. Node.js PDF 기능에 대한 전체 개요는 IronPDF Node.js 문서를 참조하세요.
프로젝트에서 압축을 테스트할 준비가 되었습니까? 무료 체험판 시작하기를 통해 위의 예제를 워터마크 없이 실행하거나, 라이선스 옵션 보기를 통해 프로덕션 배포에 대해 알아보세요.
PdfDocument
자주 묻는 질문
IronPDF로 Node.js에서 PDF를 어떻게 압축합니까?
PdfDocument.fromFile(path)를 사용하여 PDF를 로드하고 await pdf.compressSize(quality)를 품질 값 1에서 100 사이로 호출한 다음 await pdf.saveAs(outputPath)로 결과를 저장합니다. 먼저 npm install @ironsoftware/ironpdf로 패키지를 설치하십시오.
compressSize의 quality 매개변수는 무엇을 제어합니까?
quality 매개변수(정수 1-100)는 포함된 래스터 이미지의 JPEG 재인코딩 수준을 제어합니다. 80-89의 값은 눈에 띄는 크기 감소와 함께 높은 품질의 출력을 생성하며 대부분의 비즈니스 문서에 추천되는 시작점입니다. 60 이하의 값은 파일 크기가 주요 제약인 기록 보관 또는 미리보기 용도에 적합합니다.
compressSize의 scaleImages 매개변수는 무엇입니까?
옵션 두 번째 매개변수 scaleImages(부울, 기본값은 false)는 PDF 레이아웃에서 보이는 치수에 맞게 포함된 이미지를 다운샘플링합니다. 이를 true로 설정하는 것은 고해상도 스캔이나 디스플레이 크기에 관계없이 전체 해상도로 이미지를 포함하는 HTML 템플릿에서 생성된 PDF에 효과적입니다.
compressSize를 사용하여 PDF 파일 크기를 얼마나 줄일 수 있습니까?
원본 PDF 내용에 따라 감소가 달라집니다. 많은 고해상도 래스터 이미지를 포함하는 문서는 50% 이상의 감소를 볼 수 있습니다. 대부분 텍스트 및 벡터 그래픽 위주의 PDF는 compressSize가 JPEG 이미지 재인코딩을 목표로 하기 때문에 최소한의 감소를 볼 것입니다.
Node.js에서 압축 결과를 어떻게 측정합니까?
fs.statSync(path).size를 사용하여 압축 전후의 바이트 단위 파일 크기를 읽습니다. ((before - after) / before) * 100로 비율을 계산하여 퍼센트 감소를 얻습니다.

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.