
SOFTMOA PROJECTS
SealPDF — 맥에서 PDF에 도장 찍는 날인·간인·위변조 방지 앱
구축 배경과 구현 범위를 확인해보세요.
Contents

SealPDF는 맥에서 PDF 계약서에 도장과 서명을 찍는 가볍고 쉬운 앱입니다. 도장 하나 찍으려고 출력하고 다시 스캔하던 일을 PDF 안에서 끝내도록, 날인과 간인, 보호, 변조 확인까지 한 앱에 담았습니다. 기획, 디자인, 개발은 소프트모아가 맡았고 Mac App Store로 배포합니다.
프로젝트 개요
계약서 한 장에 도장을 찍으려고 출력과 스캔을 되풀이하는 불편에서 시작한 소프트모아 자체 제품입니다. 원본 PDF는 덮어쓰지 않고, 찍은 도장과 편집 내용은 작업으로 저장해 두었다가 내보낼 때 새 파일(날인본)로 만듭니다. 날인본에는 워터마크, 수정 잠금, 복사 금지, 전자서명을 걸 수 있고, 내보낸 파일의 지문을 남겨 두어 나중에 받은 파일이 발급한 그대로인지 확인할 수 있습니다. Word, Excel, PowerPoint 문서나 그림도 PDF로 바꿔 열어 바로 날인할 수 있습니다.
주요 기능
실제 크기 그대로 찍는 도장과 서명
도장 이미지를 한 번 등록해 두고 누르는 자리에 바로 찍습니다. 스캔 해상도로 도장의 실제 크기를 재서 18mm 인감은 18mm로 찍히고, 크기를 알 수 없는 이미지는 법인 인감 기준 크기(지름 18mm)로 맞춥니다. 서명은 크기를 자유롭게 조절하고, 회전과 인주 농도도 바꿀 수 있습니다.
종이처럼 접어서 찍는 간인
앞장의 아래쪽 끝(세로 접기)이나 오른쪽 끝(가로 접기)을 접어 다음 장에 겹치고, 접힌 선에 걸쳐 찍습니다. 접는 폭을 mm 단위로 정하면 접는 위치가 그 자리로 바로 옮겨지고, 접은 모양 그대로 미리 보면서 찍습니다. 펴면 두 장에 도장이 반씩 남고, 경계선 위 위치도 조절할 수 있습니다.

모든 쪽 경계에 한 번에 찍는 간인
쪽을 가로나 세로로 이어 붙여 보여 주고, 모든 쪽 경계에 도장을 정확히 반씩 걸쳐 한 번에 찍습니다. 원하는 경계만 눌러 찍거나, 찍은 간인을 경계를 따라 옮길 수도 있습니다. 회전된 쪽에서도 도장을 똑바로 세웁니다.

도장 사진의 배경 자동 제거
스캔하거나 찍은 도장 사진에서 종이 색을 추정해 배경을 지우고, 인주 색을 기준으로 도장에 겹친 검은 글자까지 걸러 도장만 투명 배경으로 남깁니다. 진한 잉크 기준, 피사체 자동 분리, 원본 그대로 중에서 고를 수 있고, 잰 크기가 인감 규격 범위 안인지 바로 보여 줍니다.

글자, 형광펜, 도형, 메모 편집
글자 상자, 형광펜, 그리기, 사각형과 원, 선과 화살표, 메모, 이미지 삽입을 지원합니다. 추가한 글자는 PDF 텍스트 주석으로 저장해 다시 열어도 고칠 수 있고, 원래 PDF에 들어 있는 글자는 바꾸지 않습니다.

보내기 전 보호: 워터마크, 수정 잠금, 복사 금지, 전자서명
날인본을 내보낼 때 도장, 서명, 삽입 이미지, 워터마크를 페이지 내용에 합쳐 따로 옮기거나 지울 수 없게 합니다. 수정 잠금, 내용 복사 금지, 열기 암호를 걸 수 있고, 더 강한 보호가 필요하면 페이지를 이미지로 고정합니다. 표준 PDF 전자서명을 넣으면 서명 뒤에 파일이 바뀌었을 때 Acrobat이나 미리보기 같은 PDF 앱에 표시됩니다.

