PDF를 변환하면 구조가 사라지는 이유와 대처법

최종 확인

PDF를 Markdown으로 바꾸는 도구는 이 도구를 포함해 모두, 가끔은 부주의해 보이는 결과를 내놓습니다. 제목이 문단으로 강등되고, 표가 눌려 글자 벽이 되고, 2단 편집 지면이 가로로 읽혀 문장이 서로 엉킵니다.

그 어느 것도 부주의가 아닙니다. PDF 파일이 실제로 무엇을 담고 있는지에서 따라 나오는 결과이며, 그것을 알고 나면 오류는 예측 가능해집니다. 즉 내 문서 가운데 어떤 것이 깔끔하게 변환되고 어떤 것이 그렇지 않을지 미리 가늠할 수 있습니다.

읽는 데 6분

PDF 안에 실제로 들어 있는 것

워드프로세서 문서는 나무 구조입니다. 이 대목은 2단계 제목이고, 이 문단들은 저 절에 속하며, 이 칸들이 3열 표를 이룬다고 기록합니다. 겉모습은 표시할 때 그 구조에서 도출됩니다.

PDF는 그 반대입니다. 그리기 명령의 묶음입니다. 이 글자꼴을, 이 글꼴로, 이 크기로, 이 쪽의 이 좌표에 놓아라. 그 지면을 만들어 낸 구조는 저장되지 않습니다. 좌표를 계산하는 데 쓰이고 버려졌습니다.

형식의 실수가 아닙니다. PDF는 1993년에, 어떤 기기와 어떤 프린터에서도 문서가 똑같이 보이도록 보장하려고 설계되었습니다. 그 보장 방법은 겉모습을 정확히 못 박고 다시 계산할 여지를 남기지 않는 것입니다. 목적은 완벽히 달성되었습니다. 대가로 PDF는 모든 글자가 어디 있는지는 알고, 그 뜻은 전혀 모릅니다.

그러므로 PDF를 Markdown으로 바꾸는 일은 추출이 아니라 추론입니다. 기하 정보를 거꾸로 읽어, 어떤 구조라야 이런 배치가 나왔을지 헤아리는 일입니다. 좋은 변환기는 잘 헤아립니다. 어떤 변환기도 헤아리는 것 이상은 못 합니다. 답이 정말로 파일 안에 없기 때문입니다.

유일한 예외: 태그가 붙은 PDF

태그가 붙은 PDF는 구조 트리를 하나 더 지니고 있습니다. 화면 낭독기가 제목을 알리고 표의 칸을 순서대로 읽을 수 있도록 접근성을 위해 붙인 것입니다. 이것이 있고 또 정확하다면 추론의 상당 부분이 필요 없어집니다.

그러나 실제로 둘 다 갖추어진 경우는 드뭅니다. 태그 부여는 선택 사항이라 대부분의 PDF 생성기가 붙이지 않고, 붙이는 쪽에서도 눈에 보이는 지면과 어긋나는 태그를 내놓는 경우가 아주 많습니다. 모든 문단이 제목으로 표시되거나, 표가 문단의 연속으로 태그되는 식입니다. 잘못된 태그를 믿는 변환기는 태그를 무시하는 변환기보다 나쁜 결과를 냅니다.

PDF가 만들어지는 과정을 직접 통제할 수 있고 변환 품질이 중요하다면, Word나 LibreOffice에서 태그가 제대로 붙은 PDF로 내보내는 것이 가장 쓸모 있는 조치입니다. 바깥에서 들어오는 문서를 변환한다면 태그가 없다고 가정하십시오.

기하 정보에서 구조를 추론하는 방법

공간 정보로 작동하는 변환기의 규칙은 대체로 같으며, 알아 둘 값어치가 있습니다. 규칙 하나하나가 곧 실패의 형태이기 때문입니다.

먼저 단위를 정합니다. 본문 글자 높이 — 문서에서 가장 자주 쓰인 글꼴 높이를, 그 크기로 조판된 글자 수로 가중한 값 — 가 잣대가 됩니다. 덕분에 문서가 9pt로 짜였든 14pt로 짜였든 규칙이 똑같이 작동합니다.

그다음 모든 것을 그 잣대로 잽니다. 기준선을 공유하는 글자 조각은 같은 줄입니다. 작은 세로 간격으로 떨어진 줄들은 같은 문단이고, 간격이 크면 새 문단이 시작됩니다. 본문보다 뚜렷하게 크게 조판된 조각은 제목이며, 얼마나 큰지가 단계를 정합니다. 조각들이 공통된 가로 위치에 맞춰 늘어선 줄들은 표입니다. 지면 가운데 부근의 길고 빈 세로 띠는 단 나눔을 뜻하므로, 읽는 순서는 한 단을 끝까지 내려간 뒤 다른 단을 내려가야 합니다.

이 변환기는 본문 글자 높이의 배수로 대략 다음 기준을 씁니다.

