PDF XML 메타데이터 및 북마크 이해: 기술 가이드

주요 내용
📍 대상 위치
PDF 문서 내의 특정 위치를 정의하는 정확한 위치 마커입니다. 이는 북마크 및 하이퍼링크의 정확한 탐색을 가능하게 하며, 문서 개요는 계층적 목차 기능을 제공합니다.
📄 XML 메타데이터
표준화된 XMP 형식을 사용하여 문서의 포괄적인 메타데이터를 제공하는 구조화된 XML 스트림으로, 기본적인 문서 속성 외에도 풍부한 설명 정보를 포함합니다.
📎 파일 첨부
외부 리소스를 PDF 문서 내에 직접 포함시키는 완전한 파일 임베딩 기능을 제공하여, 이메일 첨부 파일과 유사한 독립적인 문서 번들을 생성합니다.
📝 주석
PDF 페이지의 기본 콘텐츠를 수정하지 않고 텍스트, 그래픽 및 클릭 가능한 기능을 추가하는 대화형 오버레이 요소입니다. 원활한 문서 탐색을 위한 하이퍼링크와 향상된 독자 상호 작용을 위한 다양한 마크업 도구를 포함합니다.
북마크 및 대상

문서 탐색은 계층 구조의 북마크 구조에 의존하며, 기술적으로는 ... 문서 개요이 트리 구조 시스템은 클릭 가능한 항목을 제공하며, 일반적으로 장 제목, 섹션 헤더 및 하위 섹션 이름으로 구성되어 있어 사용자가 문서의 특정 부분으로 빠르게 이동할 수 있습니다. 각 북마크 항목은 표시 텍스트와 대상 정보를 결합하며, 링크가 어디로 이동해야 하는지 정확하게 지정합니다.
대상 이해
PDF 대상은 문서 내의 정확한 위치 표시자로, 어떤 페이지를 표시할지, 해당 페이지의 어느 위치에 표시할지, 그리고 어떤 확대/축소 수준을 적용할지를 지정합니다. 대상을 만드는 방법은 두 가지입니다. 직접 인라인으로 정의하거나(예제에서는 명확성을 위해 이 방법을 사용합니다), 문서 전체의 명명 시스템을 통해 이름으로 참조할 수 있습니다. 대부분의 PDF 리더는 주 문서 콘텐츠와 함께 탐색 패널에 북마크를 표시합니다.
각 대상은 배열 구조를 사용하며, 특정 요소는 원하는 보기 동작에 따라 다릅니다. 사용할 수 있는 주요 대상 패턴은 다음과 같습니다.
대상 유형 표
참고: "page"는 페이지 객체에 대한 간접 참조입니다. 기본적으로 이러한 대상은 페이지의 자르기 상자 경계를 사용하며, 자르기 상자가 정의되지 않은 경우 미디어 상자를 사용합니다.
| Array | Description |
|---|---|
| [page /Fit] | Scales the page to fit completely within the viewer window, adjusting both width and height proportionally. |
| [page /FitH top] | Positions the specified top coordinate at the window’s top edge while scaling horizontally to fit the full page width. |
| [page /FitV left] | Aligns the specified left coordinate with the window’s left edge while scaling vertically to fit the full page height. |
| [page /XYZ left top zoom] | Positions the coordinates (left, top) at the window’s upper-left corner and applies the specified zoom factor. Null values preserve current settings for those parameters. |
| [page /FitR left bottom right top] | Zooms and positions the view to display the rectangular area defined by the left, bottom, right, and top coordinates. |
| [page /FitB] | Similar to /Fit, but scales based on the actual content boundaries instead of the defined crop box area. |
| [page /FitBH top] | Functions like /FitH but uses the content bounding box instead of the crop box for horizontal scaling calculations. |
| [page /FitBV left] | Operates like /FitV but calculates vertical scaling based on the content bounding box rather than the crop box boundaries. |
문서 개요 구조
문서 개요는 계층적 탐색 구조를 생성하며, PDF 뷰어에서 상호 작용 가능한 목차 역할을 합니다. 이러한 트리 구조는 사용자가 문서의 명확한 구조 개요를 제공하여 복잡한 문서를 빠르게 탐색할 수 있도록 돕습니다. 이 시스템은 두 가지 기본 객체 유형에 의존합니다.
- 개요 사전 – 개요 계층 구조의 루트
- 개요 항목 사전 – 개요의 개별 항목
개요 사전 구조 테이블
| Key | Value Type | Value |
|---|---|---|
| /Type | name | If present, must be /Outlines. |
| /First | indirect reference to dictionary | References the initial top-level outline entry in the document hierarchy. This field is mandatory when outline entries exist. |
| /Last | indirect reference to dictionary | References the final top-level outline entry in the document hierarchy. This field is mandatory when outline entries exist. |
| /Count | integer | Specifies how many outline entries are currently expanded across the entire outline tree. Can be omitted when no entries are in an open state. |
개요 항목 구현
모든 개요 항목은 표시 제목, 대상 위치 및 계층 구조 내 다른 항목과의 관계를 지정하는 사전을 구성합니다.
간단한 문서 개요가 PDF 구문에서 어떻게 구조화되는지 살펴보겠습니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
8 0 obj <</Type/Outlines/Count 4/First 9 0 R/Last 9 0 R>> endobj 9 0 obj <</Title(Chapter 1: Experiment A)/Count 3/Parent 8 0 R/First 12 0 R/Last 18 0 R>> endobj 12 0 obj <</Title(1: Introduction)/Count 0/Parent 9 0 R/Next 15 0 R>> endobj 15 0 obj <</Title(2: Methodology)/Count 0/Parent 9 0 R/Prev 12 0 R/Next 18 0 R>> endobj 18 0 obj <</Title(3: Result verification)/Count 0/Parent 9 0 R/Prev 15 0 R/>> endobj |
개요 항목 사전 구조 테이블
*는 필수 항목입니다.
| Key | Value Type | Value |
|---|---|---|
| /Title* | text string | Text to be displayed for this entry. |
| /Parent* | indirect reference to dictionary | References this item’s parent within the outline hierarchy, which can be either another outline item or the root outline dictionary. |
| /Prev | indirect reference to dictionary | References the preceding sibling item at the same hierarchical level, when applicable. |
| /Next | indirect reference to dictionary | References the following sibling item at the same hierarchical level, when applicable. |
| /First | indirect reference to dictionary | References the initial child item under this entry, when child items exist. |
| /Last | indirect reference to dictionary | References the final child item under this entry, when child items exist. |
| /Count | integer | When the entry is expanded, indicates the count of visible descendant entries. When collapsed, stores a negative value representing the total number of hidden descendants that would become visible upon expansion. |
| /Dest | name, string or array | The destination. Arrays are destinations, names are references to entries in the /Dests entry in the document catalog, strings are references to entries in the /Dests entry in the document’s name dictionary. |
XML 메타데이터