변조 확인과 발급 기록
내보낸 날인본의 SHA-256 지문과 파일 이름, 발급 시각을 기록해 두고, 나중에 받은 파일을 끌어다 놓으면 내가 발급한 그대로인지 바로 알려 줍니다.

다른 형식 가져오기와 빈 문서
Word(docx, doc), Excel(xlsx), PowerPoint(pptx), 텍스트, CSV, HTML, 그림을 PDF로 바꿔 열고 그대로 날인합니다. 시작 창이나 파일 메뉴에서 고르거나, Finder의 "다음으로 열기"에서 SealPDF를 고르면 됩니다. 원하는 용지와 쪽 수로 빈 문서도 만듭니다. 바꾼 문서는 글꼴이나 배치가 원본과 조금 다를 수 있어, 원본 그대로가 필요하면 문서를 만든 프로그램에서 PDF로 저장해 열도록 안내합니다.

다른 형식으로 저장
보고 있는 문서를 일반 PDF나 PNG, JPEG, TIFF, HEIC 그림(쪽마다 한 장)으로 저장합니다. 보안 처리가 없는 사본이라는 경고를 함께 보여 주고, 계약서처럼 위변조를 막아야 하는 문서는 한 번에 보호된 내보내기로 바꿀 수 있습니다.

기술 구성
- Swift 6.4, AppKit 문서 구조(NSDocument), macOS 26 이상
- PDFKit, Core Graphics, Core Image, Vision(피사체 분리). 외부 라이브러리 없이 시스템 프레임워크만 사용
- PDF 전자서명: 증분 저장, ByteRange, CMS 분리 서명(adbe.pkcs7.detached)과 X.509 자체 서명 인증서를 DER로 직접 구성하고 서명 연산만 Security 프레임워크에 맡김
- PKCS#12(.p12) 인증서 가져오기, 개인 키와 암호는 키체인에 보관
- 문서 가져오기: docx, xlsx, pptx를 Compression 프레임워크의 zip 해제와 XML 해석으로 직접 읽어 PDF로 그림(스타일, 번호, 표, 슬라이드 배치 반영). 외부 라이브러리 없음
- App Sandbox, Finder "다음으로 열기" 등록, 한국어와 영어 현지화, 시스템 라이트·다크 모드
- 핵심 로직 단위 테스트(swift-testing) 260개
구현 포인트
- 도장 실제 크기: 이미지 캔버스가 아니라 투명하지 않은 도장 영역과 해상도로 계산하고, 법인 인감(상업등기규칙)과 개인 인감(인감증명법 시행령) 규격 범위를 판정
- 간인 위치 계산: 쪽 회전과 잘림 영역을 반영한 화면 좌표에서 경계와 접힌 선을 정하고 페이지 좌표로 되돌려, 두 쪽에 반쪽씩 정확히 나눔
- 선명한 화면: 도장과 편집 항목을 주석 비트맵이 아니라 페이지가 직접 그려, 확대해도 흐려지지 않고 인쇄에도 그대로 들어감
- 수정 잠금(암호화)과 전자서명을 함께 쓰는 경우의 증분 저장을 별도 처리하고 poppler pdfsig로 서명 유효, 서명 뒤 변조 검출을 검증
- 원본 보존: 원본 PDF는 읽기 전용으로 열고, 하던 작업은 원본 지문별로 따로 저장해 같은 파일을 다시 열면 이어서 작업
- 받은 파일 방어: 가져올 때 zip 항목의 실제 길이와 CRC를 확인하고 용량 상한을 두며, 저장은 같은 볼륨의 임시 위치를 거친 원자적 교체로 실패해도 원래 파일을 되돌림
