2 PDF에서 일부 페이지만 각각 발췌해서 머지하기

2020-05-28   //   alexken작성   //   기술  //  No Comments

업무상 서명해서 스캔한 PDF와 Office에서 PDF로 변환한 두 PDF 문서를 머지할 일이 잦아
배운적은 없지만 python으로 야매코딩.

macOS의 미리보기에서 필요한 페이지만 드래그해서 머지하는게 가장 깔끔한 방법이지만,
Windows만 있는 환경에서 할 필요도 있어서 만듬

import sys
from PyPDF2 import PdfFileWriter, PdfFileReader

def usage():
    print("#" * 100)
    print('''
[PDFCAT] by alexken@TTA
A.pdf [a~b] + B.pdf [c~d] -> C.pdf

Usage:
    $ python {} A.pdf a b B.pdf c d
    '''
.format(sys.argv[0]))
    print("#" * 100)

def merge_pdf(pdf_a, pdf_b):
    try:
        in_pdf_a = PdfFileReader(pdf_a["name"])
        in_pdf_b = PdfFileReader(pdf_b["name"])
        out_c = PdfFileWriter()
       
        if pdf_a["from"] == 0:
            pdf_a["from"] = 1
        if pdf_a["to"] == 0:
            pdf_a["to"] = in_pdf_a.getNumPages()
        if pdf_b["from"] == 0:
            pdf_b["from"] = 1
        if pdf_b["to"] == 0:
            pdf_b["to"] = in_pdf_b.getNumPages()

        for i in range(pdf_a["from"]-1, pdf_a["to"]):
            print( "{} page:{}".format(pdf_a["name"], i+1) )
            out_c.addPage(in_pdf_a.getPage(i))

        print( "+" )
 
        for i in range(pdf_b["from"]-1, pdf_b["to"]):  
            print( "{} page:{}".format(pdf_b["name"], i+1) )
            out_c.addPage(in_pdf_b.getPage(i))

        with open("C.pdf", "wb") as outputStream:
            out_c.write(outputStream)
    except:
        print(">>>> Fail to Merge")

if __name__ == "__main__":
    if len(sys.argv) == 7:
        merge_pdf({"name":sys.argv[1],"from":int(sys.argv[2]),"to":int(sys.argv[3])},
                  {"name":sys.argv[4],"from":int(sys.argv[5]),"to":int(sys.argv[6])})
    else:
        usage()