최신 PDF 문서는 기존 문서 속성보다 훨씬 더 자세하고 구조화된 정보를 제공하는 정교한 XML 기반 메타데이터 스트림을 포함할 수 있습니다. 이 고급 메타데이터 시스템은 Adobe의 XMP(Extensible Metadata Platform) 사양을 활용하여 표준화된, 기계가 읽을 수 있는 문서 설명을 제공하며, 이를 통해 검색성, 구성 및 자동 처리 기능을 향상시킵니다.
XMP 메타데이터 구조
XMP 메타데이터는 RDF(Resource Description Framework) 구문을 사용하여 문서 속성을 표준화된 형식으로 구성하고 설명하는 XML 문서로 패키징됩니다. 이 메타데이터 내용은 PDF 프로세서가 올바르게 식별할 수 있도록 전용 스트림 객체 내에 포함됩니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
6 0 obj <</Length 1235/Type/Metadata/Subtype/XML>>stream <?xpacket begin="锘xBF" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.2-c001 63.139439, 2010/09/27-13:37:26" ><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" ><rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" ><pdf:Producer>losLab PDF Library</pdf:Producer> <dc:creator>losLab.com</dc:creator> <dc:title>Delphi PDF SDKs</dc:title> <xmp:CreateDate>2025-06-29T10:46:27+08:00</xmp:CreateDate> <xmp:ModifyDate>2025-06-29T10:58:57+08:00</xmp:ModifyDate> <xmp:MetadataDate>2025-06-29T10:46:27+08:00</xmp:MetadataDate> <dc:description>Delphi Development Library for PDF creation & editing</dc:description> <xmp:CreatorTool>HotPDF Component</xmp:CreatorTool> <dc:subject>PDF Developer Library for RAD Studio></dc:subject> <pdf:Keywords>Delphi, PDF SDK, PDF Component</pdf:Keywords> </rdf:Description>Robust Delphi PDF development library</rdf:RDF> </x:xmpmeta> <?xpacket end="w"?> endstream endobj |
표준 메타데이터 스키마
XMP 프레임워크는 잘 정의된 스키마 네임스페이스를 통해 메타데이터를 구성하며, 각 네임스페이스는 특정 정보 범주를 제공합니다.
📋 Dublin Core (dc:)
기본적인 서지 정보
- dc:title – 문서 제목
- dc:creator – 문서 작성자(들)
- dc:subject – 문서 주제/키워드
- dc:description – 문서 설명
- dc:format – MIME 타입
🏷️ XMP Basic (xmp:)
핵심 XMP 속성
- xmp:CreateDate – 생성 날짜
- xmp:ModifyDate – 수정 날짜
- xmp:CreatorTool – 생성 애플리케이션
- xmp:MetadataDate – 메타데이터 수정 날짜
📄 PDF 스키마 (pdf:)
PDF 관련 속성
- pdf:Producer – PDF 제작자
- pdf:Keywords – 문서 키워드
- pdf:PDFVersion – PDF 버전
문서 카탈로그와의 통합
XML 메타데이터 스트림은 문서 카탈로그에서 참조됩니다.
|
1 2 3 |
1 0 obj < < Type Catalog Pages 2 0 R Metadata 10 0 R Outlines 1 0 R>> endobj |
🎯 XML 메타데이터에 대한 최적의 방법
- 최대 호환성을 위해 문서 정보 사전과 XMP 메타데이터를 항상 포함하십시오.
- 두 위치 모두에서 메타데이터 값이 일관되도록 하십시오.
- 국제 문자를 사용할 때는 올바른 XML 인코딩(UTF-8)을 사용하십시오.
- 생성 및 수정 날짜를 ISO 8601 형식으로 포함하십시오.
- XML 구조를 검증하여 파싱 오류를 방지하십시오.
파일 첨부

