Node.js 사용하여 PDF 파일을 압축하는 방법
대용량 PDF 파일은 파일 전송 속도를 저하시켜 저장 비용을 증가시키고 문서 중심 애플리케이션의 성능을 저하시킵니다. IronPDF for Node.js는 compressSize 메서드를 제공하며, 이 메서드는 삽입된 이미지의 품질을 낮추고 선택적으로 이미지를 문서 내 표시 크기로 재조정하여, 문서 구조를 변경하지 않고도 파일 크기를 50% 이상 줄여줍니다.
빠른 시작: Node.js에서 PDF 압축하기
패키지를 설치하고, PDF를 불러온 다음, 품질 값을 1에서 100 사이로 지정하여 compressSize을 호출하십시오:
```JavaScript {.line-numbers} //: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");
<div class="hsg-featured-snippet">
<h3>최소 워크플로우(5단계)</h3>
1. IronPDF 설치: `npm install @ironsoftware/ironpdf`
2. `PdfDocument`를 `@ironsoftware/ironpdf`에서 가져오기
3. `PdfDocument.fromFile(path)`로 소스 파일을 불러오세요
4. `await pdf.compressSize(quality)` 호출 -- 품질 범위 1-100
5. 결과를 `await pdf.saveAs(outputPath)`로 저장하세요.
</div>
## Node.js 애플리케이션에서 PDF 파일 크기가 중요한 이유
PDF 크기는 두 가지 운영 문제에 직접 영향을 미칩니다: 전달 속도와 저장 비용. API 엔드포인트를 통해 전송되는 20 MB 보고서 PDF는 모바일 연결에서 측정 가능한 지연을 추가합니다. 매일 수천 개의 문서를 처리하는 일괄 처리 파이프라인에서는 심지어 30%의 크기 감소도 상당한 저장 공간 절약으로 이어집니다.
IronPDF의 `compressSize` 메서드는 대용량 PDF 파일의 주된 원인인 삽입된 이미지를 대상으로 합니다. 텍스트와 벡터 그래픽은 렌더링 중에 PDF 객체 수준에서 잘 압축되지만, 원본 해상도로 임베드된 래스터 이미지는 일반적인 비즈니스 문서에서 대부분의 초과 용량을 차지합니다. JPEG 품질을 기본값(대개 95-100%)에서 60-85%로 줄이면, 눈에 띄는 품질 손실은 최소화하면서 파일 크기를 가장 크게 줄일 수 있습니다.
팁화질 값이 80 이상인 경우 일반적인 화면 해상도에서는 원본과 거의 구별되지 않습니다. 파일 크기가 주요 제약 조건인 보관 또는 미리보기 사용 사례에는 60 미만의 값을 예약합니다.
## `compressSize` 메서드는 어떻게 작동하나요?
`compressSize` 메서드는 두 개의 매개변수를 받습니다: `quality`(필수, 1~100 사이의 정수)와 `scaleImages`(선택 사항, 부울). `scaleImages`가 `false`(기본값)인 경우, 이 메서드는 각 내장된 JPEG 파일을 대상 품질로 재인코딩합니다. `scaleImages`가 `true`일 때, PDF 레이아웃에서 보이는 크기에 맞춰 이미지의 해상도를 낮추며, 페이지에서 작은 크기로 렌더링되는 이미지의 해상도를 줄입니다.
```JavaScript {.line-numbers}
//: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");scaleImages 인수는 고해상도(DPI) 스캔으로 생성된 PDF나, 표시 크기와 관계없이 이미지를 전체 해상도로 삽입하는 HTML 템플릿에서 생성된 PDF에 특히 효과적입니다. 이 기능을 활성화하면 품질 조정만 하는 것보다 파일 크기를 더 줄일 수 있으며, 일반적인 PRINT 또는 화면 해상도에서는 화질 저하가 눈에 띄지 않습니다.
이 메서드는 PdfDocument 객체를 제자리에서 수정합니다. 원본을 보존해야 하는 경우, compressSize를 호출하기 전에 문서를 복제하거나 별도의 저장 경로를 사용하십시오.
어떤 품질 설정을 사용해야 하나요?
PDF의 압축 후 사용 방식에 따라 적절한 품질 값이 달라집니다:
90-100: 거의 손실이 없음. 문서를 전체 배율로 인쇄하거나 볼 때 사용합니다.
- 80-89: 높은 품질, 눈에 띄게 작은 파일. 대부분의 비즈니스 문서의 기본 시작점. 60-79: 중간 품질. 화면 표시, 웹 전달 및 이메일 첨부에 적합합니다.
- 60 미만: 낮은 품질. 미리보기 썸네일, 보관용 사본 혹은 파일 크기가 중요한 상황에 적합합니다.
Node.js에서 압축 결과를 측정하는 방법은?
Node.js fs 모듈을 사용하면 압축으로 인해 예상한 만큼의 용량 감소가 이루어졌는지 확인하는 것이 간단합니다. compressSize를 호출하기 전과 후의 파일 크기를 확인한 다음, 비율을 계산하여 결과가 애플리케이션의 요구 사항을 충족하는지 확인하십시오.
```JavaScript {.line-numbers} //: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는](https://nodejs.org/api/fs.html#fsstatsynspath-options) `Stats` 속성을 바이트 단위로 포함하는 `size` 객체를 반환합니다. 프로덕션 파이프라인에서는 이 비율을 문서별로 기록하여 압축이 예상대로 크기를 줄이지 못한 예외적인 경우를 식별할 수 있습니다. 이는 일반적으로 이미 원본에서 압축된 스캔 문서가 해당됩니다.
중요한서버 환경에서 파일을 처리하기 전에 `IRONPDF_ENGINE_PATH` 환경 변수를 설정하거나 `IronPdfGlobalConfig`를 구성하십시오. [IronPDF Node.js 문서](https://ironpdf.com/nodejs/docs/)에서 엔진 설정 세부 정보를 참조하십시오.
## 여러 PDF 파일을 일괄적으로 압축하려면 어떻게 해야 하나요?
프로덕션 애플리케이션은 드물게 단일 문서를 개별적으로 압축합니다. 아래 예제는 `Promise.all`을 사용하여 파일 경로 배열을 동시에 처리합니다. 이를 통해 Node.js 이벤트 루프는 차단 없이 여러 `compressSize` 작업을 처리할 수 있습니다:
```JavaScript {.line-numbers}
//: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를 생성하고, 워터마크 또는 서명을 추가한 다음, 전달 전에 압축하는 것입니다:
```JavaScript {.line-numbers} //: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("
Amount due: $540.00
");// 저장하기 전에 압축 -- Chrome에서 렌더링된 콘텐츠의 이미지 무게를 줄입니다 await pdf.compressSize(85);
// 최종 문서를 저장 await pdf.saveAs("invoice-1042.pdf");
`ChromePdfRenderer`에는 종종 배경 이미지와 CSS로 참조되는 자산이 전체 해상도로 삽입됩니다. 렌더링 후 `compressSize`를 호출하면 HTML 소스 기반 PDF의 파일 크기를 일관되게 줄일 수 있습니다. IronPDF [HTML to PDF 튜토리얼](https://ironpdf.com/nodejs/tutorials/html-to-pdf/)에서는 렌더러 설정에 대해 자세히 다룹니다.
전자 서명이 필요한 문서의 경우, [전자 서명](https://ironpdf.com/nodejs/examples/digitally-sign-a-pdf/)을 압축 후에 적용하세요. 서명은 문서의 바이트 스트림을 잠그며, 이후 수정은 서명을 무효화합니다.
여러 페이지로 구성된 문서를 다룰 때는 압축하기 전에 `PdfDocument.merge()`로 병합하십시오. 병합된 결과를 압축하는 것이 개별 파일을 압축하고 다시 병합하는 것보다 더 효율적입니다.
팁멀티 페이지 문서를 병합한 후 압축하세요. 병합된 결과를 압축하는 것이 개별 파일을 압축하고 다시 병합하는 것보다 더 효율적입니다.
## Node.js에서 PDF 압축의 다음 단계는 무엇입니까?
`compressSize` 메서드는 가장 일반적인 압축 사용 사례인 내장 이미지 용량 줄이기를 다룹니다. 특수한 시나리오에 대해서는 IronPDF [PDF 압축 예제](https://ironpdf.com/nodejs/examples/pdf-compression/)가 추가적인 코드 샘플을 제공하며, [API 레퍼런스](https://ironpdf.com/nodejs/object-reference/api/)는 사용 가능한 모든 메서드 서명을 문서화하고 있습니다.
IronPDF는 또한 [이미지를 PDF로](https://ironpdf.com/nodejs/examples/image-to-pdf/) 변환하고, [PDF 텍스트를 읽으며](https://ironpdf.com/nodejs/examples/reading-pdf-text/), [PDF에서 페이지를 제거하는](https://ironpdf.com/nodejs/examples/remove-page-from-pdf/) 기능을 지원하며, 이러한 모든 작업은 동일한 `PdfDocument` API와 통합됩니다. Node.js PDF 기능에 대한 전체 개요는 [IronPDF Node.js 문서](https://ironpdf.com/nodejs/docs/)를 참조하세요.
프로젝트에서 압축을 테스트할 준비가 되었습니까? [무료 체험판 시작하기](#trial-license)를 통해 위의 예제를 워터마크 없이 실행하거나, [라이선스 옵션 보기](#licensing)를 통해 프로덕션 배포에 대해 알아보세요.
`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로 비율을 계산하여 퍼센트 감소를 얻습니다.





