이 페이지에는 자동 번역된 텍스트가 포함될 수 있습니다.
C# 및 VB.NET에서 PDF 문서 압축
많은 경우 PDF 문서를 압축하고 최적화하려는 것이 일반적입니다. 더 작은 PDF 문서는 네트워크를 통해 전송하기 쉽고 저장 비용도 더 저렴합니다. PDF 파일 크기를 줄이는 것은 보관 목적에서 특히 중요합니다.

PDF 문서를 최적화하는 .NET 라이브러리
Docotic.Pdf library를 사용하여 .NET Framework 및 .NET Core 애플리케이션에서 PDF 문서를 압축하세요. 이 라이브러리는 NuGet과 당사 사이트에서 제공됩니다. C# .NET PDF 라이브러리 다운로드 페이지에서 라이브러리와 기간 제한이 있는 무료 라이선스 키를 받으세요.
Docotic.Pdf는 다음과 같은 다양한 최적화 수단을 제공합니다:
- PDF 개체 최적화
- 중복 PDF 개체 제거(폰트, 이미지 등)
- 이미지 압축
- 폰트 부분집합화
- 메타데이터 제거
- 구조 정보 제거
- 사용하지 않는 리소스 제거
- 개인 애플리케이션 데이터 제거
- 폼 필드와 주석 평면화
- 폰트 임베드 해제
위의 모든 방법을 사용하면 PDF 문서에서 최상의 압축률을 얻을 수 있습니다. 이러한 모든 기법이 실제로 적용되는 모습을 보려면 Compress PDF document in .NET 샘플을 확인하세요.
이제 이러한 압축 방법을 더 자세히 살펴보겠습니다.
PDF 개체 최적화
내부적으로 PDF 파일은 사전, 스트림, 배열 등과 같은 저수준 PDF 개체의 집합입니다. PDF 파일을 저장할 때 Docotic.Pdf는 기본적으로 다음 무손실 최적화를 적용합니다:
- Flate 인코딩으로 PDF 스트림 압축
- 사용하지 않는 PDF 개체 삭제
- 간접 PDF 개체 인라인 처리
- 서식 없이 PDF 개체 작성
- 압축된 개체 스트림에 PDF 개체 저장
이 샘플은 C#에서 PDF 개체를 최적화하는 방법을 보여 줍니다:
using BitMiracle.Docotic.Pdf;
using var pdf = new PdfDocument("input.pdf");
var saveOptions = new PdfSaveOptions();
// 이러한 옵션은 기본적으로 활성화되며 암시적으로 적용됩니다:
//saveOptions.Compression = PdfCompression.Flate;
//saveOptions.RemoveUnusedObjects = true;
//saveOptions.OptimizeIndirectObjects = true;
//saveOptions.UseObjectStreams = true;
//saveOptions.WriteWithoutFormatting = true;
pdf.Save("compressed.pdf", saveOptions);
이러한 최적화는 PDF 문서의 표시되는 내용(텍스트, 이미지, 북마크 등)에는 영향을 주지 않습니다. 출력 PDF 파일에서 PDF 개체가 어떻게 기록되고 압축되는지만 영향을 줍니다.
사용하지 않는 PDF 개체를 삭제하는 것은 아래에서 설명하는 다른 기법에도 중요합니다. 사용하지 않는 개체를 유지해야 할 강력한 이유가 없다면 PdfSaveOptions.RemoveUnusedObjects 속성을 false로 설정하지 마세요.
PDF 문서에서 중복 개체 제거
PDF 문서를 병합하면 생성된 PDF에는 종종 중복 폰트와 이미지가 포함됩니다. 중복 개체를 바꾸면 생성된 PDF 파일의 크기를 줄이는 데 도움이 됩니다. 이 작업의 C# 샘플은 다음과 같습니다:
using var pdf = new PdfDocument("merged.pdf");
pdf.ReplaceDuplicateObjects();
pdf.Save("compressed.pdf");
이미지를 압축하거나 폰트를 임베드 해제하기 전에 중복 개체를 제거하는 것이 좋습니다. 그렇지 않으면 동일한 이미지나 폰트의 복사본을 최적화하는 데 불필요한 작업이 많이 발생합니다.
PdfDocument.ReplaceDuplicateObjects 메서드는 인라인 이미지를 대체하지 않습니다. 문서에 인라인 이미지가 포함되어 있으면 먼저 PdfCanvas.MoveInlineImagesToResources 메서드를 사용하세요. 이 메서드는 인라인 이미지를 일반 이미지로 변환하고, 이후 ReplaceDuplicateObjects 메서드가 변환된 이미지도 중복 제거할 수 있게 해 줍니다.
PDF에서 이미지 압축
PDF 이미지를 최적화하는 것은 일반적으로 래스터 이미지가 포함된 문서에서 가장 효과적인 압축 방법입니다.
Docotic.Pdf library는 JPEG, CCITT Group 3 및 4(fax), JPEG 2000, zip/deflate 압축 알고리즘을 사용하여 PDF 이미지를 다시 압축하는 내장 메서드를 제공합니다. 이미지를 크기 조정하거나 축소하여 PDF 파일 크기를 더 줄일 수도 있습니다. 또는 타사 도구를 사용해 직접 이미지를 최적화한 뒤 이미지를 교체할 수도 있습니다.
예시로 GitHub의 C# 및 VB.NET에서 PDF 문서의 이미지 최적화 샘플을 확인하세요.
폰트 부분집합화
PDF 문서는 일반적으로 텍스트를 그리는 데 사용되는 폰트를 포함합니다. 포함된 폰트에는 지원되는 모든 글리프에 대한 정보가 포함되는 경우가 많습니다. PDF 문서에서 사용되지 않는 글리프를 제거하면 출력 파일 크기를 크게 줄일 수 있습니다.
이 샘플은 C#에서 PDF 폰트를 최적화하는 방법을 보여 줍니다:
using var pdf = new PdfDocument("text.pdf");
pdf.RemoveUnusedFontGlyphs();
pdf.Save("compressed.pdf");
부분집합화는 텍스트 상자나 콤보 상자와 같은 가변 텍스트 컨트롤에서 사용되는 폰트에는 영향을 주지 않습니다.
메타데이터 제거
PDF 문서에는 작성자, 키워드, 생성 시각 등의 정보가 포함된 압축되지 않은 XMP 메타데이터가 들어 있을 수 있습니다. 메타데이터는 PDF 문서의 표시되는 내용에는 영향을 주지 않습니다.
이 샘플은 C#에서 PDF 파일에서 메타데이터를 제거하는 방법을 보여 줍니다:
using var pdf = new PdfDocument("metadata.pdf");
XmpMetadata xmp = pdf.Metadata;
xmp.Unembed();
pdf.Info.Clear(false);
pdf.Save("compressed.pdf");
구조 정보 제거
PDF 문서에는 논리적 구조에 대한 정보가 포함될 수 있습니다. 이 정보는 다음 용도로 사용됩니다:
- Tagged PDF 문서 생성
- 보조 기기에서 PDF 문서를 접근 가능하게 만듦
이러한 정보를 제거하면 PDF 파일 크기를 줄이는 데 도움이 됩니다. 그러나 PDF는 더 이상 태그가 지정되지 않으며 보조 기기에서 접근할 수 없게 됩니다. 이 샘플은 C#에서 PDF의 구조 정보를 삭제하는 방법을 보여 줍니다:
using var pdf = new PdfDocument("tagged.pdf");
pdf.RemoveStructureInformation();
pdf.Save("compressed.pdf");
PDF에서 사용하지 않는 리소스 제거
PDF 페이지와 XObject는 실제로 사용하는 것보다 더 많은 폰트, 이미지 또는 패턴을 참조할 수 있습니다. PdfDocument.RemoveUnusedResources 메서드를 사용하여 PDF에서 사용하지 않는 리소스를 제거할 수 있습니다. C# 샘플은 다음과 같습니다:
using var pdf = new PdfDocument("input.pdf");
pdf.RemoveUnusedResources();
pdf.Save("compressed.pdf");
PDF에서 개인 애플리케이션 데이터 제거
Adobe 소프트웨어에서 생성된 PDF 문서에는 개인 애플리케이션 데이터가 포함될 수 있습니다. 이러한 애플리케이션 데이터는 page-piece dictionaries에 저장됩니다.
이 샘플은 page-piece dictionaries를 제거하여 C#에서 PDF를 정리하고 압축하는 방법을 보여 줍니다:
using var pdf = new PdfDocument("input.pdf");
pdf.RemovePieceInfo();
pdf.Save("compressed.pdf");
PDF 양식 필드와 주석 평면화
양식이 완료된 PDF 문서는 양식 필드를 평면화하여 크기를 줄일 수 있습니다. 평면화는 양식 필드를 시각적 표현으로 대체합니다. 입력된 값은 유지됩니다. 이 C# 샘플은 모든 PDF 양식 필드를 평면화하는 방법을 보여 줍니다:
using var pdf = new PdfDocument("form.pdf");
pdf.FlattenControls();
pdf.Save("compressed.pdf");
또는 PdfDocument.FlattenWidgets 메서드를 사용하여 모든 주석과 컨트롤을 평면화할 수 있습니다.
또한 PdfWidget.Flatten 메서드를 사용하면 개별 주석이나 컨트롤을 평면화할 수 있습니다.
폰트 임베드 해제
PDF 폰트를 임베드하는 것은 사용자 지정 폰트나 희귀 폰트에는 매우 적절합니다. 동시에 Arial이나 Verdana처럼 널리 사용 가능한 폰트는 특별한 이유 없이 PDF 파일 크기를 증가시킬 수 있습니다. 대상 플랫폼에서 사용할 수 있는 널리 알려진 폰트는 임베드 해제할 수 있습니다. C# 샘플 코드:
using var pdf = new PdfDocument("input.pdf");
UnembedFonts(pdf);
pdf.Save("compressed.pdf");
/// <summary>
/// 이 메서드는 다음 조건을 만족하는 모든 폰트를 임베드 해제합니다:
/// * OS에 설치되어 있거나
/// * 이름이 "always unembed" 목록에 포함되어 있고
/// * 이름이 "always keep" 목록에 포함되어 있지 않은 경우.
/// </summary>
private static void UnembedFonts(PdfDocument pdf)
{
string[] alwaysUnembedList = ["MyriadPro-Regular"];
string[] alwaysKeepList = ["ImportantFontName", "AnotherImportantFontName"];
using var ms = new MemoryStream();
foreach (PdfFont font in pdf.GetFonts())
{
if (!font.Embedded ||
font.EncodingName == "Built-In" ||
Array.Exists(alwaysKeepList, name => font.Name == name))
{
continue;
}
if (font.Format == PdfFontFormat.TrueType || font.Format == PdfFontFormat.CidType2)
{
SystemFontLoader loader = SystemFontLoader.Instance;
ms.Position = 0;
if (loader.TryLoad(font.Name, font.Bold, font.Italic, ms))
{
font.Unembed();
continue;
}
}
if (Array.Exists(alwaysUnembedList, name => font.Name == name))
font.Unembed();
}
}
이 기법은 PDF/A 문서에는 사용하지 마세요. PDF/A 문서는 모든 폰트를 포함해야 합니다.
임베드 해제된 폰트가 있는 PDF 문서는 대상 운영 체제(Windows, Linux, macOS, iOS, Android)와 PDF 뷰어(Adobe, Foxit 등)에서 항상 테스트하세요.
PDF 크기를 줄이는 다른 방법
위에서 언급한 최적화 방법은 많습니다. 그러나 중요하지 않은 콘텐츠를 제거하면 PDF 문서를 훨씬 더 압축할 수 있습니다. Docotic.Pdf를 사용하면 PDF 문서에서 다음 개체를 삭제할 수 있습니다:
- 주석
- 첨부 파일
- 북마크
- 폼 필드
- 페이지
- 스크립트
- 투명도
PDF 페이지에서 텍스트, 이미지, 벡터 그래픽도 제거할 수 있습니다. 텍스트 평면화도 가능합니다.
결론
Docotic.Pdf library를 사용하여 C# 및 VB.NET에서 PDF를 압축할 수 있습니다. Docotic.Pdf는 매우 효과적인 여러 최적화 수단을 제공합니다.
GitHub에서 전체 C# 및 VB.NET에서 PDF 문서 압축 샘플을 다운로드하여 사용해 보세요.
문의하세요. 그러면 PDF 문서에서 최상의 압축률을 달성하는 방법을 안내해 드리겠습니다.