반응형

파이썬, PDF 파일 페이지 분리 저장, PDF 파일 병합

 

[참조] https://compmath.korea.ac.kr/python/UsefulModules.html
[참조] https://www.blog.pythonlibrary.org/2018/04/11/splitting-and-merging-pdfs-with-python/

 

글. 수알치 오상문

 

소스코드에 나오는 링크를 참조했다. 

다만, 예전 버전이다보니 모듈이 업그레이드 되면서 명칭이 바뀐 부분이 있어서 그 부분을 수정했다. 

[ PDF 파일 페이지를 분리 저장하는 예제 ]

# pdf_splitter.py
#
# python.exe -m pip install --upgrade pip  <-- 관리자 권한 파워쉘로 진입 후 실행
# pip install pypdf2
# conda install -c conda-forge pypdf2

import os
from PyPDF2 import PdfReader, PdfWriter # OLD : PdfFileReader, PdfFileWriter

def pdf_splitter(path):
    fname = os.path.splitext(os.path.basename(path))[0]
    pdf = PdfReader(path)
    
    for page_num in range(len(pdf.pages)): # OLD : range(pdf.getNumPages())
        pdf_writer = PdfWriter()          
        pdf_writer.add_page(pdf.pages[page_num]) # OLD: addPage(pdf.getPage(page_num))

        output_filename = '{}_page_{}.pdf'.format( fname, page_num+1)

        with open(output_filename, 'wb') as out:
            pdf_writer.write(out)

        print('Created: {}'.format(output_filename))

if __name__ == '__main__':
    filename = 'test.pdf'   # 읽어올 파일 
    pdf_splitter(filename)

 

[실행 결과] 분리된 페이지가 각각 PDF 파일로 저장되었다.

 

위에서 분리한 PDF 파일을 합쳐서 하나의 PDF 파일로 만드는 예제는 다음과 같다.

 

[ PDF 파일들을 합치는 예제  1]  이 예제보다는 아래 2번 예제가 깔끔하다.

# pdf_merger.py
#
# python.exe -m pip install --upgrade pip  <-- 관리자 권한 파워쉘로 진입 후 실행
# pip install pypdf2
# conda install -c conda-forge pypdf2
#
# update : 2023.03.11 sangmun oh (sualchi)  

from PyPDF2 import PdfReader, PdfWriter # OLD : PdfFileReader, PdfFileWriter

def pdf_merge(output_path, input_paths):
    pdf_writer = PdfWriter()

    for path in input_paths:
        pdf_reader = PdfReader(path) # OLD : PdfFileReader
        for page_num in range(len(pdf_reader.pages)): # OLD : range(pdf.getNumPages())
            pdf_writer.add_page(pdf_reader.pages[page_num]) # OLD: addPage(pdf.getPage(page_num)):

    with open(output_path, 'wb') as fh:
        pdf_writer.write(fh)

if __name__ == '__main__':

    paths = [
      'test_page_1.pdf',
      'test_page_2.pdf',
      'test_page_3.pdf',
      'test_page_4.pdf',
      'test_page_5.pdf',
    ]
    
    pdf_merge('pdf_merge.pdf', paths)

 

[실행 결과] 합쳐진 PDF 파일이 생성되었다.

 

[ PDF 파일들을 합치는 예제  2]  합치는 기능을 이용하므로 깔끔해졌다.

# pdf_merger2.py
#
# python.exe -m pip install --upgrade pip  <-- 관리자 권한 파워쉘로 진입 후 실행
# pip install pypdf2
# conda install -c conda-forge pypdf2
#
# update : 2023.03.11 sangmun oh (sualchi)  

import glob
from PyPDF2 import PdfMerger  # OLD : PdfFileMerger

def merger(output_path, input_paths):
    pdf_merger = PdfMerger()
    file_handles = []

    for path in input_paths:
        pdf_merger.append(path)

    with open(output_path, 'wb') as fileobj:
        pdf_merger.write(fileobj)

if __name__ == '__main__':
    paths = glob.glob('test_page_*.pdf')
    paths.sort()
    merger('pdf_merge2.pdf', paths)

 

[실행 결과] 합쳐진 PDF 파일이 생성되었다.

 

 

반응형

+ Recent posts