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
- Załaduj dokument i wywołaj
SaveLoadedDocumentDiagnostic - Edytuj słowniki obiektów lub nieskompresowane bajty strumienia bez próby ręcznego utrzymywania
/Length, wierszy xref lubstartxref - Wywołaj
RepairDiagnosticDocumentz ograniczonymi opcjami - Sprawdź
THPDFDiagnosticRepairReporti używaj naprawionego celu tylko, gdy metoda zwracaTrue
Kontrakt naprawy
- Źródło musi zaczynać się nagłówkiem PDF i nosić znacznik
%QDF-1.0wyemitowany przez HotPDF - Sprawdzone obiekty pośrednie są kopiowane w fizycznej kolejności bez ponownego kodowania łańcuchów, słowników lub ładunków strumieni
- Bezpośrednie, pośrednie, brakujące i nieaktualne wartości
/Lengthstrumienia są zastępowane zmierzoną długością ładunku - Klasyczna tabela xref, kanoniczny trailer i dokładne przesunięcie
startxrefsą przebudowywane z zmierzonych pozycji wyjściowych - Trailer zachowuje prawidłowe wartości
/Info,/IDi/Encryptoraz wiąże/Rootz pojedynczym sprawdzonym katalogiem - Cel jest zapisywany przez siostrzany plik tymczasowy i zastępuje żądaną ścieżkę tylko po pomyślnym przejściu wszystkich kontroli
Ś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;