Сделать содержание, используя записи MCID, показать в PDF - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь изучить формат 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 с одной пустой страницей. Дело в том, что я не знаю, как и где разместить эти координаты (если это даже проблема ...).

Любые идеи или рабочие документы, из которых я могу поучиться, очень ценятся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...