H1본문 글자 높이의 1.8배 초과
H2본문 글자 높이의 1.4배 초과
H3본문 글자 높이의 1.2배 초과
같은 줄기준선 차이가 본문 높이의 ±0.35 이내
같은 문단세로 간격이 본문 높이의 1.5배까지
2개 이상 공통 x 좌표에 정렬된 줄이 2줄 이상 연속

모든 실패는 규칙에서 따라 나온다

위 목록을 전제의 목록으로 다시 읽어 보면 오류가 더는 알 수 없는 일이 아니게 됩니다.

  • 크기를 바꾸지 않고 굵기나 색으로만 구분한 제목은 크기 기준에는 보이지 않습니다. 11pt 본문 위에 11pt 굵은 제목을 얹은 문서에는 기하학적으로 제목이 하나도 없습니다.
  • 병합된 칸이 있는 표는 공통 위치 판정을 깨뜨립니다. 병합된 칸은 다른 어떤 줄도 쓰지 않는 위치를 차지하기 때문입니다. 줄이 더는 정렬되지 않고, 그 덩어리는 표로 인식되지 않습니다.
  • 내용이 둘째 줄로 접히는 칸은 한쪽에 구멍이 난 두 줄처럼 보입니다.
  • 줄 간격이 넉넉하면 같은 문단의 줄이 문단 구분 기준을 넘어가 쪼개질 수 있습니다. 문단 사이가 좁으면 반대로 합쳐질 수 있습니다.
  • 3단 편집, 너비가 다른 2단, 지면 전체 폭 그림으로 끊긴 단 — 모두 지면 가운데 여백에 기대는 판정을 무너뜨립니다.
  • 이미지로 놓인 글자 — 글자가 든 로고, 이름표가 달린 도표, 스캔한 지면 — 에는 글자꼴이 아예 없습니다. 배치할 것도 읽을 것도 없습니다.

어떤 문서가 깔끔하게 변환되는가

형태는 늘 같습니다. 워드프로세서로 만든 단일 단 문서, 본문보다 눈에 띄게 큰 제목, 단순한 직사각형 표, 그리고 글자의 그림이 아니라 진짜 글자.

이는 대부분의 보고서, 논문, 설명서, 학위논문, 계약서, 회의록, 사내 문서를 가리킵니다. 즉 사람들이 변환하는 것의 대부분입니다. 잡지, 소책자, 인포그래픽이 들어간 연차보고서, 신청서, 복잡한 표가 있는 청구서, 그리고 스캔한 어떤 것도 여기 들지 않습니다.

잘 변환됨워드프로세서로 만든 보고서, 논문, 설명서, 계약서, 회의록
일부만 변환됨2단, 각주, 그림이 있는 학술 PDF
나쁘게 변환됨잡지, 소책자, 신청서, 청구서, 디자인된 지면
변환되지 않음스캔과 사진. 문자 인식을 거치기 전까지

어려운 문서에서 더 나은 결과를 얻으려면

실제로 도움이 되는 것들을, 효과가 큰 순서로 대략 적습니다.

  • PDF를 다시 만들 수 있다면 태그가 붙은 것으로 내보내십시오. 더 좋은 것은 PDF를 건너뛰고 원본 문서를 변환하는 일입니다. Word 파일로 만든 PDF를 변환하는 것은 그 Word 파일을 변환하는 것보다 언제나 못합니다.
  • 지면 형태가 섞인 문서는 나누십시오. 본문 열 쪽과 표 네 쪽을 따로 변환하는 편이, 둘 다 감당해야 하는 한 번의 변환과 씨름하는 것보다 낫습니다.
  • 말썽인 표는 따로 떼어 내십시오. 60쪽짜리 문서 안에서 실패하는 표도, 지면에 그것만 있으면 제대로 변환되는 경우가 많습니다.
  • 제목을 굵기로만 구분한 문서라면 제목을 손으로 고칠 각오를 하십시오. 찾아 바꾸기 한 번이지, 다시 입력하는 작업은 아닙니다.
  • 스캔본은 문자 인식을 먼저 돌리십시오. 지름길은 없습니다. 애초에 글자로 부호화되지 않은 것을 찾아낼 수 있는 해석기는 없습니다.

결과는 반드시 읽으십시오

정말로 시간을 잡아먹는 실패는 눈에 띄게 망가진 변환이 아닙니다. 각주 하나, 표의 마지막 줄, 인식된 단 바깥으로 떨어진 한 줄을 조용히 흘려버린 뒤, 깨끗하고 그럴듯하지만 구멍이 난 Markdown을 내놓는 쪽입니다.

믿고 쓰기 전에 변환된 Markdown을 원본과 나란히 훑어보시고, 특히 표와 숫자, 그리고 각 쪽의 마지막 몇 줄에 주의를 기울이십시오. 조용한 손실은 거기에 몰려 있습니다.