Excel & IT Info

아이엑셀러 닷컴, 엑셀러TV

Python

파이썬을 사용하여 손쉽게 PDF 분할 및 병합하기

권현욱(엑셀러) 2024. 9. 10. 14:33
반응형

들어가기 전에

PDF를 결합하고 분할하는 것은 워크플로우 효율성, 정보 공유 및 조직적 요구 사항을 충족하는 데 필요합니다. 파이썬을 사용하여 PDF 문서를 병합하고 나누는 방법에 대해 소개합니다.

권현욱(엑셀러) | 아이엑셀러 닷컴 대표 · Microsoft Excel MVP · Excel 솔루션 프로바이더 · 작가

이미지: 아이엑셀러 닷컴


※ 이 글은 아래 기사 내용을 토대로 작성되었습니다만, 필자의 개인 의견이나 추가 자료들이 다수 포함되어 있습니다.

  • 원문: Split and Merge PDFs with Ease Using Python: A Complete Guide
  • URL: https://python.plainenglish.io/combine-and-split-pdfs-with-ease-using-python-complete-guide-f3110594b0aa

PDF 결합 및 분할을 위한 파이썬 라이브러리

이 솔루션은 개발자가 PDF 문서에서 다양한 작업을 쉽게 수행할 수 있는 포괄적인 API 세트를 제공하는 Python용 Spire.PDF를 사용합니다. 이러한 작업에는 PDF 문서 병합 및 분할은 물론 PDF 문서 내의 개별 페이지 콘텐츠 관리가 포함됩니다.

PyPI에서 다음 명령을 실행하여 설치할 수 있습니다.

pip install Spire.PDF

 

파이썬에서 여러 PDF를 하나로 결합하기

여러 PDF를 하나로 결합하는 것은 콘텐츠 또는 워크플로 요구 사항에 따라 관련된 문서 집합을 관리하고 공유하기 위한 실용적인 솔루션입니다. Python용 Spire.PDF를 사용하여 PDF를 병합하려면 다음 단계를 따릅니다.

  1. 목록에서 병합할 PDF 문서의 파일 경로를 지정합니다.
  2. PdfDocument.MergeFiles(inputFiles: List[str]) 메서드를 사용하여 목록에 있는 파일을 병합합니다.
  3. 병합된 문서를 저장합니다.

 

from spire.pdf.common import *
from spire.pdf import *

# Create a list containing the paths of the files to be merged
filePaths = ["C:\\Users\\Administrator\\Desktop\\Input-1.pdf", 
              "C:\\Users\\Administrator\\Desktop\\Input-2.pdf", 
              "C:\\Users\\Administrator\\Desktop\\Input-3.pdf"]

# Merge the PDF documents
document = PdfDocument.MergeFiles(filePaths)

# Save the result document
document.Save("output/MergePDFs.pdf")

# Dispose resources
document.Dispose()

 

파이썬에서 여러 PDF의 페이지를 하나의 파일로 결합하기

여러 PDF에서 특정 페이지를 추출하여 하나의 문서로 병합해야 할 때가 있습니다. 이를 통해 사용자 정의 편집을 만들고, 관련 정보를 추출하고, 여러 PDF의 섹션을 단일 파일로 통합할 수 있습니다. 다음은 Python을 사용하여 여러 PDF 문서에서 선택한 페이지를 병합하는 단계입니다.

  1. 병합할 PDF 파일의 경로가 포함된 목록을 만듭니다.
  2. 각 PDF 파일을 PdfDocument 객체로 로드하고 다른 목록(문서)에 추가합니다.
  3. 병합된 페이지를 보관할 새 PdfDocument 개체를 만듭니다.
  4. InserPage() 또는 InsertRageRange() 메서드를 사용하여 소스 PDF 문서에서 선택한 페이지를 새 문서에 삽입합니다.
  5. 새 PDF 문서를 지정된 출력 경로에 저장합니다.

 

from spire.pdf import *
from spire.pdf.common import *

# Create a list containing the paths of the files to be merged
filePaths = ["C:\\Users\\Administrator\\Desktop\\Input-1.pdf", 
             "C:\\Users\\Administrator\\Desktop\\Input-2.pdf", 
             "C:\\Users\\Administrator\\Desktop\\Input-3.pdf"]

