본문 바로가기
목차
Python/PDF

[PDF] Merge PDF

by ds31x 2023. 6. 28.
728x90
반응형

PyMuPDF 1.22.5 (from pip)

 

PyMuPDF를 이용하여, 여러 PDF를 그냥 합쳐주는 간단한 프로그램을 만들어 봤다.

(문서 합쳐서 제출하는 일이 잦았나보다. 예제 생각하다가 이게 떠오르다니... --;;)

 

참고로, fitz가 PyMuPDF 패키지의 import alias임
— PDF 페이지를 열고, 병합하고, 저장하는 등의 작업을 수행

 

대부분의 PDF를 다루는 패키들과 마찬가지로, 새로운 pdf 파일에 대한 객체를 empty로 먼저 만든 후, 각 pdf들을 읽어들여 이들을 page로 추가해주면 되는 방식이다. 

 

추가적으로 argparse에 대한 예제로 쓸만할 거 같다. 


예제코드

코드는 다음과 같다.

import argparse
import os
import fitz # PyMuPDF 모듈: PDF 파일을 열고, 페이지를 조작하고, 병합/추출/편집 등을 지원

def set_argparse ():
    parser = argparse.ArgumentParser(
        description = "This program can merge multiple pdf files into a single pdf file."
    )
    
    # --input 또는 -i 옵션: 여러 PDF 입력 파일 지정 (필수)
    parser.add_argument('--input', '-i', nargs='*', required=True,
                        help='input0.pdf input1.pdf ...',
                        dest='inputs')
    # --output 또는 -o 옵션: 병합 결과 파일 이름 (기본값 = merged_output.pdf)
    parser.add_argument('--output', '-o', 
                        help='output.pdf',
                        default='merged_output.pdf',
                        dest='output')
    # --sort 또는 -s 옵션: 입력 파일 이름을 알파벳순으로 정렬
    parser.add_argument('--sort','-s', action='store_true',
                        help="sort the input files by the alphabet order")
    return parser

def merge_pdfs(inputs, output, sort_mode):
    # 빈 PDF 객체 생성
    # fitz.open()을 인자 없이 호출하면 '새로운 빈 PDF 문서'를 생성한다
    merged_pdf = fitz.open() # empty pdf document
    
    if sort_mode:
        inputs = sorted(inputs)
    
    for i in inputs:
        try:
            # 기존 PDF 파일 열기
            # fitz.open(filename) : 해당 파일을 PDF 객체
            c = fitz.open(i)
            
            # 다른 PDF 문서(c)의 모든 페이지를 현재 PDF(merged_pdf)에 삽입
            merged_pdf.insert_pdf(c)
            c.close()
        except Exception as e:
            print(f"Error: It can't processing [{i}]")
    
    merged_pdf.save(output)
    merged_pdf.close()

if __name__ == '__main__':
    # 현재 작업 디렉토리 출력
    print(os.getcwd())
    # argparse 파서 생성 및 명령줄 인자 파싱
    parser = set_argparse()
    args = parser.parse_args()
    print(f'inputs : {args.inputs}')
    print(f'output : {args.output}')
    # PDF 병합 함수 실행
    merge_pdfs(args.inputs,args.output,args.sort)

참고자료

PyMuPDF 관련 참고 자료.

https://pymupdf.readthedocs.io/en/latest/tutorial.html#tutorial

 

Tutorial - PyMuPDF 1.22.5 documentation

Previous The Basics

pymupdf.readthedocs.io

argparse 관련 참고 자료.

https://dsaint31.tistory.com/477

 

[Python] argparse 모듈 사용하기.

argparse 모듈Python에서 기본적으로 제공하는 명령어 인자 파서 모듈이다. command line inerface 으로 프로그램을 만들 때 기본적으로 필요하다.linux 쪽 경험이 풍부한 이들에겐 getopt가 보다 익숙하지만

dsaint31.tistory.com

 

exception 처리 관련 참고 자료.

https://dsaint31.tistory.com/526

 

[Python] Exception 처리

1. Exception 발생 시 기본 동작Python에서 무엇인가가 잘못된 경우, python interpreter는 exception을 발생시킴.Exception : 동작을 중단시키는 에러를 가르킴.Exception handling : Exception 처리라고도 불리며, 발생

dsaint31.tistory.com

728x90

'Python > PDF' 카테고리의 다른 글

ReportLab-Python에서 PDF문서 만들기:  (0) 2025.09.19
[PDF] Text 추출하기: PyPDF2 vs. PyMuPDF  (0) 2023.06.28