PDF의 정체와 텍스트 복사가 늘 되지는 않는 이유

PDF가 단어 대신 좌표 위의 글리프를 어떻게 저장하는지, 스캔본과 진짜 텍스트를 어떻게 구별하는지, 그리고 병합하거나 분할할 때 글꼴과 페이지 상자와 회전 플래그와 암호가 어떻게 작용하는지 설명합니다.

PDF는 그리기 명령의 목록입니다. 이 글리프를 이 좌표에, 이 글꼴로, 이 크기로 놓고, 그다음 여기로 이동해서 다음 글리프를 그리라고 지시합니다. 이것이 제목이라거나, 이것이 문단이라거나, 이 단이 저 단보다 앞선다는 말은 하지 않습니다. 뷰어가 페이지 구조에 대해 알고 있는 것처럼 보이는 모든 것은 나중에 자국들 사이의 간격을 재서 재구성한 결과이며, PDF에서 답답한 일들 대부분이 여기에서 설명됩니다.

PDF가 실제로 저장하는 것

페이지의 텍스트는 콘텐츠 스트림 안에, 짧은 연산자들의 나열로 들어 있습니다.

BT
  /F1 11 Tf
  72 708 Td
  [(In) -18 (v) 22 (oice)] TJ
  180 0 Td
  (2026-08-25) Tj
ET

Tf는 글꼴과 크기를 고르고, Td는 텍스트 커서를 옮기며, TJ는 글리프들 사이에 커닝 오프셋을 두면서 글리프를 그립니다. 없는 것에 주목하십시오. 공백 문자가 어디에도 없습니다. 날짜 앞의 간격은 180단위만큼의 이동이며, 추출기는 그런 이동 하나하나가 공백인지, 탭인지, 단 경계인지, 아니면 아무것도 아닌지를 판단해야 합니다. 임계값이 조금만 어긋나도 Invoice2026-08-25I n v o i c e 같은 결과가 나옵니다.

읽기 순서에도 같은 문제가 있습니다. 글리프는 그려진 순서대로 나옵니다. 2단 레이아웃은 흔히 왼쪽 단을 아래로 다 그린 다음 오른쪽 단을 그리는데, 그런 경우에는 복사가 잘 됩니다. 생성기가 종이를 가로질러 한 줄씩 그렸다면 복사 결과는 두 단이 뒤엉킨 헛소리가 됩니다.

텍스트 PDF와 스캔본 구별하기

스캔한 문서에는 텍스트가 전혀 없습니다. PDF로 감싼 페이지 사진일 뿐입니다. 광학 문자 인식은 그 그림 위에 보이지 않는 텍스트 층을 덧씌워 파일을 검색 가능하게 만들지만, 그 층은 추측이므로 오류가 검색 실패와 뒤죽박죽인 복사 결과로 드러납니다.

확인 방법텍스트 PDF스캔한 PDF
단어 선택해 보기글자 단위로 강조됩니다아무것도 선택되지 않거나 페이지 전체가 선택됩니다
400%로 확대글자가 또렷하게 유지됩니다글자가 흐려지거나 뭉툭해집니다
페이지당 크기대개 20에서 100 KB대개 300 KB에서 수 MB
PDF 이미지 추출진짜 그림이 나오거나 아무것도 안 나옵니다페이지마다 페이지 전체 이미지가 하나씩 나옵니다

글꼴, 임베딩, 서브셋

글꼴은 임베딩되어 폰트 프로그램이 파일 안에 들어 있거나, 이름과 메트릭으로만 참조되어 뷰어가 표시하는 기기에서 비슷한 것을 찾아 씁니다. 참조된 글꼴 때문에 문서가 만들어진 곳에서는 제대로 보이고 다른 곳에서는 잘못 보입니다. 대체 글꼴은 글자 폭이 다르므로 줄이 다시 나뉘고, 표가 넘치고, 한 장짜리 편지가 두 장이 됩니다.

임베딩된 글꼴은 거의 언제나 서브셋으로 들어갑니다. 실제로 쓰인 글리프만 포함되고 번호도 자주 다시 매겨지므로, A에 해당하는 글리프가 코드 3번에 놓여 있을 수 있습니다. 실제 문자로 되돌리는 대응표는 별도의 ToUnicode 테이블에 있는데, 그것이 없거나 잘못되어 있으면 페이지는 완벽하게 렌더링되는데 복사한 텍스트는 알아볼 수 없는 문자로 나옵니다. 문자가 아니라 내부 글리프 코드를 건네받기 때문입니다. 다시 저장한다고 고쳐지지 않습니다. 빠져나갈 길은 원본 문서를 구하거나 렌더링된 페이지에 문자 인식을 돌리는 것뿐입니다.

페이지 크기, 상자, 회전

좌표의 단위는 포인트이며 1인치에 72포인트이고, 모든 페이지는 여러 개의 사각형을 지니고 있습니다. MediaBox는 종이 전체이고, CropBox는 실제로 표시되는 영역으로 그보다 작을 수 있습니다.

규격포인트밀리미터
A4595 x 842210 x 297
Letter612 x 792216 x 279
Legal612 x 1008216 x 356

A4와 Letter는 화면에서는 똑같아 보이고 종이에서는 다릅니다. 그래서 유럽 보고서와 미국 보고서를 병합하면 페이지 크기가 번갈아 바뀌는 문서가 나옵니다.

