Headless-перекрёстные ссылки

HPDFHeadlessXRef поставляет проверенное индексирование xref-потоков и object-stream, используемое THPDFHeadlessDocument; словари и заголовки object-stream используют общий парсер объектов, а поля big-endian — общий байтовый читатель Direct File

HPDFHeadlessDecodeXRefRows(Dictionary, DecodedBytes, MaxObjects, CancellationToken) читает прямые записи Type, Size, W и необязательный Index после того, как вызывающий декодировал фильтры и предикторы

THPDFHeadlessXRefRows — массив записей THPDFHeadlessXRefRow с ObjectNumber и общим THPDFDirectXrefEntry в поле Entry; типы записи ноль, один и два обозначают свободные, прямые и сжатые объекты

Ширины варьируются от нуля до восьми байтов, опущенные поля используют значения PDF по умолчанию, смещения сохраняют точность Int64, а перекрытия подсекций, несовпадения длины полезной нагрузки, выходящие за диапазон поколения и беззнаковое переполнение отклоняются до индексирования объектов

HPDFHeadlessReadObjectStreamIndex(Dictionary, DecodedBytes, MaxObjects, MaxDecodedBytes, CancellationToken) проверяет прямые Type=ObjStm, N и First, затем разбирает числовой заголовок общим парсером

THPDFHeadlessObjectStreamMembers — массив записей THPDFHeadlessObjectStreamMember с ObjectNumber, смещением Offset в декодированной полезной нагрузке с нуля и положительной Length; дубликаты номеров объектов, нецелые пары, некорректные смещения и настроенные бюджеты отклоняются

HPDFHeadlessObjectStreamBody(Members, DecodedBytes, MemberIndex, ExpectedObjectNumber) возвращает точный срез члена после сверки авторитетного номера члена xref с заголовком его контейнера; документный вызывающий разбирает этот срез общим парсером

EHPDFHeadlessXRefError сообщает сообщение и флаг «только чтение» LimitExceeded, а отмена возбуждает EHPDFOperationCancelled; словари и декодированные буферы принадлежат вызывающим, а возвращаемые массивы содержат записи-значения

Провайдер отвечает за байтовое индексирование и валидацию; приоритет ревизий, слияние гибридных боковых секций, декодирование фильтров, расшифровка, кеширование объектов и владение документом остаются за загрузчиком документа

Точные числовые значения

Общий парсер сохраняет исходный токен источника, когда конвертация в Single округлила бы значение или его модуль превышает 16777216; целочисленные читатели перекрёстных ссылок и object-stream предпочитают этот токен для точных смещений и индексов Int64, а малые точные целые сохраняют экономичный по выделениям памяти путь

Тесты используют общего писателя и независимые PDF со сжатыми объектами, покрывают 40-битные смещения, ширины и значения по умолчанию, предикторы, разреженные диапазоны, гибридный приоритет, некорректные индексы членов и циклы ревизий, сохраняя исходные пороги выделений памяти и пропускной способности парсера