Edytowalne dokumenty diagnostyczne i naprawa

SaveLoadedDocumentDiagnostic wytwarza deterministyczne, rozpakowane wyjście do inspekcji i kontrolowanej edycji tekstu, podczas gdy RepairDiagnosticDocument zamienia edytowany plik z powrotem w strukturalnie prawidłowy PDF

Przepływ pracy w obie strony

  1. Załaduj dokument i wywołaj SaveLoadedDocumentDiagnostic
  2. Edytuj słowniki obiektów lub nieskompresowane bajty strumienia bez próby ręcznego utrzymywania /Length, wierszy xref lub startxref
  3. Wywołaj RepairDiagnosticDocument z ograniczonymi opcjami
  4. Sprawdź THPDFDiagnosticRepairReport i używaj naprawionego celu tylko, gdy metoda zwraca True

Kontrakt naprawy

Ścisłe odrzucanie

Naprawa kończy się bezpiecznie przy zduplikowanych numerach obiektów, wielu lub brakujących katalogach, złamanych referencjach traileru, bajtach niebędących komentarzami między obiektami, nieprawidłowej gramatyce obiektów, limitach obiektów lub wejścia, przesunięciach klasycznego xref szerszych niż dziesięć cyfr i ścisłych niepowodzeniach ponownej walidacji ładowania

Znaczniki wewnątrz sprawdzonych obiektów są pomijane, więc tekst przypominający obiekt w łańcuchach i zakodowane ładunki strumieni nie stają się wpisem xref

Ograniczona wydajność

Skaner czyta okna 1 MiB z krótkim przeniesieniem, kopiuje zakresy obiektów bezpośrednio między strumieniami plików i zachowuje tylko metadane sprawdzonych obiektów plus ograniczone sondy słownikowe

MaxInputBytes, MaxObjectCount i MaxObjectNumber ograniczają skanowanie, zachowane metadane i wyemitowane wiersze xref przed opublikowaniem wyjścia

Przykład w Pascalu

var
  Options: THPDFDiagnosticRepairOptions;
  Report: THPDFDiagnosticRepairReport;
begin
  Options := THPDFDiagnosticRepairOptions.Default;
  Options.MaxInputBytes := Int64(16) * 1024 * 1024 * 1024;

  if not THotPDF.RepairDiagnosticDocument(
    'edited-diagnostic.pdf',
    'repaired.pdf',
    Options,
    Report
  ) then
    raise Exception.Create(string(Report.Diagnostic));
end;

Powiązane API