PDF 파일 첨부는 외부 파일을 PDF 문서 내에 직접 포함시키는 편리한 방법으로, 필요한 모든 리소스를 포함하는 독립적인 패키지를 생성합니다. 이러한 첨부는 전체 문서에 연결하거나 필요에 따라 특정 페이지에 연결할 수 있습니다. 대부분의 최신 PDF 뷰어는 이러한 포함된 파일을 전용 첨부 파일 패널에 표시하여 사용자가 포함된 콘텐츠를 쉽게 액세스, 보고 또는 저장할 수 있도록 합니다. 이 기능은 특히 보충 자료가 포함된 프레젠테이션이나 동반 데이터 파일이 포함된 보고서와 같은 포괄적인 문서 패키지를 만드는 데 유용합니다.
포함된 파일 구조
기본적으로 포함된 파일은 실제 파일 데이터를 포함하는 스트림 객체로 구성되며, 스트림 사전 항목은 다음을 지정합니다. /Type /EmbeddedFile이 간단한 접근 방식을 통해 모든 유형의 파일을 PDF 내에 저장할 수 있습니다. 기본 포함된 파일 구조는 다음과 같습니다.
|
1 2 3 4 5 6 |
8 0 obj < < Type EmbeddedFile Length 35>> stream This is a text file attachment... endstream endobj |
PDF는 임베디드 파일 참조를 위한 두 가지 뚜렷한 방법을 지원하며, 각각 다른 사용 사례에 적합합니다. 문서 전체에서 접근 가능한 문서 레벨 첨부 파일과 특정 페이지에 인터랙티브 요소로 나타나는 페이지 레벨 첨부 파일이 있습니다.
문서 레벨 첨부 파일
문서 전체에 적용되는 첨부 파일의 경우, 다음을 추가해야 합니다. /EmbeddedFiles name dictionary 항목을 추가해야 하며, 이는 document catalog의 /Names 항목을 통해 접근할 수 있습니다. 이 방법은 첨부 파일을 PDF 전체에서 전역적으로 사용할 수 있도록 하며, 사용자가 어떤 페이지를 보고 있든 상관없이 접근할 수 있습니다.
|
1 2 3 4 5 6 |
9 0 obj < < Names << EmbeddedFiles << Names [ (attachment.txt) << EF << F 8 0 R>> /F (attachment.txt) /Type /Filespec >> ] >> >> /Pages 1 0 R /Type /Catalog >> endobj |
코드 구조 설명
- /Names – 문서의 name dictionary를 포함합니다.
- /EmbeddedFiles – 특히 임베디드 파일 이름을 처리합니다.
- (attachment.txt) – 사용자에게 보이는 파일 이름입니다.
- /EF – 실제 파일 참조를 포함하는 임베디드 파일 딕셔너리입니다.
- /F 8 0 R – 임베디드 파일 스트림 객체에 대한 참조입니다.
- /Type /Filespec – 이 파일을 파일 사양 딕셔너리로 식별합니다.
페이지 레벨 첨부 파일
페이지별 첨부 파일은 파일 첨부 주석을 사용하는 다른 접근 방식이 필요합니다. 이러한 주석은 다음 항목에 추가됩니다. /Annots 대상 페이지의 딕셔너리에 배열을 추가하여, 사용자가 페이지에서 직접 상호 작용할 수 있는 표시 아이콘을 생성합니다.
|
1 2 3 4 5 6 7 8 |
9 0 obj < < Type Page (Other dictionary entries as usual) Annots [ << FS << EF << F 8 0 R>> /F (attachment.txt) /Type /Filespec >> /Subtype /FileAttachment /Contents (attachment.txt) /Rect [ 18 796.88976378 45 823.88976378 ] >> ] >> endobj |
페이지 첨부 파일 속성
- /FS – 파일 사양 딕셔너리 (위의 /EF와 동일)
- /Subtype /FileAttachment – 이 주석을 파일 첨부물로 식별합니다.
- /Contents – 첨부물 아이콘 위에 마우스를 올리면 나타나는 툴팁 텍스트입니다.
- /Rect – 페이지에서 첨부물 아이콘의 위치와 크기를 정의하는 사각형입니다.
첨부물 사용 사례
📊 데이터 파일
스프레드시트, 데이터베이스 또는 원시 데이터 파일을 보고서 및 분석과 함께 포함합니다.
🎨 원본 파일
원본 디자인 파일, CAD 도면 또는 편집 가능한 템플릿을 포함합니다.
📹 미디어 자료
비디오 프레젠테이션, 오디오 녹음 또는 대화형 콘텐츠를 첨부합니다.
📋 관련 문서
관련 PDF 파일, 계약서 또는 참고 자료를 함께 묶습니다.
주석

