C#에서 PDF를 압축하는 방법

IronPDF 사용하여 C#에서 PDF를 압축하는 방법

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPDF는 C#에서 내장 이미지를 JPEG로 다시 인코딩하고 선택적으로 PDF 구조 트리를 삭제하여 한 번의 호출로 파일 크기를 줄이는 CompressAndSaveAs 메서드를 통해 PDF를 압축합니다. 동반자 CompressPdfToBytesCompressPdfToStream 메서드도 메모리 내에서 동일한 작업을 수행하여 디스크를 건드리지 않습니다.

이미지는 보통 PDF 크기의 대부분을 차지하고 있으며 테이블이 많은 문서는 추가 무게를 더하는 구조 트리를 가지고 있습니다. IronPDF는 둘 다를 겨냥하여 디스크에서 로드된 PDF나 메모리 스트림에 있는 PDF를 모두 처리합니다.

빠른 시작: IronPDF 로 PDF 파일 압축하기

PDF를 PdfDocument.FromFile으로 로드하고 CompressAndSaveAs을 호출하여 이미지를 다시 인코딩하고 축소된 사본을 한 단계로 작성하십시오. 두 번째 인수는 JPEG 품질입니다.

  1. NuGet 패키지 관리자를 사용하여 https://www.nuget.org/packages/IronPdf 설치하기

    PM > Install-Package IronPdf
  2. 다음 코드 조각을 복사하여 실행하세요.

    PdfDocument.FromFile("input.pdf").CompressAndSaveAs("compressed.pdf", 40);
  3. 실제 운영 환경에서 테스트할 수 있도록 배포하세요.

    무료 체험판으로 오늘 프로젝트에서 IronPDF 사용 시작하기

    arrow pointer


CompressImages, CompressStructTreeCompress(CompressionOptions)와 같은 이전의 압축 방법은 더 이상 사용되지 않습니다.

PDF 파일에서 이미지를 압축하는 방법은 무엇인가요?

CompressAndSaveAs의 두 번째 인수로 JPEG quality 값을 전달하면 IronPDF가 해당 품질로 모든 내장 이미지를 다시 인코딩합니다. 값은 0(최대 압축)에서 100(최소 손실)까지 있으며, 내부 엔진이 각 값을 출력에 어떻게 매핑할지 결정합니다. 문서가 임베디드 이미지를 포함할 때마다 이 방법을 사용하세요.

대략적인 가이드:

  • 90 이상: 높은 품질
  • 80에서 90: 중간 품질
  • 70에서 80: 낮은 품질

더 낮은 숫자는 더 강하게 압축하지만 눈에 보이는 아티팩트를 일으킬 수 있으며 얼마나 많은 선명도가 떨어질지는 소스 이미지에 달려 있으므로 몇 가지 설정을 자신의 콘텐츠와 비교하여 원하는 균형을 찾아보세요.

입력

:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-image.cs
using IronPdf;

ChromePdfRenderer renderer = new ChromePdfRenderer();

PdfDocument pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Main_Page");

// Compress images in the PDF
pdf.CompressAndSaveAs("compressed.pdf", 40);
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

Dim pdf As PdfDocument = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Main_Page")

' Compress images in the PDF
pdf.CompressAndSaveAs("compressed.pdf", 40)
$vbLabelText   $csharpLabel

산출

이미지 압축을 통해 어떤 결과를 기대할 수 있을까요?

39.24%로 Wikipedia 렌더에서 감소됨.

압축된 PDF 파일(449KB)과 압축되지 않은 PDF 파일(739KB)을 비교하여 이미지 압축 결과를 보여줍니다.

PDF 트리 구조를 압축하는 방법은 무엇인가요?

세 번째 인수로 removeStructureTree: trueCompressAndSaveAs에 전달하여 Chrome 엔진이 PDF로 작성하는 트리 구조를 삭제하십시오. 저장은 광범위한 테이블 데이터를 가진 Chrome 엔진 PDF에서 가장 큽니다. 어떤 렌더링 엔진은 제거할 수 있는 구조를 생성하지 않습니다.

트리를 제거하면 텍스트 강조 표시와 선택이 약해질 수 있으므로 나중에 독자가 결과에서 텍스트와 이미지를 추출할 필요가 있는 경우 크기 향상과 균형을 맞추어 보세요.

테이블 데이터가 있는 PDF를 사용하여 트리 구조 제거를 CompressAndSaveAs 테스트하십시오.

:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-tree-structure.cs
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("table.pdf");