# Load each PDF file as a PdfDocument object and add them to a list
documents = []
for filePath in filePaths:
    documents.append(PdfDocument(filePath))

# Create a PdfDocument object
newPdf = PdfDocument()

# Insert the selected pages from the source PDF documents into the new document
newPdf.InsertPage(documents[0], 0)
newPdf.InsertPage(documents[1], 3)
newPdf.InsertPageRange(documents[2], 1, 5)

# Save the new PDF document
newPdf.SaveToFile("output/MergeSelectedPages.pdf")

 

파이썬에서 PDF를 여러 개의 한 페이지 PDF로 분할하기

하나의 PDF에 많은 수의 송장이나 양식이 있다고 가정할 때, 이를 개별 한 페이지 PDF로 분할하면 데이터를 추출하거나 각 페이지에서 특정 작업을 수행하는 등 자동화된 처리가 용이해질 수 있습니다.

Python용 Spire.PDF를 사용하면 몇 줄의 코드를 사용하여 각 페이지를 별도의 PDF 파일로 분할할 수 있습니다. 단계는 다음과 같습니다.

  1. 1단계. 분할할 PDF 문서를 로드합니다.
  2. 2단계. Split(destFilePattern: str, startNumber: int) 메서드를 사용하여 문서를 여러 개의 한 페이지 PDF로 분할합니다.

 

from spire.pdf.common import *
from spire.pdf import *

# Create a PdfDocument object
document = PdfDocument()

# Load a PDF file
document.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf")

# Split the PDF file into multiple one-page PDFs
document.Split("output/SplitDocument-{0}.pdf", 1)

# Dispose resources
document.Dispose()

 

파이썬에서 페이지 범위에 따라 PDF를 여러 PDF로 분할하기

페이지 범위에 따라 PDF를 여러 PDF로 분할하는 것은 다양한 시나리오에서 유용할 수 있습니다. 큰 문서에서 특정 섹션이나 챕터를 추출하거나, 관심 있는 특정 페이지에 대해 별도의 파일을 만들거나, 배포나 처리를 쉽게 하기 위해 문서를 분할할 수 있습니다. 페이지 범위를 사용하여 PDF를 별도의 PDF로 나누는 주요 단계는 다음과 같습니다.

  1. 소스 PDF 문서를 로드합니다.
  2. 원본 문서를 분할하려는 작은 문서 수에 따라 여러 개의 PdfDocument 개체를 만듭니다. 이 경우에는 두 개를 만들었습니다.
  3. 소스 문서의 특정 페이지 또는 페이지 범위를 한 문서에 복사하고 나머지 페이지는 두 번째 문서에 복사합니다.
  4. 새 문서를 각각 두 개의 다른 PDF 파일에 저장합니다.

 

from spire.pdf.common import *
from spire.pdf import *

# Create a PdfDocument object
document = PdfDocument()

# Load a PDF file
document.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf
")

# Create another two PdfDocument objects
newDoc_1 = PdfDocument()
newDoc_2 = PdfDocument()

# Insert page 1 of the source file into the first document
newDoc_1.InsertPage(document, 0)

# Insert the rest pages of the source file into the second document
newDoc_2.InsertPageRange(document, 1, document.Pages.Count - 1)

# Save the three documents
newDoc_1.SaveToFile("Output/Split-1.pdf")
newDoc_2.SaveToFile("Output/Split-2.pdf")

# Dispose resources
document.Dispose()
newDoc_1.Dispose()
newDoc_2.Dispose()

 

파이썬에서 PDF에서 두 개 이상의 페이지를 한 페이지로 병합하기

PDF에서 두 페이지 이상을 한 페이지로 병합하면 내용을 압축하고 문서의 전체 페이지 수를 줄일 수 있습니다. 이를 위해 원본 문서 높이의 X배에 해당하는 페이지 높이의 새 문서를 만들면 됩니다. 여기서 X는 한 번에 병합할 페이지 수를 나타냅니다. 예를 들어 두 페이지를 하나로 병합하려는 경우 새 페이지의 높이는 각 원본 페이지 높이의 2배가 됩니다. 새 문서가 생성되면 원본 문서의 페이지를 기반으로 템플릿을 만들어 새 PDF 파일의 페이지에 순차적으로 그릴 수 있습니다.