각 페이지에는 0도, 90도, 180도, 270도 중 하나의 회전 플래그도 있어서, 옆으로 누워 저장된 내용을 바로 세워 보여줄 수 있습니다. PDF 회전 도구는 아무것도 다시 그리지 않고 그 플래그만 설정하므로 즉시 끝나고 손실도 없습니다. 다만 그 아래의 좌표는 그대로이므로, 플래그를 무시하는 도구는 텍스트를 옆으로 누운 채 추출하고, 플래그가 뒤섞인 페이지들을 병합하면 겉보기에는 일관되지만 내용은 여러 방향으로 놓인 문서가 나옵니다.

병합과 분할, 그리고 깨지는 부분들

페이지는 페이지 트리에 들어 있습니다. PDF 병합은 페이지 객체와 그것이 참조하는 모든 것을 하나의 파일로 복사하고 그 트리를 다시 만듭니다. PDF 분할은 그 트리의 한 가지를 떼어냅니다. 페이지 자체는 온전히 넘어가지만, 문서에 붙어 있는 것들은 늘 그렇지는 않습니다.

  • 북마크는 페이지 객체를 가리키는 별도의 아웃라인입니다. 많은 병합 도구가 이를 통째로 버리고, 분할하면 더 이상 존재하지 않는 페이지를 가리키는 항목이 남습니다.
  • 양식 필드는 페이지 단위가 아니라 문서 단위로 이름이 붙습니다. 그래서 같은 양식 두 부를 병합하면 name이라는 필드가 두 개 생기고, 많은 뷰어가 이를 값이 공유되는 하나의 필드로 취급합니다. 한쪽을 채우면 다른 쪽도 채워집니다. 먼저 평탄화하거나 이름을 바꾸십시오.
  • 주석, 예를 들어 링크나 코멘트는 해당 페이지를 따라 함께 이동하지만, 대상 페이지가 분할에서 빠진 내부 링크는 갈 곳이 없어집니다.

병합된 파일은 원본들의 합보다 큰 경우가 많습니다. 공유되던 자원이 중복되기 때문입니다. 같은 글꼴의 서브셋을 각각 임베딩한 원본 네 개는 서브셋 네 개를 만들고, 색 프로파일도 네 개, 메타데이터 블록도 네 개가 됩니다. 반대로 더 작아질 수도 있습니다. 다시 쓰는 과정에서 쓰이지 않는 객체와 저장 이력이 버려지기 때문입니다. 서른 번 저장된 문서는 그 이전의 모든 개정본을 뒤에 붙인 채 다니고 있습니다.

암호, 권한, 태그

암호에는 두 종류가 있고 둘은 비교 대상이 아닙니다. 사용자 암호는 문서를 여는 데 필요합니다. 그 암호에서 유도한 키로 내용이 실제로 암호화되어 있으므로, 암호가 없으면 읽을 것 자체가 없습니다. 최신 파일은 AES-256을 쓰고, 아주 오래된 파일은 40비트 RC4를 쓰는데 이는 취약합니다.

소유자 암호는 인쇄 금지, 복사 금지, 편집 금지 같은 권한 플래그를 설정합니다. 파일은 여전히 암호화되어 있지만 어떤 뷰어든 도움 없이 유도할 수 있는 키로 암호화되어 있습니다. 사용자 암호가 비어 있기 때문입니다. 이 플래그들은 요청일 뿐이어서 어떤 뷰어는 지키고 어떤 뷰어는 무시합니다. 암호를 묻지 않고 파일이 열린다면, 속성 대화 상자에 무엇이라고 적혀 있든 그 제한은 권고 사항입니다.

태그는 별개의 층입니다. 제목, 목록, 표 셀, 그림 설명을 표시하고 읽기 순서를 확정하는 선택적인 구조 트리입니다. 태그가 있는 PDF에서 스크린 리더는 문서를 읽어냅니다. 태그가 없으면 좌표를 보고 추측하므로 복사해 붙여 넣을 때와 똑같이 뒤엉킨 결과가 나옵니다. 스캔본은 정의상 태그가 없고, 문자 인식은 텍스트를 더해줄 뿐 구조를 더해주지 않으며, 이미지 PDF 변환이나 PDF 이미지 변환의 결과물에는 둘 다 없습니다.

크기는 어디에서 오는가, 그리고 브라우저가 감당할 수 있는 양

파일 크기는 거의 언제나 이미지에서 옵니다. A4 페이지는 150 dpi에서 대략 1240 x 1754픽셀, 300 dpi에서 2480 x 3508픽셀이 필요하므로, 1200만 화소로 넣은 사진은 인쇄가 쓸 수 있는 양보다 훨씬 많은 데이터를 싣고 있습니다. 그리고 문서 크기를 확실하게 줄여주는 유일한 조치는 다운샘플링입니다. 텍스트만 있는 PDF를 다시 저장해서 얻는 것은 거의 없습니다. 콘텐츠 스트림이 이미 압축되어 있기 때문입니다. 그런 파일이 뜻밖에 크다면 임베딩된 글꼴, 저장 이력, 첨부 파일을 살펴보십시오.

이 모든 작업은 브라우저에서 로컬로 이루어지므로 업로드되는 것이 없고, 한계는 파일 크기가 아니라 메모리입니다. 비용이 큰 부분은 렌더링입니다. 4배 배율의 A4 페이지는 약 2380 x 3368픽셀이며 한 페이지당 대략 32 MB의 비압축 비트맵에 해당합니다. 그래서 그 배율의 50페이지는 기기에 부담을 주기 한참 전에 브라우저 탭을 고갈시킵니다. 아주 큰 문서는 먼저 분할한 다음 나눠서 작업하십시오.