// Compress tree structure in PDF
pdf.CompressAndSaveAs("compressedTable.pdf", null, true);
Imports IronPdf

Dim pdf As PdfDocument = PdfDocument.FromFile("table.pdf")

' Compress tree structure in PDF
pdf.CompressAndSaveAs("compressedTable.pdf", Nothing, True)
$vbLabelText   $csharpLabel

트리 구조 압축을 통해 파일 크기를 얼마나 줄일 수 있을까요?

67.90%로 감소됨. 표 PDF가 커짐에 따라 수치가 상승합니다.

압축된 Table.pdf(52KB)와 table.pdf(162KB) 파일을 비교하여 압축 결과를 보여줍니다.

두 가지 압축 방법을 동시에 적용하려면 어떻게 해야 할까요?

하나의 CompressAndSaveAs 호출에서 두 부풀림 소스를 동시에 수축시키려면 quality 값을 제공하고 removeStructureTreetrue에 설정하십시오. 이 조합은 차트가 있는 보고서나 임베디드 테이블이 있는 송장과 같은 이미지와 구조화된 데이터를 혼합한 문서에서 역할을 다합니다.

:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-compress.cs
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("sample.pdf");

// Configure compression with automatic optimization
pdf.CompressAndSaveAs("compressed.pdf", 80, true);
Imports IronPdf

Dim pdf As PdfDocument = PdfDocument.FromFile("sample.pdf")

' Configure compression with automatic optimization
pdf.CompressAndSaveAs("compressed.pdf", 80, True)
$vbLabelText   $csharpLabel

CompressAndSaveAs이 수용하는 매개변수는 무엇입니까?

  • outputPath (문자열): 압축된 PDF가 작성되는 파일 경로.

  • quality (int?, 0에서 100): 모든 내장 이미지에 적용된 JPEG 품질. 낮은 값은 더 작은 파일을 만듭니다. 이미지 압축을 완전히 건너뛰려면 null을 전달하십시오.

  • removeStructureTree (bool, 기본값 false): true일 때 PDF 구조 트리를 삭제하여 파일 크기를 더욱 줄입니다. 표가 포함된 HTML로 생성된 PDF에 가장 효과적입니다.

using 사례에 맞게 조정하세요. 보관 사본은 종종 품질을 크기보다 우선시하며, 웹 배포는 더 작은 파일을 권장합니다. 이러한 거래는 PDF/A 호환 문서를 압축할 때에도 적용됩니다. 이때 이미지 충실도가 우선일 수 있습니다.

Icon Quote related to CompressAndSaveAs이 수용하는 매개변수는 무엇입니까?

이 종류의 라이브러리 중 가장 좋아하는 것은 IronPDF입니다. PDF 파일을 빠르고 효율적으로 조작할 수 있습니다. 또한 PDF/A 형식으로 내보내기 및 PDF 문서의 디지털 서명과 같은 많은 유용한 기능을 가지고 있습니다.

Milan Jovanovic related to CompressAndSaveAs이 수용하는 매개변수는 무엇입니까?

Milan Jovanovic

마이크로소프트 MVP

사례 연구 보기
Icon Quote related to CompressAndSaveAs이 수용하는 매개변수는 무엇입니까?

IronOCR 덕분에 연간 $40,000를 수동 프로세싱에서 절약하고 생산성을 높이며 고부가가치 작업에 자원을 활용할 수 있습니다. 강력히 추천합니다.

Brent Matzelle related to CompressAndSaveAs이 수용하는 매개변수는 무엇입니까?

브렌트 마첼

최고 기술 책임자, OPYN

사례 연구 보기
Icon Quote related to CompressAndSaveAs이 수용하는 매개변수는 무엇입니까?

IronSuite는 우리의 운영에서 중요한 역할을 합니다. 이것들은 사업 전반에 걸쳐 효율성을 높이는 도구로, 평면도 생성 및 재고 관리 개선을 포함합니다.

David Jones related to CompressAndSaveAs이 수용하는 매개변수는 무엇입니까?

데이비드 존스

리드 소프트웨어 엔지니어, Agorus Build

사례 연구 보기

압축에 대한 세부 제어를 어떻게 얻습니까?

