PDFium Component Docs

LoadDocument — polityki ładowania i naprawione wyjście

Component: TPdf  ·  Unit: PDFium
Otwiera PDF z polityką zgodną, ścisłą lub odzyskiwania i opcjonalnie zapisuje niezależnie zweryfikowaną naprawioną kopię

Syntax

procedure LoadDocument;

 

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

DataPointer. Wskaźnik na surowe dane PDF w pamięci.
SizeNativeUInt. Rozmiar bufora danych w bajtach.
BufferedBoolean. Przy True (domyślnie) TPdf zachowuje własną kopię. Przy False bufor musi pozostać ważny do zwolnienia dokumentu.

 

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

DataTBytes. Zawartość pliku PDF jako tablica bajtów.
BufferedBoolean. Przy True (domyślnie) TPdf zachowuje własną kopię. Przy False tablica bajtów musi pozostać ważna i niezmieniona do zwolnienia dokumentu.

 

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

DataTBytes. Tablica bajtów bazowych zawierająca okno PDF.
IndexInteger. Przesunięcie liczone od zera pierwszego bajtu PDF.
CountInteger. Liczba bajtów PDF do wczytania.
BufferedBoolean. Przy True (domyślnie) TPdf kopiuje tylko wybrane okno. Przy False tablica bajtów bazowych musi pozostać ważna i niezmieniona do zwolnienia dokumentu.

 

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

DataTMemoryStream. TMemoryStream zawierający dane PDF.
BufferedBoolean. Przy True (domyślnie) TPdf zachowuje własną kopię. Przy False pamięć strumienia musi pozostać ważna do zwolnienia dokumentu.

 

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

Starsze przeciążenia używają trybu zgodnego i zachowują dotychczasowe zachowanie, publikując natywną ważność xref i status odzyskiwania przez LastLoadReport. Przeciążenie bez argumentów czyta ze ścieżki zapisanej w FileName. Przeciążenia Pointer, TBytes i TMemoryStream wczytują bezpośrednio z danych w pamięci, omijając system plików. Przeciążenie zakresu bajtów wybiera osadzony PDF z większego kontenera, ramki protokołu lub wielokrotnie używanego bufora odbioru bez tworzenia tymczasowego wycinka TBytes.

Gdy Buffered ma wartość True (domyślnie), TPdf kopiuje dostarczone bajty do swojego zatrzymanego bufora. Gdy False, bufor wywołującego musi pozostać ważny i niezmieniony do UnloadDocument lub Active := False — unika to dodatkowej kopii, ale wymaga starannego zarządzania cyklem życia.

Przeciążenie zakresu bajtów odrzuca wartości ujemne, Index przekraczający długość danych lub Count wykraczający poza pozostałe bajty. Przeciążenie wskaźnikowe odrzuca nil, gdy Size jest niezerowe; przeciążenie TMemoryStream odrzuca strumień nil, zanim jakikolwiek stan dokumentu zostanie zmieniony

Po sukcesie Active staje się True, a wszystkie właściwości strony odzwierciedlają pierwszą stronę (PageNumber = 1). Po niepowodzeniu zgłaszany jest wyjątek EPdfError.

Polityki ładowania

TPdfLoadOptions.Default dostarcza ograniczonych wartości domyślnych dla bajtów źródła, problemów, sekcji xref, wpisów xref i numerów obiektów. PDFium pozostaje semantycznym parserem w każdym trybie; audyt otoki istnieje, ponieważ publiczne ABI PDFium raportuje ważność xref, ale nie udostępnia przełącznika wyłączającego odzyskiwanie parsera

Audyt podąża za klasycznymi tabelami xref, strumieniami xref, rewizjami hybrydowymi i łańcuchami /Prev. Raportuje wadliwe sekcje, cykle, sprzeczne wpisy, uszkodzone przesunięcia obiektów, brakujące znaczniki końcowe, nieobsługiwane filtry strumieni, wyczerpanie budżetu i natywne odzyskiwanie. Przekroczenie skonfigurowanego budżetu audytu ustawia AuditComplete na False i generuje ostrzeżenie; samo w sobie nie twierdzi, że niesprawdzone bajty są niepoprawne

InspectAvailability pozostaje lekką natywną sondą dostępności dla linearyzacji i ładowania strony-pierwszej; nie zastępuje strukturalnego raportu ładowania

Raporty

TPdfLoadReport zawiera Status, CrossReferenceTableValid, UsedRecovery, RecoveryRoute, przesunięcia źródła i strukturalne, liczniki sekcji i wpisów, liczniki konfliktów i uszkodzeń, sumy problemów, stan obcięcia oraz typowaną tablicę Issues. Ten sam raport jest przechowywany w LastLoadReport

TPdfRepairReport zapisuje, czy źródło użyło odzyskiwania, rozmiar wyjścia i liczbę stron, ważność xref wyjścia, tekst błędu terminalowego oraz kompletny raport niezależnej ścisłej weryfikacji ładowania

Naprawione wyjście

SaveAsRepaired prosi PDFium o zapisanie kompletnej kopii nieprzyrostkowej, a następnie otwiera to wyjście w odosobnionym TPdf z plmStrict. Metoda dostarcza bajty dopiero po pomyślnej weryfikacji ważności xref i zgodności liczby stron. Przeciążenie plikowe zapisuje przez tymczasowy plik w tym samym katalogu i atomowo zastępuje plik docelowy

Kompletny zapis od nowa usuwa wcześniejszą historię przyrostową i unieważnia istniejące zakresy bajtów podpisów. Podpisane dokumenty są odrzucane, chyba że AllowSignedDocument jest jawnie True. Metoda naprawia struktury, które PDFium może pomyślnie wczytać i zapisać ponownie; nie gwarantuje odzyskania arbitralnie uszkodzonej treści ani zachowania podpisów cyfrowych

Example

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

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

// Z PDF osadzonego w większej tablicy bajtów
Pdf.LoadDocument(Container, PdfOffset, PdfLength);

// Z TMemoryStream (bez buforowania)
Pdf.LoadDocument(FStream, False);

// Odrzuć ukryte odzyskiwanie parsera
Options := TPdfLoadOptions.Default(plmStrict);
Pdf.LoadDocument(Options, Report);

// Zapisz ponownie i niezależnie zweryfikuj odzyskany dokument
Pdf.SaveAsRepaired('C:\docs\repaired.pdf', RepairReport);

See Also

Active, FileName, LoadCustomDocument, SaveAs