← 모두의 툴

PDF에서 복사한 표가 다 깨지는 이유

가이드 · 2026.08.20 최종 확인

엑셀에서 만든 표를 PDF로 저장한 뒤 다시 텍스트로 뽑아보면 열이 한 줄로 뭉개지거나 숫자 순서가 뒤바뀌는 경험, 한 번쯤 해보셨을 겁니다. 이건 추출 도구가 부실해서가 아니라 PDF라는 포맷 자체가 "표"라는 개념을 모르기 때문에 생기는 구조적 현상입니다. 이 가이드는 PDF 내부에 텍스트가 실제로 어떻게 저장되는지부터 시작해서, 왜 표만 유독 깨지는지 원인을 뜯어봅니다.

1. PDF는 "문서"가 아니라 "좌표 위 그림 지시서"다

워드나 한글 파일은 문단·표·셀이라는 논리 구조를 그대로 저장합니다. 하지만 PDF는 인쇄 결과물을 그대로 재현하는 데 목적을 둔 포맷이라, 저장되는 건 "이 글자를 이 좌표(x, y)에 이 폰트·크기로 찍어라"는 명령어의 나열입니다. 문단이나 표라는 개념 자체가 PDF 내부에는 존재하지 않고, 화면에 표처럼 보이는 것은 단지 숫자와 글자 조각들이 시각적으로 격자 모양으로 배치된 결과일 뿐입니다. 즉 사람 눈에는 표로 보여도 파일 안에는 "표"라는 정보가 단 한 byte도 없습니다.

2. PDF.js는 어떤 순서로 텍스트를 꺼내는가

브라우저에서 PDF를 직접 파싱하는 표준 라이브러리인 PDF.js는 getTextContent()라는 함수로 페이지의 텍스트 조각(item) 목록을 반환합니다. 이 목록의 순서는 좌표를 기준으로 재정렬된 "읽는 순서"가 아니라, PDF 파일 내부에 그 글자를 그리라는 명령이 기록된 순서 그대로입니다. 이 순서는 PDF를 만든 프로그램이 어떤 순서로 그리기 명령을 내보냈는지에 달려 있어서, 표를 왼쪽 위부터 오른쪽 아래로 순서대로 그린 PDF도 있고, 열 단위로 먼저 다 그린 뒤 다음 열로 넘어가는 PDF도 있습니다. 모두의 툴의 PDF → TXT 변환 도구도 이 원리를 그대로 따라, 각 텍스트 조각을 좌표로 재배열하지 않고 getTextContent()가 돌려주는 순서대로 이어 붙이며, 줄바꿈 신호(hasEOL)가 있을 때만 개행을 추가합니다. 좌표 정렬 로직이 아예 없다는 뜻이라, 표의 그리기 순서가 시각적 읽기 순서와 다른 PDF일수록 추출 결과가 크게 어긋납니다.

3. 표에서 유독 심하게 깨지는 이유

일반 본문 문단은 대부분 위에서 아래로, 왼쪽에서 오른쪽으로 순서대로 그려지기 때문에 그리기 순서와 읽기 순서가 거의 일치합니다. 그래서 본문은 추출해도 크게 어색하지 않습니다. 하지만 표는 다릅니다. PDF 생성 엔진에 따라 표를 행 우선(1행 전체 → 2행 전체)으로 그리기도 하고, 열 우선(1열 전체 → 2열 전체)으로 그리기도 하며, 셀 안의 정렬(가운데 정렬, 오른쪽 정렬)을 구현하기 위해 빈 공간을 별도 좌표로 건너뛰어 그리는 경우도 흔합니다. 이 순서가 뒤섞이면 추출된 텍스트에서는 "1행 1열, 2행 1열, 3행 1열, 1행 2열..." 같은 식으로 열 단위가 행 단위처럼 보이거나, 반대로 여러 행의 값이 한 줄에 이어 붙어버립니다. 좌표 정보 자체는 item.transform 값 안에 남아있지만, 그 좌표를 읽어 행·열 격자로 재구성하는 별도의 로직 없이는 원래 표 구조를 복원할 수 없습니다.