대부분의 문서에는 인수가 두 개인 것이 충분하지만 이미지가 많은 아카이브와 엄격한 크기 예산은 때때로 더 많은 제어가 필요합니다. 압축 파이프라인을 조정하기 위해 AdvancedCompressionOptions 객체를 CompressAndSaveAs에 전달하십시오. 여기에는 이미지 DPI 다운샘플링, JPEG에 대한 재인코딩 품질 및 zlib 압축 레벨이 있습니다. 간단한 CompressAndSaveAs(outputPath, quality, removeStructureTree) 오버로드는 변함없이 작동하며 이전과 같은 출력을 생성합니다.

using IronPdf;

var pdf = PdfDocument.FromFile("input.pdf");

// Web or email: strong size reduction
pdf.CompressAndSaveAs("compressed.pdf", new AdvancedCompressionOptions
{
    JpegQuality = 70,
    TargetImageDpi = 150,
    RemoveStructureTree = true
});

// Print quality: minimal quality loss
pdf.CompressAndSaveAs("print.pdf", new AdvancedCompressionOptions
{
    JpegQuality = 90,
    TargetImageDpi = 300
});
using IronPdf;

var pdf = PdfDocument.FromFile("input.pdf");

// Web or email: strong size reduction
pdf.CompressAndSaveAs("compressed.pdf", new AdvancedCompressionOptions
{
    JpegQuality = 70,
    TargetImageDpi = 150,
    RemoveStructureTree = true
});

// Print quality: minimal quality loss
pdf.CompressAndSaveAs("print.pdf", new AdvancedCompressionOptions
{
    JpegQuality = 90,
    TargetImageDpi = 300
});
Imports IronPdf

Dim pdf = PdfDocument.FromFile("input.pdf")

' Web or email: strong size reduction
pdf.CompressAndSaveAs("compressed.pdf", New AdvancedCompressionOptions With {
    .JpegQuality = 70,
    .TargetImageDpi = 150,
    .RemoveStructureTree = True
})

' Print quality: minimal quality loss
pdf.CompressAndSaveAs("print.pdf", New AdvancedCompressionOptions With {
    .JpegQuality = 90,
    .TargetImageDpi = 300
})
$vbLabelText   $csharpLabel

가장 영향을 크게 미치는 두 가지 속성은 JpegQualityTargetImageDpi입니다:

  • JpegQuality (int?, 1에서 100, 기본값 null): 이 JPEG 품질로 이미지를 다시 인코딩합니다. 이미지 재인코딩을 완전히 건너뛰려면 null으로 두십시오.
  • TargetImageDpi (int?, 기본값 150): 재인코딩 전에 유효한 DPI가 이 값을 초과하는 이미지를 다운샘플링합니다. 다운샘플링을 비활성화하고 원래 해상도를 유지하려면 null 또는 0로 설정하십시오.

추천되는 JpegQuality 값(설정한 경우에만 적용됩니다):

사용 사례
null (기본값) 이미지 재인코딩 없음
95 아카이브, 최소한의 인공물
85 고품질
70 일반 용도로 적합한 균형
50 웹 또는 이메일, 가시적인 인공물이 있는 작은 파일

추천되는 TargetImageDpi 값(손실):

사용 사례
300 인쇄 품질, 일반 거리에서 눈에 볼 수 없는 무손실
200 고해상도 및 레티나 화면에서 선명합니다
150 (기본값) 화면 및 이메일에 가장 적합한 크기 및 품질 균형
96 공격적, 부드러운 텍스트지만 여전히 읽을 수 있음
null 또는 0 비활성화되며 원래의 해상도를 보존합니다

참고해 주세요TargetImageDpi 다운샘플링은 손실됩니다: 이미지가 다운샘플링되면 원래의 해상도로 복원할 수 없습니다. 해상도 감소 또는 품질 전용 재인코딩을 원할지 여부를 미리 결정하고 TargetImageDpi을(를) 적절히 설정하십시오.

PDF 파일을 디스크에 저장하지 않고 압축하는 방법은 무엇인가요?

API 응답, 클라우드 기능 및 이메일 첨부 파일은 거의 디스크에 압축된 PDF가 필요하지 않습니다. CompressPdfToBytes은 결과를 바이트 배열로 반환하므로 당신이 정하는 곳에 바이트를 보낼 수 있습니다.

:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-to-bytes.cs
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("sample.pdf");

// Return the compressed PDF as bytes so it can go straight into an HTTP
// response, a database varbinary column, or a queue message with no temp file
byte[] compressedBytes = pdf.CompressPdfToBytes();

File.WriteAllBytes("compressed.pdf", compressedBytes);
Imports IronPdf

Dim pdf As PdfDocument = PdfDocument.FromFile("sample.pdf")

