Как найти словарь трейлера?

Просматривая спецификацию PDF, говорится, что трейлер предшествует startxref . Что для меня означает, что xref может появиться в любом месте документа, но трейлер по-прежнему появляется перед startxref . Это имеет смысл до тех пор, пока вам не придется анализировать его, потому что вам нужно выполнять синтаксический анализ в обратном порядке, вы не можете принимать во внимание комментарии или строки. Тогда давайте получим немного более дурацкое. [122 33] Это совершенно правильный трейлер. Первый - настоящий трейлер, а второй - в виде «веревочки». В этом случае обратный синтаксический анализ не сможет уловить комментарии. Поиск трейлера строки не удастся, если он находится отдельно от комментария или строки.Мне было интересно, как лучше всего узнать, где начинается трейлер?

Обновление - этот трейлер, кажется, открывается в Acrobat Reader

%PDF-1.3
%âãÏÓ
xref
0 4
00000000 65535 f
00000110 00000 n
00000250 00000 n
00000315 00000 n
00000576 00000 n

1 0 obj <<
  /Type /Catalog
  /Pages 2 0 R
  /OpenAction [ 3 0 R /XYZ null null null ]
  /PageLabels << /Nums [0 << /S /D >> ] >>
>>
endobj
2 0 obj <<
  /Type /Pages
  /Kids [ 3 0 R ]
  /Count 1
>>
endobj
3 0 obj <<
  /Type /Page
  /Parent 2 0 R
  /Resources << >>
  /MediaBox [ 0 0 612 792 ]
>>
endobj
4 0 obj <<
  /Producer (Me)
  /CreationDate (D:20110626000000Z)
>>
endobj

trailer<< %\
  /Size 4 %\
  /Root 1 0 R %\
  /Info 4 0 R %\
  /Key (\
trailer<< %\
  /Size 4 %\
  /Root 2 0 R %\
  /Info 3 0 R %\
>>%)
>>%)
% test test )
startxref
 15
%%EOF

Что касается синтаксиса, это соответствует спецификации. Каким-то образом кажется, что они могут узнать, находятся ли они в комментарии или в строке. Анализируя L-R, второй трейлер находится в строке с завершенным%, с комментарием после трейлера. Но при анализе R-L вы не знаете, является ли первый) частью комментария или концом определения строки.

Другой пример:

%PDF-1.3
%âãÏÓ
xref
0 8
0000000000 65535 f
0000000210 00000 n
0000000357 00000 n
0000000428 00000 n
0000000533 00000 n
0000000612 00000 n
0000000759 00000 n
0000000830 00000 n
0000000935 00000 n

1 0 obj <<
  /Type /Catalog
  /Pages 2 0 R
  /OpenAction [ 3 0 R /XYZ null null null ]
  /PageLabels << /Nums [0 << /S /D >> ] >>
>>
endobj
2 0 obj <<
  /Type /Pages
  /Kids [ 3 0 R ]
  /Count 1
>>
endobj
3 0 obj <<
  /Type /Page
  /Parent 2 0 R
  /Resources << >>
  /MediaBox [ 0 0 612 792 ]
>>
endobj
4 0 obj <<
  /Producer (Me)
  /CreationDate (D:20110626000000Z)
>>
endobj
5 0 obj <<
  /Type /Catalog
  /Pages 6 0 R
  /OpenAction [ 7 0 R /XYZ null null null ]
  /PageLabels << /Nums [0 << /S /D >> ] >>
>>
endobj
6 0 obj <<
  /Type /Pages
  /Kids [ 7 0 R ]
  /Count 1
>>
endobj
7 0 obj <<
  /Type /Page
  /Parent 6 0 R
  /Resources << >>
  /MediaBox [ 0 0 100 100 ]
>>
endobj
8 0 obj <<
  /Producer (Me)
  /CreationDate (D:20110626000000Z)
>>
endobj

trailer<< %\
  /Size 8 %\
  /Root 1 0 R %\
  /Info 4 0 R %\
  /Key (\
trailer<< %\
  /Size 8 %\
  /Root 5 0 R %\
  /Info 8 0 R %\
>>%)
>>%)
% test test )
startxref
 17
%%EOF

Этот пример отображается правильно в Adobe. В моем последнем случае вы заявили, что он потерпит неудачу, потому что "корневой" узел недействителен, но в этом новом примере корень действителен, но на самом деле он никогда не использовался. Так разве он не должен отображать окно 100x100 вместо 8,5 x11?

Что касается ресурсов

  (Required; inheritable) A dictionary containing any resources required by the page 
(see Section 3.7.2, “Resource Dictionaries”). If the page requires no resources, the 
value of this entry should be an empty dictionary. Omitting the entry entirely
indicates that the resources are to be inherited from an ancestor node in the page 
tree.
5
задан Rahly 29 June 2011 в 05:35
поделиться