Я пытаюсь изучить формат PDF, и часть этого пути заключается в перестройке всех примеров, приведенных в спецификации PDF (см. ссылка ). Проблема в том, что я не могу понять, как заставить пример с «Оглавлением» работать. Предполагается показать страницу с оглавлением, но я могу достичь только одной пустой страницы.
Вот мой код:
%PDF-1.7
%����
1 0 obj
<< /Type /Catalog
/Outlines 2 0 R
/Pages 3 0 R
>>
endobj
2 0 obj
<< /Type /Outlines
/Count 0
>>
endobj
3 0 obj
<< /Type /Pages
/Kids [ 4 0 R ]
/Count 1
>>
endobj
4 0 obj
<< /Type /Page
/Parent 3 0 R
/MediaBox [0.000000 0.000000 595.275590551 841.88976378]
/Contents 5 0 R
/Resources << >>
>>
endobj
5 0 obj
<< /Length 6 0 R >>
stream
/P <</MCID 1>> BDC
BT T* (TABLE OF CONTENTS) Tj ET EMC
/Lbl <</MCID 11>> BDC
BT T* (1. ) Tj ET EMC
/Reference <</MCID 12>> BDC
BT (Chapter One ) Tj ET EMC
/NonStruct <</MCID 13>> BDC
BT (. . . . . . . . . ) Tj ET EMC
/Reference <</MCID 14>> /BDC
BT (3 ) Tj ET EMC
/Lbl <</MCID 21>> BDC
BT T* (1.1 ) Tj ET EMC
/Reference <</MCID 22>> BDC
BT (Section A ) Tj ET EMC
/NonStruct <</MCID 23>> BDC
BT (. . . . . . . . ) Tj ET EMC
/Reference <</MCID 24>> /BDC
BT (4 ) Tj ET EMC
/Lbl <</MCID 31>> BDC
BT T* (1.2 ) Tj ET EMC
/Reference <</MCID 32>> BDC
BT (Section B ) Tj ET EMC
/NonStruct <</MCID 33>> BDC
BT (. . . . . . . . ) Tj ET EMC
/Reference <</MCID 34>> /BDC
BT (5 ) Tj ET EMC
/Lbl <</MCID 41>> BDC
BT T* (2. ) Tj ET EMC
/Reference <</MCID 42>> BDC
BT (Chapter Two ) Tj ET EMC
/NonStruct <</MCID 43>> BDC
BT (. . . . . . . . . ) Tj ET EMC
/Reference <</MCID 44>> /BDC
BT (6 ) Tj ET EMC
/Lbl <</MCID 51>> BDC
BT T* (3. ) Tj ET EMC
/Reference <</MCID 52>> BDC
BT (Chapter Three ) Tj ET EMC
/NonStruct <</MCID 53>> BDC
BT (. . . . . . . . ) Tj ET EMC
/Reference <</MCID 54>> /BDC
BT (7 ) Tj ET EMC
/Lbl <</MCID 61>> BDC
BT T* (3.1 ) Tj ET EM
/Reference <</MCID 62>> BDC
BT (Section A ) Tj ET EM
/NonStruct <</MCID 63>> BDC
BT (. . . . . . . . ) Tj ET EM
/Reference <</MCID 64>> /BDC
BT (8 ) Tj ET EMC
endstream
endobj
6 0 obj
1534
endobj
400 0 obj
<< /Type /StructElem
/S TOC
/K [201 0 R 211 0 R 301 0 R 214 0 R 215 0 R 302 0 R]
>>
endobj
201 0 obj
<< /Type /StructElem
/S /Caption
/P 400 0 R
/K [101 0 R]
>>
endobj
101 0 obj
<< /Type /StructElem
/S /P
/P 201 0 R
/Pg 4 0 R
/K 1
>>
endobj
211 0 obj
<< /Type /StructElem
/S /TOCI
/P 400 0 R
/K [111 0 R 112 0 R 113 0 R 114 0 R]
>>
endobj
111 0 obj
<< /Type /StructElem
/S /Lbl
/P 211 0 R
/Pg 4 0 R
/K 11
>>
endobj
112 0 obj
<< /Type /StructElem
/S /Reference
/P 211 0 R
/Pg 4 0 R
/K 12
>>
endobj
113 0 obj
<< /Type /StructElem
/S /NonStruct
/P 211 0 R
/Pg 4 0 R
/K 13
>>
endobj
114 0 obj
<< /Type /StructElem
/S /Reference
/P 211 0 R
/Pg 4 0 R
/K 14
>>
endobj
301 0 obj
<< /Type /StructElem
/S /TOC
/P 400 0 R
/K [212 0 R 213 0 R]
>>
endobj
212 0 obj
<< /Type /StructElem
/S /TOCI
/P 301 0 R
/K [121 0 R 122 0 R 123 0 R 124 0 R]
>>
endobj
121 0 obj
<< /Type /StructElem
/S /Reference
/P 212 0 R
/Pg 4 0 R
/K 21
>>
endobj
122 0 obj
<< /Type /StructElem
/S /Reference
/P 212 0 R
/Pg 4 0 R
/K 22
>>
endobj
123 0 obj
<< /Type /StructElem
/S /Reference
/P 212 0 R
/Pg 4 0 R
/K 23
>>
endobj
124 0 obj
<< /Type /StructElem
/S /Reference
/P 212 0 R
/Pg 4 0 R
/K 24
>>
endobj
213 0 obj
<< /Type /StructElem
/S /TOCI
/P 301 0 R
/K [131 0 R 132 0 R 133 0 R 134 0 R]
>>
endobj
131 0 obj
<< /Type /StructElem
/S /Reference
/P 213 0 R
/Pg 4 0 R
/K 31
>>
endobj
132 0 obj
<< /Type /StructElem
/S /Reference
/P 213 0 R
/Pg 4 0 R
/K 32
>>
endobj
133 0 obj
<< /Type /StructElem
/S /Reference
/P 213 0 R
/Pg 4 0 R
/K 33
>>
endobj
134 0 obj
<< /Type /StructElem
/S /Reference
/P 213 0 R
/Pg 4 0 R
/K 34
>>
endobj
214 0 obj
<< /Type /StructElem
/S /TOCI
/P 400 0 R
/K [141 0 R 142 0 R 143 0 R 144 0 R]
>>
endobj
141 0 obj
<< /Type /StructElem
/S /Reference
/P 214 0 R
/Pg 4 0 R
/K 41
>>
endobj
142 0 obj
<< /Type /StructElem
/S /Reference
/P 214 0 R
/Pg 4 0 R
/K 42
>>
endobj
143 0 obj
<< /Type /StructElem
/S /Reference
/P 214 0 R
/Pg 4 0 R
/K 43
>>
endobj
144 0 obj
<< /Type /StructElem
/S /Reference
/P 214 0 R
/Pg 4 0 R
/K 44
>>
endobj
215 0 obj
<< /Type /StructElem
/S /TOCI
/P 400 0 R
/K [151 0 R 152 0 R 153 0 R 154 0 R]
>>
endobj
151 0 obj
<< /Type /StructElem
/S /Reference
/P 215 0 R
/Pg 4 0 R
/K 51
>>
endobj
152 0 obj
<< /Type /StructElem
/S /Reference
/P 215 0 R
/Pg 4 0 R
/K 52
>>
endobj
153 0 obj
<< /Type /StructElem
/S /Reference
/P 215 0 R
/Pg 4 0 R
/K 53
>>
endobj
154 0 obj
<< /Type /StructElem
/S /Reference
/P 215 0 R
/Pg 4 0 R
/K 54
>>
endobj
302 0 obj
<< /Type /StructElem
/S /TOC
/P 400 0 R
/K [216 0 R]
>>
endobj
216 0 obj
<< /Type /StructElem
/S /TOCI
/P 302 0 R
/K [161 0 R 162 0 R 163 0 R 164 0 R]
>>
endobj
161 0 obj
<< /Type /StructElem
/S /Reference
/P 216 0 R
/Pg 4 0 R
/K 61
>>
endobj
162 0 obj
<< /Type /StructElem
/S /Reference
/P 216 0 R
/Pg 4 0 R
/K 62
>>
endobj
163 0 obj
<< /Type /StructElem
/S /Reference
/P 216 0 R
/Pg 4 0 R
/K 63
>>
endobj
164 0 obj
<< /Type /StructElem
/S /Reference
/P 216 0 R
/Pg 4 0 R
/K 64
>>
endobj
xref
0 42
0000000000 65535 f
0000000024 00000 n
0000000104 00000 n
0000000160 00000 n
0000000250 00000 n
0000000251 00000 n
0000000252 00000 n
0000000253 00000 n
0000000254 00000 n
0000000255 00000 n
0000000256 00000 n
0000000257 00000 n
0000000258 00000 n
0000000259 00000 n
0000000260 00000 n
0000000261 00000 n
0000000262 00000 n
0000000263 00000 n
0000000264 00000 n
0000000265 00000 n
0000000266 00000 n
0000000267 00000 n
0000000268 00000 n
0000000269 00000 n
0000000270 00000 n
0000000271 00000 n
0000000272 00000 n
0000000273 00000 n
0000000274 00000 n
0000000275 00000 n
0000000276 00000 n
0000000277 00000 n
0000000278 00000 n
0000000279 00000 n
0000000280 00000 n
0000000281 00000 n
0000000282 00000 n
0000000283 00000 n
0000000284 00000 n
0000000285 00000 n
0000000286 00000 n
0000000287 00000 n
trailer
<< /Size 42
/Root 1 0 R
>>
startxref
5994
%%EOF
Несколько замечаний по коду:
- Расположение объектов в таблице перекрестных ссылок неверно, но, насколько я знаю, это не должно иметь значения.
- Пример кода в спецификации можно найти здесь: стр. 718 - 720, H.8.1 Содержание PDF спецификация . На странице 720 говорится:
объекты 121-124, 131-134, 141-144, 151-154 и 161-164, ссылающиеся на MCID 21-24, 31-34, 41-44, 51-54 и 61-64, опущены в интересах пространства.
- Я вручную заполнил эти недостающие объекты и все остальное, чего не хватало в примере кода.
Я пытался найти решение в Интернете, но довольно сложно найти информацию об этом аспекте PDF, поскольку большинство вопросов / информации о PDF не касаются внутренней работы PDF.
Я подозреваю, что проблема заключается в том, что я не даю никаких координат, потому что как объект страницы должен знать, где он должен размещать контент? И если он нигде не размещен, вы не сможете увидеть его в результате, поэтому мы получим PDF с одной пустой страницей. Дело в том, что я не знаю, как и где разместить эти координаты (если это даже проблема ...).
Любые идеи или рабочие документы, из которых я могу поучиться, очень ценятся.