PDFium Delphi Component Docs

Політики LoadDocument і відновлений вивід

Component: TPdf  ·  Unit: 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