예시: 2행 2열 표(왼쪽 위부터 "이름 / 점수 / 홍길동 / 90")를 PDF가 열 우선으로 저장했다면, 좌표 정렬 없이 그대로 추출한 텍스트는 아래와 같이 뒤섞입니다.
원본 표(눈에 보이는 모습)좌표 순서대로 추출한 결과
이름 | 점수
홍길동 | 90
이름 홍길동 점수 90
"이름"과 "홍길동"이 한 열이었다는 정보, "이름"과 "점수"가 한 행이었다는 정보가 모두 사라지고 그리기 순서만 남는 것입니다.

4. 그래서 어떻게 대응해야 하나

표가 포함된 PDF에서 데이터를 정확히 뽑아야 한다면 다음 우선순위로 접근하는 것이 현실적입니다. 첫째, 원본이 엑셀이나 워드였다면 PDF로 변환하기 전 원본 파일에서 직접 데이터를 가져오는 것이 가장 확실합니다. 둘째, 원본이 없다면 좌표 기반 표 재구성 로직(각 텍스트 조각의 y좌표로 행을 묶고 x좌표로 열을 정렬하는 알고리즘)을 갖춘 전용 표 추출 도구를 사용해야 합니다. 셋째, 텍스트 자체가 아예 없는 스캔 PDF라면 좌표 문제 이전에 문자 정보 자체가 없으므로 PDF OCR 도구로 먼저 문자 인식을 거쳐야 합니다. 표가 아닌 일반 본문만 필요하다면 PDF → TXT 변환 도구로 충분히 실용적인 결과를 얻을 수 있고, 페이지 수나 대략적인 분량만 확인하려면 PDF 페이지 수 계산기가 더 빠릅니다.

5. PDF 생성 방식에 따라 결과가 달라진다

같은 표 데이터라도 어떤 프로그램으로 PDF를 만들었는지에 따라 추출 결과 품질이 크게 달라집니다. 워드나 한글의 "PDF로 저장" 기능은 보통 표를 행 단위로 순서대로 그려서 비교적 덜 깨지지만, 웹페이지를 인쇄해서 만든 PDF나 복잡한 레이아웃 엔진을 쓰는 리포팅 툴(BI 도구, 회계 프로그램 등)은 렌더링 최적화를 위해 그리기 순서를 임의로 바꾸는 경우가 많아 훨씬 심하게 뒤섞입니다. 같은 도구에서 나온 PDF끼리는 규칙이 일정한 경우가 많으니, 반복적으로 같은 양식의 표를 추출해야 한다면 몇 개 샘플로 깨지는 패턴을 먼저 파악해두면 수작업 정리 시간을 줄일 수 있습니다.

자주 묻는 질문

Q. 표가 깨지는 게 도구의 버그인가요?

아닙니다. PDF 포맷 자체에 표라는 논리 구조가 없고, 텍스트가 좌표 기준 그리기 명령으로만 저장되기 때문에 생기는 구조적 한계입니다. PDF.js를 쓰는 대부분의 무료 추출 도구가 동일한 한계를 가집니다.

Q. 좌표값(x, y)을 이용하면 표를 완벽히 복원할 수 있나요?

상당 부분 개선은 가능하지만 완벽하지는 않습니다. 병합된 셀, 줄바꿈이 포함된 셀, 폰트 크기가 섞인 표 등은 좌표만으로 행·열 경계를 판단하기 애매한 경우가 많아 여전히 수작업 보정이 필요할 수 있습니다.

Q. 스캔한 종이 표는 왜 아예 추출이 안 되나요?

스캔 PDF는 종이를 사진 찍어 이미지로만 담은 파일이라 애초에 "글자"라는 정보 자체가 없고 픽셀만 있습니다. 좌표 순서 문제 이전 단계로, OCR(광학 문자 인식)을 거쳐 문자 데이터를 새로 생성해야 추출이 가능합니다.

Q. 표가 깨지지 않게 PDF를 만드는 방법이 있나요?

완전히 막을 수는 없지만, 워드·한글·엑셀 등 표 구조를 명시적으로 이해하는 프로그램에서 직접 PDF로 내보내면 대체로 행 단위 순서로 그려져 추출 결과가 비교적 정돈됩니다. 웹페이지 인쇄나 이미지 캡처를 PDF로 감싸는 방식은 피하는 것이 좋습니다.