제공된 코드 예제에서는 문서 내의 모든 두 페이지를 병합하여 결과를 별도의 PDF 파일로 저장하는 방법을 보여줍니다. “numberOfPagesToMergeEachTime"의 값을 조정하여 한 번에 원하는 페이지 수를 병합할 수 있습니다.

from spire.pdf.common import *
from spire.pdf import *

# Create a PdfDocument object
sourceDoc = PdfDocument()

# Load a PDF file
sourceDoc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf")

# Get page height and width
height = sourceDoc.Pages[0].Size.Height
width = sourceDoc.Pages[0].Size.Width

# Specify the number of pages to merge each time
numberOfPagesToMergeEachTime = 2

# Create another PdfDocument object
newDoc = PdfDocument()

# Set page size and margins
newDoc.PageSettings.Size = SizeF(width, height * numberOfPagesToMergeEachTime);
newDoc.PageSettings.Margins.All = 0.0

# Iterate through the pages in the document
for i in range(0, sourceDoc.Pages.Count, numberOfPagesToMergeEachTime):

    # Add a page to the new document
    newPage = newDoc.Pages.Add()

    for j in range(numberOfPagesToMergeEachTime):

        # Create a template based on a certain page of the source document
        template = sourceDoc.Pages[i + j].CreateTemplate()

        # Draw template on the page of the new document at the specified location
        template.Draw(newPage, 0.0, height * j)

# Save the new document
newDoc.SaveToFile("output/MergePages.pdf")

 

PDF 문서에서 두 페이지를 하나의 페이지로 병합

 

파이썬에서 PDF의 긴 페이지를 여러 페이지로 분할하기

긴 페이지를 문서 내에서 여러 개의 작은 페이지로 분할하면 가독성이 향상되고 탐색이 쉬워지며 콘텐츠 표시가 개선됩니다. 이를 위해 각 페이지의 높이를 원래 페이지와 동일한 높이로 X로 나눈 새 문서를 만들 수 있습니다. 여기서 X는 페이지를 분할하려는 숫자를 나타냅니다. 그런 다음 원본 문서의 페이지를 기반으로 템플릿을 만들어 새 PDF 파일의 페이지에 순차적으로 그립니다.

다음 코드 예제는 각 페이지를 두 페이지로 분할하고 그 결과를 다른 PDF 파일로 저장합니다. “splitEachPageByCount"의 값을 변경하여 긴 페이지를 원하는 수의 작은 페이지로 나눌 수 있습니다.

from spire.pdf.common import *
from spire.pdf import *

# Create a PdfDocument object
sourceDoc = PdfDocument()

# Load a PDF file
sourceDoc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\LongPage.pdf")

# Get page height and width
height = sourceDoc.Pages[0].Size.Height
width = sourceDoc.Pages[0].Size.Width

# Specify the number of pages to merge each time
splitEachPageByCount = 2

# Create another PdfDocument object
newDoc = PdfDocument()

# Set page size and margins
newDoc.PageSettings.Size = SizeF(width, height / splitEachPageByCount);
newDoc.PageSettings.Margins.All = 0.0

# Create a PdfTextLayout object and set the layout type to Paginate
textLayout = PdfTextLayout()
textLayout.Layout = PdfLayoutType.Paginate

# Iterate through the pages in the document
for i in range(sourceDoc.Pages.Count):

    # Add a page to the new document
    newPage = newDoc.Pages.Add()

    # Create a template based on a certain page of the source document
    template = sourceDoc.Pages[i].CreateTemplate()

    # Draw template on the page of the new document with specified layout (automatic pagination)
    template.Draw(newPage, 0.0, 0.0, textLayout)

# Save the new document
newDoc.SaveToFile("output/SplitLongPage.pdf")

 

PDF 문서에서 긴 페이지를 작은 페이지로 분할

 

무료 체험판 라이센스 받기

PDF를 병합하고 분할하는 데 사용되는 라이브러리는 PDF 문서를 로드하거나 생성할 때 10페이지로 제한됩니다. 제한을 없애려면 [여기]에서 무료 평가판 라이선스를 요청할 수 있습니다.

 

마치며

Spire.PDF for Python 라이브러리를 사용하여 Python을 사용하여 PDF 문서를 조작하는 여러 가지 방법을 살펴보았습니다. 이러한 기술을 사용하면 사용자가 PDF 문서를 효율적으로 관리하여 시간과 노력을 절약하고 최종 출력의 정확성을 높일 수 있습니다.