PDF 주석은 원본 페이지 내용을 변경하지 않고 문서에 대화형 요소와 시각적 마크업을 추가하는 강력한 방법입니다. 이러한 오버레이 요소는 사용자가 텍스트를 강조 표시하거나, 의견을 추가하거나, 클릭 가능한 링크를 만들 수 있도록 하여 읽기 경험을 향상시킵니다. 가장 유용한 주석 유형 중 하나는 하이퍼링크로, 문서의 서로 다른 섹션이나 외부 리소스로 원활하게 이동할 수 있습니다.
주석 구조
다양한 유형의 주석은 다양한 목적을 수행하지만, 모두 일관된 기본 구조를 따르며 필요한 경우 유형별 속성이 추가됩니다. PDF 페이지에는 여러 개의 주석이 포함될 수 있으며, 이러한 주석은 각 페이지의 사전에서 /Annots 항목으로 참조되는 배열로 구성됩니다. 각 주석은 특정 속성을 가진 자체 사전 객체로 구현됩니다.
주석 사전 구조 테이블
*는 필수 항목입니다.
| Key | Value Type | Value |
|---|---|---|
| /Type | name | When specified, this value must be set to /Annot to properly identify the dictionary type. |
| /Subtype* | name | Specifies the specific annotation category (e.g., Link, Text, Highlight). |
| /Rect* | rectangle | Defines the annotation’s position and dimensions using standard PDF coordinate units. |
| /Contents | text string | Contains the annotation’s text content or provides an alternative descriptive label for accessibility purposes. |
기본 주석 사전 예제:
|
1 2 3 |
12 0 obj < < Type Annot Subtype Link Rect [100 200 300 250] Border [0 0 1] C [0.0 0.0 1.0] Dest [5 0 R XYZ null null null]>> endobj |
일반적인 주석 유형
🔗 링크 주석
문서 내의 특정 위치나 외부 리소스로 연결되는 클릭 가능한 영역을 만듭니다.
- /Subtype /Link – 링크 주석으로 식별됩니다.
- /Dest – 대상 배열 또는 명명된 대상입니다.
- /A – 더 복잡한 동작을 위한 액션 사전입니다.
📝 텍스트 주석
클릭하면 나타나는 팝업 노트와 주석을 표시합니다.
- /Subtype /Text – 텍스트 주석으로 식별됩니다.
- /Contents – 주석의 텍스트 내용입니다.
- /Open – 주석이 처음 열려 있는지 여부입니다.
🖍️ 마크업 주석
텍스트 내용에 하이라이트, 밑줄 또는 취소선을 추가합니다.
- /Subtype /Highlight – 텍스트 강조
- /Subtype /Underline – 텍스트 밑줄
- /Subtype /StrikeOut – 텍스트 취소선
고급 링크 작업
링크 주석은 단순한 탐색 외에도 다양한 작업을 수행할 수 있습니다.
|
1 2 3 |
13 0 obj < < Type Annot Subtype Link Rect [50 50 200 100] A << Type Action S URI URI (https: www.example.com)>> >> endobj |
작업 유형
- /S /GoTo – 문서 내의 특정 위치로 이동
- /S /GoToR – 다른 문서의 특정 위치로 이동
- /S /URI – 웹 URL을 엽니다.
- /S /Launch – 외부 애플리케이션 실행
- /S /JavaScript – JavaScript 코드 실행
주석 스타일
주석의 시각적 스타일은 어피어런스 스트림을 통해 사용자 정의되며, 이를 통해 주석이 사용자에게 표시되는 방식을 정확하게 제어할 수 있습니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
14 0 obj < < Type Annot Subtype Square Rect [100 100 200 150] C [1.0 0.0 0.0] BS << W 2 S S>> /AP < < N 15 0 R>> >> endobj 15 0 obj < < Type XObject Subtype Form BBox [0 0 100 50] Length 85>> stream q 1.0 0.0 0.0 RG 2 w 10 10 80 30 re S Q endstream endobj |
실용적인 구현 지침
문서 구조 통합
성공적인 구현을 위해서는 이러한 요소들이 더 넓은 PDF 문서 아키텍처 내에서 어떻게 상호 작용하는지 이해해야 합니다.
|
1 2 3 4 |
1 0 obj < < Type Catalog Pages 2 0 R Outlines 3 0 R Names << EmbeddedFiles 4 0 R>> /Metadata 5 0 R >> endobj |
✅ 구현 체크리스트
- 문서 카탈로그 설정 – 개요, 이름 및 메타데이터에 대한 올바른 참조를 확인합니다.
- 객체 번호 매기기 – 일관된 객체 번호 매기기와 교차 참조를 유지합니다.
- 스트림 인코딩 – 스트림에 적절한 필터와 인코딩을 적용합니다.
- 검증. – PDF 구조를 검증 도구를 사용하여 확인합니다.
- 호환성 테스트 - 다양한 PDF 뷰어 및 버전에서 테스트를 수행합니다.
일반적인 문제 및 해결 방법
❌ 즐겨찾기가 표시되지 않음.
해결 방법: 문서 카탈로그에 다음 항목이 포함되어 있는지 확인하십시오. /Outlines 항목이 올바르게 추가되었는지, 그리고 개요 계층 구조가 올바르게 구성되어 있는지, 즉 정확한 부모-자식 관계를 가지고 있는지 확인합니다.
❌ 메타데이터 인식 오류.
해결 방법: XML 메타데이터 스트림이 올바르게 형식이 지정되었는지, 올바른 네임스페이스를 사용하는지, 그리고 문서 카탈로그에 제대로 참조되는지 확인합니다. /Type /Metadata 그리고 /Subtype /XML.
❌ 첨부 파일에 접근할 수 없습니다.
해결 방법: 임베디드 파일이 문서 레벨 이름 사전 또는 페이지 레벨 주석 사전에 올바르게 참조되는지, 그리고 파일 사양 사전이 올바르게 구조화되었는지 확인합니다.
결론
PDF 메타데이터 및 북마크 구현을 숙달하는 것은 뛰어난 사용자 경험과 기능을 제공하는 전문적인 문서를 개발하는 데 매우 중요합니다. 이러한 강력한 기능은 다음과 같습니다.
- 향상된 탐색 – 잘 구조화된 북마크 및 목적지를 통해
- 풍부한 메타데이터 – 더 나은 문서 관리 및 검색 기능을 제공합니다.
- 파일 통합 – 문서 내 관련 리소스 번들링
- 인터랙티브 요소 – 주석을 사용하여 매력적인 사용자 경험을 만드는 것
이러한 기능을 올바르게 구현하면 단순한 텍스트와 그래픽을 넘어 포괄적이고 상호 작용 가능한 리소스를 만들 수 있으며, 이는 인간 독자와 자동화 시스템 모두에게 효과적으로 사용될 수 있습니다.
🚀 다음 단계
- PDF 생성 워크플로우에서 이러한 구조를 구현하는 연습을 해보세요.
- 다양한 주석 유형과 북마크 계층 구조를 실험해 보세요.
- 여러 PDF 뷰어에서 구현 결과를 테스트하십시오.
- 이러한 기반을 바탕으로 고급 PDF 기능을 탐색하십시오.