본문 바로가기
Python/PDF

[PDF] Merge PDF

by ds31x 2023. 6. 28.
PyMuPDF 1.22.5 (from pip)

 

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

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

 

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

 

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

 

예제코드

코드는 다음과 같다.

import argparse
import os
import fitz

def set_argparse ():
    parser = argparse.ArgumentParser(
        description = "This program can merge multiple pdf files into a single pdf file."
    )
    
    parser.add_argument('--input', '-i', nargs='*', required=True,
                        help='input0.pdf input1.pdf ...',
                        dest='inputs')
    parser.add_argument('--output', '-o', 
                        help='output.pdf',
                        default='merged_output.pdf',
                        dest='output')
    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):
    merged_pdf = fitz.open() # empty pdf document
    
    if sort_mode:
        inputs = sorted(inputs)
    
    for i in inputs:
        try:
            c = fitz.open(i)
            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())
    parser = set_argparse()
    args = parser.parse_args()
    print(f'inputs : {args.inputs}')
    print(f'output : {args.output}')
    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/entry/Python-argparse-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 

[Python] argparse 사용하기.

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

dsaint31.tistory.com

exception 처리 관련 참고 자료.

https://dsaint31.tistory.com/entry/Python-Exception-%EC%B2%98%EB%A6%AC

 

728x90

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

[PDF] Text 추출하기: PyPDF2 vs. PyMuPDF  (0) 2023.06.28