PDFium Delphi Component Docs

Политики LoadDocument и восстановленный вывод

Компонент: TPdf  ·  Модуль: PDFium
Открывает PDF с политикой compatible, strict или recovery и при необходимости записывает независимо проверенную восстановленную копию

Syntax

procedure LoadDocument;

 

procedure LoadDocument(Data: Pointer; Size: NativeUInt; Buffered: Boolean = True);

DataPointer. Указатель на необработанные данные PDF в памяти
SizeNativeUInt. Размер буфера данных в байтах
BufferedBoolean. При True (по умолчанию) TPdf сохраняет собственную копию. При False буфер должен оставаться действительным до выгрузки документа

 

procedure LoadDocument(const Data: TBytes; Buffered: Boolean = True);

DataTBytes. Содержимое PDF-файла в виде массива байтов
BufferedBoolean. При True (по умолчанию) TPdf сохраняет собственную копию. При False массив байтов должен оставаться действительным и неизменным до выгрузки документа

 

procedure LoadDocument(const Data: TBytes; Index, Count: Integer; Buffered: Boolean = True);

DataTBytes. Базовый массив байтов, содержащий окно PDF
IndexInteger. Смещение первого байта PDF с отсчётом от нуля
CountInteger. Количество байтов PDF для загрузки
BufferedBoolean. При True (по умолчанию) TPdf копирует только выбранное окно. При False базовый массив байтов должен оставаться действительным и неизменным до выгрузки документа

 

procedure LoadDocument(Data: TMemoryStream; Buffered: Boolean = True);

DataTMemoryStream. TMemoryStream, содержащий данные PDF
BufferedBoolean. При True (по умолчанию) TPdf сохраняет собственную копию. При False память потока должна оставаться действительной до выгрузки документа

 

procedure LoadDocument(const Options: TPdfLoadOptions; out Report: TPdfLoadReport);

procedure LoadDocument(Data: Pointer; Size: NativeUInt; const Options: TPdfLoadOptions; out Report: TPdfLoadReport; Buffered: Boolean = True);

procedure LoadDocument(const Data: TBytes; const Options: TPdfLoadOptions; out Report: TPdfLoadReport; Buffered: Boolean = True);

procedure LoadDocument(const Data: TBytes; Index, Count: Integer; const Options: TPdfLoadOptions; out Report: TPdfLoadReport; Buffered: Boolean = True);

 

function SaveAsRepaired(Stream: TStream; out Report: TPdfRepairReport; AllowSignedDocument: Boolean = False): Boolean;

function SaveAsRepaired(const FileName: string; out Report: TPdfRepairReport; AllowSignedDocument: Boolean = False): Boolean;

Description

Устаревшие перегрузки используют режим compatible и сохраняют существующее поведение, публикуя исходную достоверность xref и статус восстановления через LastLoadReport. Перегрузка без аргументов читает из пути, сохранённого в FileName. Перегрузки Pointer, TBytes и TMemoryStream загружают напрямую из данных в памяти, минуя файловую систему. Перегрузка байтового диапазона выбирает встроенный PDF из большего контейнера, кадра протокола или переиспользуемого буфера приёма без создания временного среза TBytes

Когда Buffered равно True (по умолчанию), TPdf копирует переданные байты в свой удерживаемый буфер. При False буфер вызывающего должен оставаться действительным и неизменным до UnloadDocument или Active := False — это избавляет от лишнего копирования, но требует аккуратного управления временем жизни

Перегрузка байтового диапазона отклоняет отрицательные значения, Index за пределами длины данных или Count, выходящий за оставшиеся байты. Перегрузка с указателем отклоняет nil, когда Size не равно нулю; перегрузка TMemoryStream отклоняет поток nil до изменения любого состояния документа

При успехе Active становится True и все свойства страницы отражают первую страницу (PageNumber = 1). При неудаче возникает исключение EPdfError

Load policies

TPdfLoadOptions.Default предоставляет ограниченные значения по умолчанию для байтов источника, проблем, секций xref, записей xref и номеров объектов. PDFium остаётся семантическим анализатором в каждом режиме; аудит обёртки существует потому, что публичный ABI PDFium сообщает достоверность xref, но не предоставляет переключателя, отключающего восстановление анализатора

Аудит следует классическим таблицам xref, потокам xref, гибридным редакциям и цепочкам /Prev. Он сообщает о некорректных секциях, циклах, конфликтующих записях, повреждённых смещениях объектов, отсутствующих конечных маркерах, неподдерживаемых фильтрах потоков, исчерпании бюджета и собственном восстановлении. Превышение настроенного бюджета аудита устанавливает AuditComplete в False и создаёт предупреждение; само по себе это не утверждает, что непроверенные байты недействительны

InspectAvailability остаётся лёгким собственным тестом доступности для линеаризации и загрузки с первой страницы; он не заменяет структурный отчёт загрузки

Reports

TPdfLoadReport включает Status, CrossReferenceTableValid, UsedRecovery, RecoveryRoute, смещения источника и структуры, счётчики секций и записей, счётчики конфликтов и повреждений, итоги проблем, состояние усечённости и типизированный массив Issues. Тот же отчёт сохраняется в LastLoadReport

TPdfRepairReport фиксирует, использовал ли источник восстановление, размер и количество страниц вывода, достоверность xref вывода, текст конечной ошибки и полный независимый отчёт проверки строгой загрузки

Repaired output

SaveAsRepaired просит PDFium записать полную неинкрементальную копию, затем открывает этот вывод в изолированном TPdf с plmStrict. Метод отдаёт байты только после прохождения проверок достоверности xref и согласованности количества страниц. Файловая перегрузка пишет через временный файл в том же каталоге и атомарно заменяет назначение

Полная перезапись удаляет прежнюю инкрементальную историю и делает недействительными существующие байтовые диапазоны подписей. Подписанные документы отклоняются, если AllowSignedDocument явно не равен True. Метод восстанавливает структуры, которые PDFium может успешно загрузить и перезаписать; он не гарантирует восстановление произвольного повреждённого содержимого или сохранение цифровых подписей

Example

// From file
Pdf.FileName := 'C:\docs\file.pdf';
Pdf.LoadDocument;

// From TBytes
var Bytes: TBytes;
Bytes := TFile.ReadAllBytes('file.pdf');
Pdf.LoadDocument(Bytes);

// From a PDF embedded in a larger byte array
Pdf.LoadDocument(Container, PdfOffset, PdfLength);

// From TMemoryStream (unbuffered)
Pdf.LoadDocument(FStream, False);

// Reject hidden parser recovery
Options := TPdfLoadOptions.Default(plmStrict);
Pdf.LoadDocument(Options, Report);

// Rewrite and independently verify a recovered document
Pdf.SaveAsRepaired('C:\docs\repaired.pdf', RepairReport);

See Also

Active, FileName, LoadCustomDocument, SaveAs