Таблица XREF в файле PDF - PullRequest
       2

Таблица XREF в файле PDF

0 голосов
/ 29 марта 2019

Я написал следующий код Hello для файла PDF.

%PDF-1.4
1 0 obj
<< /Type /Catalog /Pages 2 0 R >>
endobj
2 0 obj
<< /Kids [3 0 R] /Count 1 >>
endobj
3 0 obj
<< /Parent 2 0 R /Contents 4 0 R >>
endobj
4 0 obj
<< /Length 20 >>
stream
BT
/F1 40 Tf
100 600 Td
(Hello!) Tj
ET
endstream
endobj
trailer
<<  /Root 1 0 R
    /Size 3
>>
%%EOF

Я хочу знать, как рассчитывается таблица xref? \

ОБНОВЛЕНИЕ ПОСЛЕ ТРЕТЬЕГО КОММЕНТАРИИ:

Могу ли я написать таблицу, как показано ниже?

xref
0 3
0000000000 65536 f
0000000001 00000 n
0000000002 00000 n
0000000003 00000 n

Что не так с этим (если есть)?

Пример на этой странице показывает, что существуют различия (больше 1) между объектами в xref. Однако неясно, почему первый объект имеет смещение 15, а второй объект имеет смещение 87. Как рассчитываются эти цифры?

1 Ответ

0 голосов
/ 31 марта 2019

После редактирования вопроса проблема стала ясной, вы не знаете, в каких единицах измеряется смещение.

Запись n втаблица внешних ссылок описывается как

Формат используемой записи должен быть следующим:

nnnnnnnnnn ggggg n eol

где:

nnnnnnnnnn должно быть 10-значным байтовым смещением в декодированном потоке

ggggg должен быть пятизначным номером генерации

n должен быть ключевым словом, идентифицирующим это как используемую запись

eol должен быть 2-характер конца последовательности строки

"10-разрядное смещение байта в декодированном потоке" может быть немного неясным.К счастью, текст выше сразу сопровождается объяснением:

Смещение байта в декодированном потоке должно быть 10-значным числом, дополненным, если необходимо, начальными нулями, давая число байтов от началафайла до начала объекта.

(ISO 32000-1, раздел 7.5.4 «Таблица перекрестных ссылок»)

Таким образом, смещение здесь на самом деле просто является байтовой позицией в PDF, с которой начинается объект, с которого его объект и номер поколения.


В качестве отступления, один элемент, которому вы также должны строго следоватьдлина такой записи:

общая длина записи всегда должна быть ровно 20 байтов.

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