' Return the compressed PDF as bytes so it can go straight into an HTTP
' response, a database varbinary column, or a queue message with no temp file
Dim compressedBytes As Byte() = pdf.CompressPdfToBytes()

File.WriteAllBytes("compressed.pdf", compressedBytes)
$vbLabelText   $csharpLabel

바이트 배열이 아닌 Stream이 필요한 경우 CompressPdfToStream을 호출하고 원하는 대상에 복사하십시오. 이것은 HTTP 응답 본문, 클라우드 저장소 업로드 또는 스트림 기반 워크플로에 출력 파이핑을 맞춥니다.

:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-to-stream.cs
using IronPdf;
using System.IO;

PdfDocument pdf = PdfDocument.FromFile("sample.pdf");

// Stream output so the compressed bytes can be piped straight to an HTTP
// response or cloud upload without first buffering the whole file as byte[]
using Stream compressedStream = pdf.CompressPdfToStream();

// CompressPdfToStream returns a read-only Stream, so copy it to the destination
using FileStream fileStream = File.Create("compressed.pdf");
compressedStream.CopyTo(fileStream);
Imports IronPdf
Imports System.IO

Dim pdf As PdfDocument = PdfDocument.FromFile("sample.pdf")

' Stream output so the compressed bytes can be piped straight to an HTTP
' response or cloud upload without first buffering the whole file as byte()
Using compressedStream As Stream = pdf.CompressPdfToStream()
    ' CompressPdfToStream returns a read-only Stream, so copy it to the destination
    Using fileStream As FileStream = File.Create("compressed.pdf")
        compressedStream.CopyTo(fileStream)
    End Using
End Using
$vbLabelText   $csharpLabel

Compression방법 옵션은 무엇이 있습니까?

CompressPdfToBytesCompressPdfToStream은 작업 수행 방식을 결정하는 선택적 Compression방법 인수를 수용합니다. 배포 대상은 디스크 접근을 허용하는지 여부가 다르고, 모드는 적절한 거래를 고르게 합니다:

방법 디스크 접근 이미지 재샘플링 출력 크기
Automatic (기본값) 디스크 시도, 메모리로 돌아가기 디스크가 사용 가능한 경우 허용되는 곳에서 가장 작음
FastMemory 아니요ne 아니요 더 큼
HighQuality 임시 디렉터리가 필요 가장 작음

Automatic이(가) 처음 HighQuality을(를) 시도했고 임시 디렉토리를 사용할 수 없을 때 FastMemory로 떨어집니다. 아래 예제는 최소 출력을 위해 런타임 시 시스템 임시 디렉토리에 쓰기 접근이 필요합니다.

:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-mode.cs
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("sample.pdf");

// HighQuality resamples images using the system temp directory, so it produces
// the smallest output but needs write access to that directory at runtime
byte[] compressedBytes = pdf.CompressPdfToBytes(50, false, CompressionMode.HighQuality);

File.WriteAllBytes("compressed.pdf", compressedBytes);
Imports IronPdf

Dim pdf As PdfDocument = PdfDocument.FromFile("sample.pdf")

' HighQuality resamples images using the system temp directory, so it produces
' the smallest output but needs write access to that directory at runtime
Dim compressedBytes As Byte() = pdf.CompressPdfToBytes(50, False, CompressionMode.HighQuality)

File.WriteAllBytes("compressed.pdf", compressedBytes)
$vbLabelText   $csharpLabel

산출

CompressPdfToBytesCompressPdfToStream는 이제 Java, 아니요de.js 및 Python을 포함한 모든 IronPDF 플랫폼에서 사용할 수 있습니다.

결론

이제 이미지 재인코딩 및 구조 트리 삭제를 수행하는 하나의 메서드( CompressAndSaveAs)가 있으며, 선택한 Compression방법 아래 메모리 내에서 동일한 작업을 수행하기 위해 CompressPdfToBytesCompressPdfToStream이(가) 있습니다. 자연스러운 다음 단계는 그러한 축소된 페이지를 PDF 래스터화로 썸네일로 변환하는 것입니다.

자주 묻는 질문

PDF 파일 크기를 압축을 통해 얼마나 줄일 수 있을까요?

결과는 콘텐츠에 따라 다릅니다. 보여진 예시에서 이미지 압축은 파일을 39.24% 줄이고 구조 트리 제거는 테이블이 많은 PDF를 67.90% 줄였습니다. 이미지가 많거나 테이블이 많은 문서는 가장 큰 절약 효과가 있습니다.

IronPDF는 C#에서 PDF를 어떻게 압축하나요?

