Redigerbara diagnostikdokument och reparation
SaveLoadedDocumentDiagnostic producerar deterministisk, uppackad utdata för inspektion och kontrollerad textredigering, medan RepairDiagnosticDocument förvandlar den redigerade filen tillbaka till ett strukturellt giltigt PDF
Rundturarbetsflöde
- Ladda in ett dokument och anropa
SaveLoadedDocumentDiagnostic - Redigera objektordlistor eller okomprimerade strömbytes utan att försöka underhålla
/Length, xref-rader ellerstartxrefmanuellt - Anropa
RepairDiagnosticDocumentmed begränsade alternativ - Inspektera
THPDFDiagnosticRepairReportoch använd det reparerade målet endast när metoden returnerarTrue
Reparationskontrakt
- Källan måste börja med en PDF-header och bära
%QDF-1.0-markören emitterad av HotPDF - Validerade indirekta objekt kopieras i fysisk ordning utan att koda om strängar, ordlistor eller strömnyttolaster
- Direkta, indirekta, saknade och föråldrade ström-
/Length-värden ersätts med den uppmätta nyttolastlängden - En klassisk xref-tabell, kanonisk trailer och exakt
startxref-offset byggs om från uppmätta utgångspositioner - Trailern bevarar giltiga
/Info-,/ID- och/Encrypt-värden och binder/Roottill den enda validerade Catalog-en - Målet skrivs genom en syskontemporär fil och ersätter den begärda sökvägen endast efter att alla kontroller lyckats
Strikt avvisning
Reparationen misslyckas stängt för duplicerade objektnummer, flera eller saknade Catalog-objekt, brutna trailerreferenser, icke-kommentarbytes mellan objekt, ogiltig objektgrammatik, objekt- eller indatagränser, klassiska xref-offsetar bredare än tio siffror och strikta omladdningsvalideringsfel
Markörer inuti validerade objekt hoppas över, så objektliknande text i strängar och kodade strömnyttolaster blir inte en xref-post
Begränsad prestanda
Skannern läser 1 MiB-fönster med en kort överföring, kopierar objektrangelement direkt mellan filströmmar och behåller endast validerad objektmetadata plus begränsade ordliste-prober
MaxInputBytes, MaxObjectCount och MaxObjectNumber begränsar skanning, behållen metadata och emitterade xref-rader före att utdata publiceras
Pascal-exempel
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;