이 페이지에는 자동 번역된 텍스트가 포함될 수 있습니다.

C# 및 VB.NET에서 PDF 문서 분할

Docotic.Pdf 라이브러리를 사용하면 PDF 문서를 더 작은 파일 그룹으로 나눌 수 있습니다. 개별 페이지나 페이지 범위를 추출할 수 있습니다. 특정 기준에 따라 PDF 문서를 분할할 수도 있습니다.

PDF 문서 분할

Docotic.Pdf는 유료 라이센스와 함께 제공되지만 어떤 경우에는 무료이기도 합니다. Docotic.Pdf 다운로드 페이지에서 라이브러리를 다운로드하고 평가판 라이센스 키를 얻을 수 있습니다.

Docotic.Pdf 라이브러리 9.4.17467-dev 회귀 테스트 14,760건의 테스트 통과 총 NuGet 다운로드 4,415,970

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(new int[] { 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에서 해당 페이지 추출 코드 샘플을 사용해 볼 수 있습니다.

페이지 제거 및 재정렬

CopyPagesExtractPages 메서드는 선택한 페이지가 포함된 새 문서를 생성합니다. 대안은 현재 문서에서 페이지를 제거하는 것입니다.

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);

byte 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 개체 구문 분석과 관련된 오버헤드가 포함됩니다. 테스트에서 병렬 코드가 더 빠르다는 것이 입증되지 않는 한 단일 스레드 버전을 사용하십시오.