IronPDF는 CompressAndSaveAs라는 단일 메서드를 통해 압축을 처리합니다. 이 메서드는 구성 가능한 JPEG 품질(0–100)을 사용하여 삽입된 이미지 크기를 줄여주며, removeStructureTree: true를 설정하여 선택적으로 PDF의 내부 구조 트리를 제거할 수 있습니다. 이는 표가 많은 문서에서 특히 효과적입니다.

PDF 파일에서 JPEG 압축 시 어떤 품질 수준을 사용해야 할까요?

IronPDF는 JPEG 압축률을 1%에서 100%까지 지원합니다. 권장 압축률은 고화질의 경우 90% 이상, 중간 화질의 경우 80~90%, 저화질의 경우 70~80%입니다. 최적의 설정은 파일 크기와 시각적 품질 요구 사항 간의 균형을 고려하여 결정하십시오.

PDF 파일을 단 한 줄의 코드로 압축할 수 있을까요?

네, IronPDF를 사용하면 한 줄의 코드로 PDF 압축이 가능합니다: PdfDocument.FromFile("input.pdf").CompressAndSaveAs("compressed.pdf", 40); 이 코드는 PDF를 불러온 후, 이미지 품질을 40%로 설정하여 압축하고 결과를 저장합니다.

HTML로 생성된 PDF에도 압축 기능이 적용되나요?

네, IronPDF의 압축은 HTML 문자열에서 PDF 변환, URL에서 PDF 변환, HTML 파일 변환 등을 포함한 다양한 방법을 통해 생성된 PDF와 기존 PDF 파일에서 작동합니다.

PDF 압축을 통해 가장 큰 이점을 얻을 수 있는 콘텐츠 유형은 무엇입니까?

일반적으로 이미지는 PDF 파일 크기의 대부분을 차지하므로 이미지가 많은 문서는 압축에 적합합니다. 또한 복잡한 표 구조를 가진 PDF는 IronPDF의 구조 트리 압축 기능을 통해 이점을 얻을 수 있습니다.

디스크에 저장하지 않고 PDF를 압축할 수 있나요?

네, IronPDF는 압축된 PDF를 각각 바이트 배열 또는 스트림으로 반환하는 CompressPdfToBytesCompressPdfToStream 메서드를 제공합니다. 두 메서드 모두 Automatic, FastMemory 또는 HighQuality 압축 옵션을 지정할 수 있는 선택적 CompressionMode 매개변수를 지원합니다.

C# 이외의 다른 언어에서도 PDF 압축 기능을 사용할 수 있습니까?

네, CompressPdfToBytesCompressPdfToStream은 이제 Java, Node.js, Python을 포함한 모든 IronPDF 플랫폼에서 사용할 수 있습니다.

C#에서 PDF 압축에 대한 세밀한 제어는 어떻게 얻을 수 있습니까?

AdvancedCompressionOptions 객체를 CompressAndSaveAs에 전달하여 이미지 DPI 다운샘플링을 위한 TargetImageDpi, JPEG 재인코딩 품질을 위한 JpegQuality, zlib CompressionLevel을 포함하여 파이프라인을 조정하세요. 기존 CompressAndSaveAs(outputPath, quality, removeStructureTree) 오버로드는 여전히 작동하며, 이전과 동일한 출력을 생성합니다.

Curtis Chau
기술 문서 작성자

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

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

검토자:
제프 프리츠
제프리 T. 프리츠
.NET 커뮤니티 팀의 수석 프로그램 관리자
제프는 .NET 및 Visual Studio 팀의 수석 프로그램 관리자이기도 합니다. 그는 .NET Conf 가상 컨퍼런스 시리즈의 총괄 프로듀서이며, 개발자를 위한 라이브 스트림 'Fritz and Friends'를 주 2회 진행하며 시청자들과 함께 기술에 대해 이야기하고 코드를 작성합니다. 제프는 Microsoft Build, Microsoft Ignite, .NET Conf, Microsoft MVP Summit 등 주요 Microsoft 개발자 행사를 위한 워크숍, 프레젠테이션 및 콘텐츠 기획을 담당합니다.
시작할 준비 되셨나요?
Nuget 다운로드 19,936,792 | 버전: 2026.7 방금 출시
Still Scrolling Icon

아직도 스크롤하고 계신가요?

빠른 증거를 원하시나요? PM > Install-Package IronPdf
샘플을 실행하세요 HTML이 PDF로 변환되는 것을 지켜보세요.