Redigerbare diagnosticeringsdokumenter og reparation

SaveLoadedDocumentDiagnostic producerer deterministisk, udpakket output til inspektion og kontrolleret tekstredigering, mens RepairDiagnosticDocument gør den redigerede fil til en strukturelt gyldig PDF igen

Round-trip-arbejdsgang

  1. Indlæs et dokument, og kald SaveLoadedDocumentDiagnostic
  2. Redigér objektordbøger eller ukomprimerede strømbytes uden at forsøge manuelt at vedligeholde /Length, xref-rækker eller startxref
  3. Kald RepairDiagnosticDocument med afgrænsede indstillinger
  4. Undersøg THPDFDiagnosticRepairReport, og brug kun det reparerede mål, når metoden returnerer True

Reparationskontrakt

Streng afvisning

Reparationen fejler lukket for dublerede objektnumre, flere eller manglende Catalog-objekter, ødelagte trailerreferencer, bytes uden for kommentarer mellem objekter, ugyldig objektgrammatik, objekt- eller inputgrænser, klassiske xref-forskydninger bredere end ti cifre og strenge valideringsfejl ved genindlæsning

Markører i validerede objekter springes over, så objektlignende tekst i strenge og kodede strømdata ikke bliver en xref-post

Afgrænset ydeevne

Scanneren læser vinduer på 1 MiB med et kort overlap, kopierer objektområder direkte mellem filstrømme og beholder kun validerede objektmetadata samt afgrænsede ordbogsprober

MaxInputBytes, MaxObjectCount og MaxObjectNumber begrænser scanning, bevarede metadata og udsendte xref-rækker, før output publiceres

Pascal-eksempel

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;

Relateret API