이 페이지에는 자동 번역된 텍스트가 포함될 수 있습니다.
C# 및 VB.NET에서 PDF 문서 분할
Docotic.Pdf 라이브러리를 사용하면 PDF 문서를 더 작은 파일들의 집합으로 나눌 수 있습니다. 개별 페이지나 페이지 범위를 추출할 수 있습니다. 또한 특정 기준에 따라 PDF 문서를 분할할 수도 있습니다.

Docotic.Pdf에는 유료 라이선스가 포함되어 있지만, 특정 경우에는 무료로도 사용할 수 있습니다. C# .NET PDF 라이브러리 다운로드 페이지에서 라이브러리와 무료 기간 제한 라이선스 키를 받으세요.
PDF 분할 기본 사항
PdfDocument.CopyPages 메서드를 사용하면 PdfDocument 개체에서 페이지를 복사할 수 있습니다. 이것은 PDF 문서를 분할하는 데 사용하는 Docotic.Pdf의 기본 API입니다.
PDF를 개별 페이지로 분할
다음 C# 코드는 각 PDF 페이지를 별도 파일로 저장합니다:
using var pdf = new PdfDocument("source.pdf");
for (int i = 0; i < pdf.PageCount; ++i)
{
using PdfDocument copy = pdf.CopyPages(i, 1);
copy.RemoveUnusedResources();
copy.Save(i + ".pdf");
}
PdfDocument.RemoveUnusedResources 메서드는 출력 파일 크기를 줄이는 데 도움이 됩니다. 복사된 페이지가 사용되지 않는 글꼴, 이미지, 패턴을 참조하는 경우 유용합니다. 출력 파일 최적화 섹션에서 PDF 압축에 대해 자세히 알아보세요.
페이지 그룹으로 분할
CopyPages 메서드는 원하는 페이지 범위의 복사를 지원합니다. 다음 코드 조각은 세 번째 페이지와 첫 번째 페이지를 추출하는 방법을 보여줍니다:
using var pdf = new PdfDocument(@"source.pdf");
using PdfDocument copy = pdf.CopyPages([2, 0]);
copy.RemoveUnusedResources();
copy.Save("result.pdf");
페이지 인덱스의 순서는 중요합니다. 결과 문서에서 페이지 순서를 결정합니다.
GitHub의 페이지 복사 코드 샘플을 사용해 보세요.
조건에 따라 PDF 분할
콘텐츠를 기준으로 문서를 분할할 수 있습니다. 미리 어떤 페이지를 추출해야 하는지 모를 때 유용합니다. 예를 들어, 특정 텍스트가 포함된 페이지를 추출할 수 있습니다:
string textToFind = ".NET Standard";
using var pdf = new PdfDocument("C# in depth.pdf");
var pageIndexes = new List<int>();
for (int i = 0; i < pdf.Pages.Count; i++)
{
string pageText = pdf.Pages[i].GetText();
if (pageText.Contains(textToFind, StringComparison.CurrentCultureIgnoreCase))
pageIndexes.Add(i);
}
if (pageIndexes.Count > 0)
{
using var copy = pdf.CopyPages(pageIndexes.ToArray());
copy.RemoveUnusedResources();
copy.Save(textToFind + ".pdf");
}
텍스트 추출에 대한 자세한 내용은 C# 및 VB.NET에서 PDF 텍스트 추출 문서를 참조하세요.
고급 PDF 분할
페이지 추출
CopyPages 메서드는 연결된 PdfDocument 개체를 변경하지 않습니다. PdfDocument.ExtractPages 메서드도 있습니다. 이 메서드를 사용하면 문서에서 추출한 페이지를 제거할 수 있습니다:
using var pdf = new PdfDocument(@"source.pdf");
using PdfDocument copy = pdf.ExtractPages(0, 3);
copy.Save("extracted.pdf");
pdf.Save("original.pdf");
GitHub의 해당 페이지 추출 코드 샘플을 사용해 볼 수 있습니다.
페이지 제거 및 재정렬
CopyPages 및 ExtractPages 메서드는 선택한 페이지로 새 문서를 만듭니다. 대안으로 현재 문서에서 페이지를 제거할 수 있습니다:
using var pdf = new PdfDocument(@"source.pdf");
pdf.RemovePages(0, 3);
pdf.Save("remaining.pdf");
제거 후 페이지 순서를 다시 정렬할 수도 있습니다. 다음 섹션의 코드 샘플을 참조하세요:
출력 파일 최적화
앞서 결과 파일을 최적화하기 위해 RemoveUnusedResources 메서드를 사용했습니다. Docotic.Pdf는 PDF 압축을 위한 더 많은 옵션을 제공합니다. 예를 들어 구조 정보를 제거하거나 이미지를 압축할 수 있습니다. 자세한 내용은 C# 및 VB.NET에서 PDF 문서 압축 문서를 참조하세요. GitHub의 .NET에서 PDF 문서 압축 코드 샘플도 사용해 볼 수 있습니다.
PDF 분할은 때때로 페이지 파일을 특정 제한보다 작게 만들기 위해 사용됩니다. 이런 경우 결과 크기를 측정하고 필요하면 파일을 압축할 수 있습니다. 샘플 코드:
using var pdf = new PdfDocument("source.pdf");
using PdfDocument copy = pdf.CopyPages(0, 1);
copy.RemoveUnusedResources();
using var ms = new MemoryStream();
copy.Save(ms);
var limit = 1024 * 1024;
if (ms.Length > limit)
{
compress(copy);
copy.Save("result.pdf");
}
일정 제한 이하로 PDF 파일을 압축하는 것이 불가능할 수도 있습니다. 결과는 파일 내용과 제한 값에 따라 달라집니다.
페이지 콘텐츠 추출
분할 시 페이지 콘텐츠를 변경하는 것도 가능합니다. 예를 들어 PDF 임포지션에서 사용하기 전에 추출된 페이지의 크기를 조정할 수 있습니다. 관련된 GitHub의 페이지에서 XObject 만들기 샘플 프로젝트를 사용해 보세요.
또는 추출된 페이지에서 일부 콘텐츠를 제거하거나 바꿀 수 있습니다. PDF 페이지 개체를 복사하는 방법을 보여 주는 텍스트, 경로, 이미지 복사 코드 샘플을 참조하세요.
PDF를 이미지로 분할
Docotic.Pdf는 PDF 문서를 페이지 이미지로 분할하는 것도 지원합니다. 자세한 내용은 C# 및 VB.NET에서 PDF를 이미지로 변환 문서를 참조하세요.
병렬 스레드로 분할
대용량 문서의 경우 PDF 분할을 병렬화하고 싶을 수 있습니다. PdfDocument 클래스는 스레드 세이프하지 않습니다. 하지만 각 스레드에서 별도의 PdfDocument 개체를 사용하는 것은 가능합니다:
string fileName = "source.pdf";
using var temp = new PdfDocument(fileName);
int pageCount = temp.PageCount;
Parallel.For(0, pageCount, i =>
{
using var pdf = new PdfDocument(fileName);
using var copy = pdf.CopyPages(i, 1);
copy.RemoveUnusedResources();
copy.Save($"split_{i}.pdf");
});
단일 스레드 코드가 일반적으로 더 빠릅니다. 멀티스레드 솔루션은 추가 PdfDocument 개체를 파싱하는 데 따른 오버헤드가 있습니다. 병렬 코드가 더 빠르다는 것이 테스트로 입증되지 않는 한 단일 스레드 버전을 사용하세요.