ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PDF 합치기, 파일 12개를 올리지 않고 맥에서 끝냈다
    외주개발 2026. 10. 23. 08:57
    반응형

    계약서를 받았는데 쪽마다 따로 와서 파일이 12개였다. PDF 합치기를 해야 했다.

    검색하면 변환 사이트부터 나온다. 12개를 올리고 받아 오는 건데, 계약서를 남의 서버에 올리는 게 좀 걸렸다.

    맥에 이미 있는 걸로 했다. 240KB짜리 12개가 81KB 한 개가 됐다.

    파인더에서 바로 된다

    제일 짧은 길이 여기다. 합칠 PDF를 다 고르고 오른쪽 버튼을 누르면 맨 아래에 빠른 동작이 있다.

    파인더에서 PDF 12개를 선택하고 빠른 동작 PDF 생성 메뉴를 연 화면

    PDF 생성을 누르면 끝이다. 앱을 열 것도 없고 올릴 것도 없다.

    결과는 같은 폴더에 생긴다. 이름은 첫 번째 파일 이름 뒤에 숫자가 붙는 식이라, 내 경우 스캔_1 2.pdf 가 나왔다. 이게 합친 파일인지 복제본인지 헷갈리게 생겨서 바로 이름을 바꾸는 게 낫다.

    아래에 이런 걸 적었다

    · 미리보기로 하는 법
    · 10쪽이 2쪽 앞으로 가는 이유
    · 개수가 많을 때 한 줄로
    · 합치면 용량도 준다

    필요한 데로 내려가면 됨

    쪽 순서를 손보려면 미리보기

    파인더 쪽은 순서를 못 건드린다. 끼워 넣거나 빼야 하면 미리보기로 연다.

    미리보기에서 PDF를 열었을 때 왼쪽에 비어 있는 썸네일 칸

    왼쪽 칸이 썸네일 자리다. 안 보이면 보기 메뉴에서 켜거나 ⌥⌘2.

    여기에 다른 PDF를 끌어다 놓으면 붙는다. 썸네일끼리 위아래로 끌어서 순서도 바꾼다.

    12쪽으로 합쳐진 PDF가 미리보기 썸네일에 순서대로 나열된 화면

    12쪽이 됐다. 다 됐으면 다른 이름으로 저장한다.

    그냥 저장하면 끌어다 놓은 쪽이 아니라 받은 쪽 파일이 바뀐다. 스캔_1.pdf 를 열어서 거기에 나머지를 떨어뜨렸으면 스캔_1.pdf 가 12쪽짜리가 되는 거다. 원본을 남겨야 하면 복제부터 하고 시작한다.

    10쪽이 2쪽 앞으로 간다

    파인더에서는 이 문제가 안 보인다. 파인더가 파일 이름 속 숫자를 숫자로 읽어서 1, 2, 3 순으로 세워 주기 때문이다.

    터미널은 안 그런다.

    터미널에서 스캔 파일 12개가 1 10 11 12 2 순으로 나열된 화면

    10, 11, 12가 2보다 앞에 온다. 글자로 비교해서 1 다음 글자가 0 이면 2 보다 작다고 보는 거다.

    스캔본이 9장까지면 안 걸리고 10장부터 걸린다. 그래서 처음 몇 번은 멀쩡하다가 어느 날 갑자기 순서가 섞인다.

    개수가 많으면 한 줄로

    12개는 파인더로 해도 된다. 폴더가 여러 개고 각각 수십 장이면 얘기가 다르다.

    import sys, re
    from Foundation import NSURL
    import Quartz
    
    def num(path):                      # 파일명 속 숫자를 숫자로 읽는다
        return [int(t) if t.isdigit() else t.lower()
                for t in re.split(r'(\d+)', path)]
    
    out, files = sys.argv[1], sorted(sys.argv[2:], key=num)
    merged = Quartz.PDFDocument.alloc().init()
    for f in files:
        doc = Quartz.PDFDocument.alloc().initWithURL_(NSURL.fileURLWithPath_(f))
        for i in range(doc.pageCount()):
            merged.insertPage_atIndex_(doc.pageAtIndex_(i), merged.pageCount())
    merged.writeToFile_(out)
    print(f"{len(files)}개 → {merged.pageCount()}쪽")

    pdfmerge.py 로 저장하고 이렇게 부른다.

    python3 pdfmerge.py 합친것.pdf 스캔_*.pdf

    터미널에서 pdfmerge 스크립트로 12개 파일을 12쪽으로 합친 출력

    맥 기본 파이썬에는 이걸 돌릴 모듈이 없다. /usr/bin/python3 은 3.9.6인데 Quartz가 안 들어 있어서 ModuleNotFoundError 가 난다.

    pip3 install pyobjc-framework-Quartz

    한 줄 깔고 시작하면 된다.

    같은 12개인데 결과가 다르다

    위 코드에서 num 함수가 하는 일이 그거다. 파일명을 숫자 구간으로 쪼개서 숫자로 비교한다.

    그냥 정렬했을 때와 숫자로 정렬했을 때의 쪽 순서 비교

    윗줄이 그냥 정렬한 것이고 아랫줄이 숫자로 정렬한 것이다. 같은 파일 12개로 만들었는데 안에 든 순서가 다르다.

    합치고 나면 겉으로는 똑같이 12쪽짜리 PDF다. 열어서 쪽을 넘겨보기 전에는 모른다.

    그래서 합친 다음에 첫 쪽과 마지막 쪽은 눈으로 본다. 계약서면 더 그렇다.

    합치면 용량도 준다

    12개 파일 합계 240KB와 합친 파일 81KB 비교

    12개 합쳐서 240KB였는데 합친 파일은 81KB다. 3분의 1이다.

    PDF마다 글꼴 정보 같은 게 따로 들어 있어서 그렇다. 12번 중복으로 들어가 있던 게 한 번으로 정리된다.

    스캔본처럼 안에 이미지가 든 파일은 이만큼 안 준다. 줄어드는 건 중복되는 부분이지 그림이 아니다.

    정리

    한두 번이면 파인더. 파일 고르고 오른쪽 버튼, 빠른 동작, PDF 생성.

    순서를 손봐야 하면 미리보기. ⌥⌘2로 썸네일 켜고 끌어다 놓는다. 저장 전에 원본이 바뀌는지 본다.

    개수가 많으면 스크립트. 단 파일명 정렬을 숫자로 바꿔 놓지 않으면 10쪽이 2쪽 앞으로 간다.

    그리고 올릴 필요가 없다. 공고문이면 몰라도 계약서를 변환 사이트에 넣는 건 다시 생각해볼 일이다.

    반대로 자르는 쪽은 여기에 적어놨다. 한글 파일이 섞여 있으면 이쪽이고, 사진 용량은 따로 쟀다.

    12개를 다 올렸으면 10분은 걸렸을 거다.

    반응형
소개 · 연락처 · 개인정보처리방침
운영 프리시 · 상호 앤디 · 대표 손영은 · 사업자등록번호 708-38-01407
경기도 안산시 상록구 해안로 705, 3동 1층 107호 · admin@freesi.net
Designed by Tistory.