PDF 비교·도면 겹쳐보기
두 PDF의 글자·그림 차이를 비교하고 도면 겹쳐보기
두 PDF의 글자·그림 차이를 비교하고 도면 겹쳐보기
파일은 이 브라우저에서만 처리됩니다. 서버에 업로드하지 않습니다.
두 PDF의 추가·삭제 영역을 페이지별로 시각 비교
암호가 걸린 PDF입니다.
다른 도구로 이어서 편집
처리하고 있습니다…
모든 처리는 이 브라우저 안에서만 이루어집니다. 파일이 서버로 전송되지 않습니다.
다운로드할 파일이 준비됐습니다
이 결과로 이어서 편집
페이지 미리보기 열기
삭제된 텍스트 추가된 텍스트 그림·배치 변화
대응하는 원본 페이지 없음 (추가된 페이지)
대응하는 수정본 페이지 없음 (삭제된 페이지)
변경 목록
설정을 바꾸면 이전 결과는 숨겨집니다. 다시 만들어 최신 설정을 저장하세요.
암호화된 PDF는 먼저 암호를 해제하세요. 파일 전체를 새로 쓰므로 기존 전자서명은 무효가 됩니다. 원본을 보관하고 결과를 확인하세요.
불러오는 중…
처리 중…
0.0
멈춘 것이 아닙니다. 계산이 끝나면 결과가 표시됩니다.
PDF 비교·도면 겹쳐보기 소개
PDF 두 개가 「어디가 다른지」 묻는 방법은 두 가지입니다. 글자를 뽑아 단어끼리 맞춰 보는 텍스트 비교와, 두 페이지를 그림으로 그려 픽셀끼리 겹쳐 보는 시각 비교입니다. 텍스트 비교는 문장 수정을 정확히 잡지만 도장·서명·도면 선처럼 글자가 아닌 변화는 보지 못하고, 픽셀 비교는 무엇이든 잡지만 줄이 한 칸 밀리기만 해도 페이지 절반을 「바뀜」으로 칠합니다.
이 도구의 기본 탭은 둘을 함께 씁니다. 먼저 문서 전체를 단어 단위로 비교해 지워진 단어는 원본에 빨간 상자, 새로 생긴 단어는 수정본에 초록 상자로 표시하고, 그다음 짝지어진 페이지를 같은 크기로 렌더링해 텍스트 비교가 이미 표시한 곳을 뺀 나머지 픽셀 변화를 주황 점선으로 표시합니다. 이 밖에 도면용 빨강/시안 겹쳐 보기 탭과, 쪽수·페이지 크기만 빠르게 확인하는 탭이 있습니다.
텍스트 비교: 페이지가 아니라 문서 전체를 한 줄로 본다
두 PDF에서 PDF.js로 글자를 뽑아 단어 목록을 만든 뒤, 유닉스 diff와 같은 계열인 Myers 알고리즘으로 최소 편집을 찾습니다. 페이지별로 비교하지 않고 문서 전체를 이어 붙여 비교하기 때문에, 2쪽에 문단 하나가 끼어들어 뒤쪽 내용이 한 쪽씩 밀려도 밀린 부분을 모두 변경으로 잡지 않습니다. 공통 단어가 가장 많은 페이지끼리 짝을 지어 나란히 보여 줍니다.
단어는 비교 전에 유니코드 NFKC로 정규화됩니다. 전각 「ABC」와 반각 「ABC」, 합자 「fi」와 「fi」가 같은 단어로 취급됩니다. 대소문자 무시, 문장부호 무시 옵션을 켜면 「계약서.」와 「계약서」도 같다고 봅니다. 변경이 아주 많으면(편집 거리 4,000 초과) 계산을 멈추고 가운데 전체를 한 번의 삭제·추가로 보고하니, 완전히 다른 문서끼리는 의미 있는 결과가 나오지 않습니다.
텍스트 비교가 틀리게 말하는 경우
- 줄 끝 하이픈: 조판이 바뀌어 「docu-」「ment」가 「document」로 합쳐지면 단어가 바뀐 것으로 나옵니다. 한국어 문서의 띄어쓰기 수정도 단어 경계가 바뀌어 변경으로 잡힙니다.
- 읽는 순서: 다단 편집이나 글상자가 많은 문서는 PDF 안의 글자 저장 순서가 버전마다 달라, 내용이 같아도 삭제+추가 쌍이 생길 수 있습니다.
- 보이지 않는 차이: 글자는 같고 색·굵기·크기만 바뀐 경우는 텍스트 비교에 나오지 않습니다(렌더링 결과가 달라지면 픽셀 비교가 잡습니다).
- 스캔본: 글자 층이 없으면 텍스트 비교는 할 일이 없고 픽셀 비교만 남습니다.
픽셀 비교의 오탐: 밀린 줄과 다시 내보낸 PDF
짝지은 두 페이지를 가로 900px로 렌더링하고, 한 픽셀의 RGB 채널 차이 중 가장 큰 값이 문턱을 넘으면 「다름」으로 셉니다. 민감도 낮음·보통·높음의 문턱은 110·64·32(0~255 기준)이고, 10×10px 칸 안에 다른 픽셀이 각각 12·5·2개 이상이면 그 칸을 표시하고 붙어 있는 칸을 한 상자로 묶습니다. A4라면 한 칸이 약 2.3mm입니다.
가장 흔한 오탐은 밀린 줄입니다. 3번째 줄에 단어 몇 개가 추가돼 문단이 한 줄 길어지면, 그 아래 모든 줄이 몇 픽셀씩 내려가서 글자는 같아도 픽셀은 전부 다릅니다. 그래서 텍스트 비교가 표시한 상자와 겹치는 픽셀 상자를 지우고, 텍스트 비교에서 그대로인 것으로 짝지어졌는데 위치만 바뀐 단어의 영역(옛 위치와 새 위치 모두)은 픽셀 비교에서 뺍니다. 다만 글자가 아닌 것, 예를 들어 표 선·밑줄·그림이 함께 밀렸다면 그 부분은 주황 상자로 남으니 초록·빨강 상자를 먼저 보세요.
같은 원본을 다른 프로그램으로 다시 PDF로 만든 경우도 글꼴 힌팅·안티에일리어싱 차이로 글자 가장자리가 조금씩 다릅니다. 이런 차이는 대개 문턱 64 아래라 보통 민감도에서 걸러지지만, 높음에서는 페이지 전체가 주황으로 칠해질 수 있습니다. 반대로 도장이 빠졌는지만 보고 싶다면 낮음이 편합니다.
겹쳐 보기 탭과 쪽수·크기 탭
겹쳐 보기 탭은 도면 개정 확인에 쓰는 오래된 방법을 옮긴 것입니다. 원본의 선은 빨강, 수정본의 선은 시안으로 물들여 겹치면 둘 다 있는 선은 어둡게, 한쪽에만 있는 선은 그 색으로 도드라집니다. 페이지는 순서(1쪽끼리, 2쪽끼리)로 짝을 짓고 크기가 2pt 넘게 다르면 겹치지 않고 목록으로 알립니다. 수정본에서 도면 전체가 몇 mm 옮겨졌다면 모든 선이 빨강·시안 두 줄로 보이는데, 이 탭에는 위치를 맞추는 기능이 없습니다.
쪽수·크기 탭은 내용을 전혀 읽지 않고 쪽수와 각 쪽의 용지 크기(MediaBox), 보이는 영역(CropBox), 회전(/Rotate)만 비교합니다. 몇 초 만에 「쪽이 늘었나, 용지나 자르기·회전이 바뀌었나」를 확인하는 용도입니다. 쪽 순서가 바뀐 것은 감지하지 못합니다. 순번 기준이라 중간에 한 쪽이 끼어들면 「끝에 한 쪽 추가」로 보이고, 그 뒤로 크기가 다른 쪽이 있으면 크기 변경이 여러 건 나옵니다.
예시
계약서 수정본에서 조항 하나가 추가된 경우
- 입력
원본 12쪽, 수정본 13쪽. 4쪽에 「제7조의2」 한 문단(약 60단어) 추가, 9쪽 금액 「3,000만」→「3,500만」- 결과
변경 2건: 수정본 4쪽 추가 약 60단어, 9쪽 「3,000만」 삭제·「3,500만」 추가
뒤쪽이 한 쪽씩 밀렸지만 문서 전체를 이어 비교하므로 5~13쪽이 통째로 바뀐 것으로 나오지 않습니다. 4쪽 추가 문단 아래 줄들도 글자가 그대로라 픽셀 비교에서 빠지고, 함께 밀린 표 선이나 그림만 주황 상자로 남을 수 있습니다.
민감도에 따른 픽셀 문턱
- 입력
같은 쪽에서 한 픽셀이 원본 RGB(40,40,40), 수정본 RGB(90,90,90)- 결과
차이 50: 보통(64)·낮음(110)에서는 무시, 높음(32)에서는 다른 픽셀
회색 글자가 조금 옅어진 정도는 보통 민감도에서 표시되지 않습니다. 그 칸에 이런 픽셀이 2개 이상 모이면 높음에서 상자가 생깁니다.
사용 방법
- 원본과 수정본 PDF를 넣습니다(바꾸기 버튼으로 순서를 뒤집을 수 있습니다).
- 대소문자·문장부호 무시와 픽셀 민감도를 정하고 비교합니다.
- 변경 목록을 눌러 해당 페이지를 확인하고, 비교 보고서 PDF와 텍스트 요약을 저장합니다.
자주 묻는 질문
줄만 밀렸는데 주황 상자가 생겨요.
글자가 그대로인 채 밀린 줄은 픽셀 비교에서 빼므로, 남은 주황 상자는 대개 함께 밀린 표 선·밑줄·그림입니다. 초록·빨강 상자가 실제 문장 변경입니다. 신경 쓰이면 민감도를 낮추거나 끌 수 있습니다.
스캔한 두 문서도 비교되나요?
텍스트 비교는 되지 않고 픽셀 비교만 동작합니다. 스캔 위치가 조금만 달라도 전체가 다르게 나오므로 결과가 거칠 수 있습니다.
글자 색만 바뀐 것도 찾나요?
텍스트 비교에는 나오지 않지만, 색 차이가 문턱을 넘으면 픽셀 비교가 주황 상자로 표시합니다.
쪽수·크기 탭에서 순서 변경도 알 수 있나요?
아니요. 쪽수와 용지 크기만 봅니다. 순서나 내용이 바뀌었는지는 기본 비교 탭을 쓰세요.
출처
- Eugene W. Myers, An O(ND) Difference Algorithm and Its Variations (Algorithmica, 1986)
- Unicode Standard Annex #15 — Unicode Normalization Forms (NFKC)
- PDF.js — getTextContent API
기준일: