인터랙티브 PDF를 온전하게 유지하기: 실용적인 변환 전략

인터랙티브 PDF는 단순한 정적 페이지가 아니라 비디오, 오디오 클립, 3‑D 모델, 입력 가능한 양식 및 JavaScript 기반 동작을 삽입할 수 있습니다. 이러한 기능 덕분에 문서는 교육 모듈, 제품 카탈로그, 혹은 독자를 단계별로 안내하는 법률 계약서처럼 활용될 수 있습니다. 배포 효율성 향상, 보존 기준 충족, 혹은 다른 워크플로에 맞게 파일을 조정해야 할 때 변환이 필요하지만, 인터랙티브 요소가 가장 먼저 깨지는 경우가 많습니다. 이 글에서는 기술적인 고려사항, 흔히 발생하는 오류 지점, 그리고 인터랙티브성을 유지하면서 변환할 수 있는 재현 가능한 워크플로를 소개합니다.


1. PDF를 인터랙티브하게 만드는 요소는?

PDF는 여러 종류의 인터랙티브 콘텐츠를 포함할 수 있습니다.

  • 임베디드 미디어 – 비디오(MP4, MOV), 오디오(MP3, AAC) 및 이미지 시퀀스를 문서 내부에서 재생.
  • 양식 – 텍스트 필드, 체크 박스, 라디오 버튼, 서명 필드, 계산 스크립트.
  • JavaScript 동작 – 페이지 이벤트, 버튼 클릭 또는 필드 변경에 연결된 코드로 동적 계산, 검증, 네비게이션 구현.
  • 3‑D 모델 – U3D 또는 PRC 스트림으로, 뷰어 안에서 회전·검사 가능.
  • 주석 및 리치 미디어 주석 – 코멘트, 팝업, 멀티미디어 주석으로 호버·클릭 시 표시.

이러한 각 구성 요소는 별도의 PDF 객체 스트림에 저장되며, 종종 압축되고 폰트, 색상 프로파일, 네트워크 URL 등 외부 리소스를 참조합니다. 변환 엔진이 객체 계층 구조를 이해하고 보존하지 않으면 결과 PDF는 평평한 문서로 전락합니다.


2. 왜 변환 시 인터랙티브가 깨지는가

PDF를 일반적인 변환 파이프라인에 투입하면 엔진은 보통 렌더‑투‑이미지 방식을 따릅니다. 페이지를 래스터화하고 새로운 PDF 또는 다른 형식으로 다시 인코딩하는 것이죠. 이렇게 하면 시각적인 복제본은 그대로지만, 정적 픽셀로 표현되지 않는 모든 요소가 사라집니다. 인터랙티브가 손실되는 가장 흔한 이유는 다음과 같습니다.

  1. 포맷 불일치 – DOCX, EPUB, 순수 텍스트와 같은 대상 포맷은 임베디드 미디어나 JavaScript를 담을 컨테이너가 없습니다.
  2. 보안 제거 – 일부 컨버터는 잠재적인 악성 코드를 차단하기 위해 JavaScript나 미디어 스트림을 자동으로 삭제합니다. 이 과정에서 정상 콘텐츠도 사라집니다.
  3. 압축 및 객체 평탄화 – 과도한 압축이 객체 스트림을 재작성하면서 참조가 끊어집니다.
  4. 메타데이터 처리 부족 – 양식 필드 이름, JavaScript 변수, 3‑D 모델 라벨은 PDF catalog 사전에 저장됩니다. 변환기가 전체 카탈로그를 복사하지 않으면 이러한 식별자가 사라집니다.
  5. 의존성 누락 – 임베디드 폰트, ICC 프로파일, 외부 미디어 파일이 PDF와 함께 번들되지 않은 경우, 변환 도구가 이를 포함하지 않으면 손실됩니다.

이러한 함정을 이해하면 처음부터 올바른 변환 경로를 선택할 수 있습니다.


3. 인터랙티브를 지원하는 대상 포맷 선택

단순히 PDF를 다른 저장소로 옮기는 것이 목적이라면 PDF 계열을 유지하는 것이 가장 안전합니다. 하지만 웹 게시용 HTML5 버전이나 멀티미디어를 지원하는 EPUB 등 다른 컨테이너가 필요할 때도 많습니다. 아래 매트릭스는 일반적인 인터랙티브 기능을 유지할 수 있는 포맷을 빠르게 보여줍니다.

기능PDF (유지)HTML5EPUB 3DOCXPowerPoint (PPTX)
임베디드 비디오/오디오✅ (<video>/<audio> 태그)✅ (미디어 오버레이)✅ (미디어 객체)
입력 가능한 양식✅ (HTML 폼)✅ (인터랙티브 EPUB)✅ (컨텐츠 컨트롤)✅ (텍스트 상자)
JavaScript 동작✅ (제한적)✅ (전체 JS)✅ (제한적)✅ (VBA/Office 스크립트)
3‑D 모델✅ (U3D/PRC)❌ (WebGL 해킹 필요)
주석✅ (툴팁)✅ (EPUB 주석)✅ (코멘트)✅ (노트)

특정 기능을 네이티브하게 지원하지 못하는 포맷으로 변환해야 한다면, 해당 기능을 추출해 외부에 저장하고 변환된 문서에서 참조하도록 하는 것이 실용적입니다. 예를 들어, 제품 데모 비디오가 포함된 PDF를 HTML5로 변환할 경우 비디오 파일을 HTML 페이지와 같은 폴더에 저장하고 <video> 태그로 연결하면 됩니다.


4. 손실 없는 인터랙티브 PDF 변환 단계별 워크플로

아래는 가장 일반적인 인터랙티브 PDF에 적용 가능한 재현 가능한 프로세스입니다. 단계는 클라우드 기반 변환 서비스를 이용한다는 전제이며, convertise.app 같은 도구가 포맷 변환의 무거운 작업을 담당하고, 여러분은 주변 로직을 조율합니다.

4.1. 원본 PDF 인벤토리 만들기

  1. 카탈로그 파싱 – Apache PDFBox, iText 7, PyMuPDF 등 PDF 라이브러리를 이용해 문서 카탈로그를 읽고 인터랙티브 객체 목록을 작성합니다.
  2. 미디어 스트림 로그 – 모든 /RichMedia 사전을 찾아 MIME 타입을 기록하고, 외부 URI가 있다면 메모합니다.
  3. 양식 필드 정의 추출 – 필드 이름, 타입, 기본값 및 연결된 JavaScript를 캡처합니다.
  4. 3‑D 스트림 추출/3D 엔트리가 있으면 U3D/PRC 바이너리를 덤프해 나중에 재임베드할 수 있도록 저장합니다.
  5. 주석 캡처/Annot 객체를 기록하고, 특히 Link, Popup, FileAttachment 서브타입을 주목합니다.

이 인벤토리를 JSON 형태로 저장하면 이후 단계가 결정론적으로 진행됩니다.

4.2. 대상 포맷 결정

  • PDF에 그대로 유지 – 모든 객체 스트림을 그대로 복사하는 preserve‑all 모드를 선택합니다. 대부분의 클라우드 컨버터에는 “원본 스트림 유지” 옵션이 있습니다.
  • HTML5·EPUB 등으로 이동 – PDF 요소를 대응되는 형태로 매핑합니다.
    • 비디오/오디오 → <video>/<audio> 태그; 원본 파일을 그대로 사용하거나 H.264/AAC로 트랜스코딩.
    • 양식 필드 → <form> 요소; 검증 스크립트를 JavaScript로 재현.
    • JavaScript → 외부 .js 파일로 보존하고, PDF 전용 API(doc.getField)를 DOM API로 변환.
    • 3‑D 모델 → GLTF/GLB 로 변환 후 <model-viewer>(WebGL) 등으로 삽입(대상 플랫폼이 허용하는 경우).

4.3. 미디어 자산 준비

많은 PDF가 /EmbeddedFiles 네임 트리 안에 상대 경로로 미디어를 저장합니다. 파일을 추출하고 MIME 타입을 검증한 뒤, 웹 전송용으로 필요하면 재압축합니다(예: AVI → MP4). 변환 전후 파일 무결성을 확인할 수 있도록 원본 체크섬을 보관합니다.

4.4. 핵심 문서 본문 변환

시각 레이어가 준비되면 실제 변환을 실행합니다.

# convertise.app 동작을 흉내 내는 일반 CLI 예시
convertise --input source.pdf \
           --output destination.html \
           --preserve-media true \
           --embed-forms true \
           --keep-js true

위 플래그들은 미디어 스트림 보존, 양식 정의 임베드, JavaScript 블록 복사 등을 명시합니다.

4.5. 추출한 자산 재첨부

변환이 끝난 뒤 미디어 파일을 출력 문서와 연결합니다. HTML인 경우 media/ 폴더를 만들고 <source> 속성을 해당 파일 경로로 수정합니다. EPUB인 경우 OPS 폴더에 파일을 추가하고 매니페스트에 선언합니다.

4.6. 결과 검증

  1. 시각 검토 – 네이티브 뷰어(브라우저, e‑reader, Acrobat)에서 열어 모든 인터랙티브 요소를 테스트합니다.
  2. 체크섬 검증 – 추출한 각 자산의 SHA‑256을 변환 전후로 비교해 동일함을 확인합니다.
  3. 양식 데이터 라운드‑트립 – 몇 개 필드를 입력·저장·재열어 데이터가 유지되는지 확인합니다.
  4. JavaScript 콘솔 – 브라우저 콘솔에서 오류가 발생하지 않는지 확인해 객체 누락이나 변수 미정의를 찾습니다.

CI 스크립트에 이러한 검증을 자동화하면 대량 배치 변환 시에도 품질을 일관되게 유지할 수 있습니다.


5. 흔히 마주치는 함정과 회피 방법

함정발생 원인해결법
미디어 스트림 사라짐컨버터 기본값이 “flatten” 모드preserve‑media 플래그를 명시하거나 /RichMedia 객체를 복사하는 PDF‑전용 도구 사용
양식이 일반 텍스트가 됨대상 포맷에 양식 지원이 없음양식 지원 포맷(PDF, DOCX, HTML) 선택하거나 양식 정의를 별도 JSON 스키마로 내보내 변환 후 재구성
JavaScript가 보안 차단으로 삭제SaaS 컨버터가 자동으로 스크립트 제거안전한 스크립트를 화이트리스트에 등록하거나, 내부 문서에 대해 trust 토큰을 제공해 정규화 비활성화
3‑D 모델 기하 구조 손실U3D/PRC 스트림을 인식하지 못함3‑D 스트림을 추출해 meshlab 등으로 GLTF 변환 후 대상 문서에 임베드
폰트 대체로 레이아웃 이동원본 PDF에 폰트가 임베드되지 않음변환 전 반드시 모든 폰트를 /FontDescriptor/FontFile 형태로 임베드하도록 설정

6. 사례 연구: 임베디드 데모가 있는 제품 카탈로그 변환

배경 – 한 하드웨어 기업이 120페이지 분량의 PDF 카탈로그를 제작했습니다. 각 제품 페이지에는 짧은 비디오 데모, 입력 가능한 주문 양식, JavaScript 기반 “스펙 비교” 위젯이 포함되어 있습니다.

목표 – 웹 사이트에 인터랙티브 HTML5 형태로 게시하면서, 오프라인 영업팀을 위해 PDF 버전은 그대로 유지.

