Python으로 PDF 페이지 수 추출, 페이지 추출, 합치기

0pt3ryx·2020년 11월 21일
0

0. 사용 라이브러리: PyPDF2

1. PDF 페이지 수 추출

PDF 파일의 페이지 수를 출력하는 코드이다. 별 다른 설명이 필요없을 정도로 간단하다.

def get_pdf_num_of_pages(pdf_file_path):
    with open(pdf_file_path, 'rb') as src_pdf_file:
        pdf_reader = PyPDF2.PdfFileReader(src_pdf_file)
        num_of_pages = pdf_reader.numPages
    return num_of_pages

2. PDF 페이지 추출

PDF 파일에서 특정 페이지를 추출하여 추출한 페이지만 외부 파일로 저장하는 코드이다. getPage() 메소드에 정수값을 전달하여 특정 페이지를 가져올 수 있는데 페이지 인덱스는 1이 아닌 0부터 시작한다. 즉, 첫 번째 페이지를 추출하려면 정수 1을 전달하는 것이 아니라 0을 전달해야 한다.
하나 주의해야할 것은 source PDF 파일에 대한 read stream을 끊기 전에 output PDF 파일을 write해야 한다는 것이다.

def extract_pdf_pages(pdf_file_path, pdf_out_file_path, page_list_to_extract):
    with open(pdf_file_path, 'rb') as src_pdf_file:
        pdf_reader = PyPDF2.PdfFileReader(src_pdf_file)
        pdf_writer = PyPDF2.PdfFileWriter()
        # PDF 첫 번째 페이지를 추출하려면 정수 1이 아닌 0을 전달해야 한다.
        for page_number in page_list_to_extract:
            pdf_writer.addPage(pdf_reader.getPage(page_number))

        # Source PDF 파일의 스트림을 끊기 전에 output PDF 파일을 write해야 한다.
        with open(pdf_out_file_path, 'wb') as out_file:
            pdf_writer.write(out_file)

3. PDF 합치기

PDF 페이지 수를 가져오는 코드와 PDF 페이지 추출하는 코드를 응용하여 여러 개의 PDF 파일을 합칠 수도 있다. 여러 PDF 파일을 단순히 합치는 코드는 다음과 같이 쓸 수 있다.

def merge_pdf_files(pdf_file_path_list, pdf_out_file_path):
    pdf_writer = PyPDF2.PdfFileWriter()
    for pdf_file_path in pdf_file_path_list:
        with open(pdf_file_path, 'rb') as src_pdf_file:
            pdf_reader = PyPDF2.PdfFileReader(src_pdf_file)

            for page_number in range(pdf_reader.numPages):
                pdf_writer.addPage(pdf_reader.getPage(page_number))

            # Loop를 여러번 돌면 output PDF 파일이 overwritten 된다.
            with open(pdf_out_file_path, 'wb') as out_file:
                pdf_writer.write(out_file)

0개의 댓글