진행 과정

  1. 인벤토리 – PyMuPDF를 이용해 45개의 MP4 비디오 스트림, 20개의 양식 필드, 4개의 JavaScript 함수를 기록한 JSON 매니페스트를 생성.
  2. 추출 – 모든 비디오 파일을 media/ 폴더에 저장하고, 양식 정의를 forms.json 으로 내보냄.
  3. 변환convertise.app--output html--preserve-media true 플래그를 전달해 HTML 골격을 생성하고, 원본 비디오 파일명을 그대로 참조하도록 함.
  4. 양식 재구축 – 작은 JavaScript 라이브러리가 forms.json 을 읽어 <input> 요소를 동적으로 생성, 필드 이름을 그대로 유지해 기존 데이터 파이프라인과 호환.
  5. 테스트 – Selenium 스크립트가 각각의 “스펙 비교” 버튼을 클릭해 모달이 정상 열리고 올바른 데이터가 표시되는지 자동 검증.
  6. 배포 – 최종 HTML 번들(≈ 3 MB)은 CDN에 업로드했고, PDF는 내부 다운로드용으로 그대로 보관.

결과 – 인터랙티브 웹 페이지는 브라우저에서 PDF 대비 30 % 빠르게 로드되었으며, 비디오는 추가 플러그인 없이 재생, 주문 양식 데이터는 직접 CRM에 수집할 수 있었습니다.


7. 운영 환경을 위한 권장 사항

  • 단일 변환에 의존하지 마세요. 객체 누락을 검증하는 2차 검증 단계를 반드시 수행합니다.
  • 미디어를 1급 자산으로 다루세요. 추출된 자산을 버전 관리가 가능한 스토리지 버킷에 보관하고, 불변 URL로 참조해 우연한 덮어쓰기를 방지합니다.
  • 원본 PDF는 변경 불가능한 백업으로 유지 – 완벽한 변환이라도 규제·법적 상황에선 원본이 필요할 수 있습니다.
  • 체크섬 자동 비교 – SHA‑256 해시 매치를 통해 각 미디어 파일의 바이너리 내용이 변하지 않았음을 보증합니다.
  • 변환 프로파일을 문서화 – 사용한 플래그, 라이브러리 버전, 커스텀 스크립트를 README에 기록해 결과물과 함께 배포합니다.
  • 프라이버시 중심 서비스 활용 – 기밀 계약서 등을 다룰 경우, 메모리 상에서만 처리하고 데이터를 보관하지 않는 클라우드 컨버터를 선택합니다. convertise.app 은 이런 모델을 염두에 두고 설계되었습니다.

8. 결론

인터랙티브 PDF는 시각 레이아웃, 풍부한 미디어, 사용자 중심 로직을 하나의 휴대 가능한 파일에 묶어줄 수 있다는 점에서 강력합니다. 이 파일을 손실 없이 변환하려면 체계적인 접근이 필요합니다: 모든 인터랙티브 객체를 인벤토리화하고, 해당 객체를 수용할 수 있는 대상 포맷을 선택하며, 미디어를 추출·보존하고, 명시적인 보존 플래그와 함께 변환을 실행한 뒤 자동화된 테스트로 결과를 검증합니다. 위 워크플로를 따르면 레거시 PDF를 현대적인 웹 친화 포맷으로 옮기든, 단순히 보관용 PDF를 유지하든, 모든 버튼·비디오·양식이 그대로 작동하는 상태를 보장할 수 있습니다.

초기 노력은 다소 부담스러울 수 있지만, 최종적으로는 사용자 경험이 매끄럽고 핵심 비즈니스 로직이 번역 과정에서 사라지지 않는다는 큰 이점을 제공합니다. 프로세스가 코드화되면 콘텐츠 제공 파이프라인의 반복 가능한 구성 요소가 되어, 인터랙티브 PDF가 디지털 생태계 안에서 살아 움직이는 자산으로 계속 활용될 수 있습니다.