Aanpasbare diagnose-documenten en -reparatie
SaveLoadedDocumentDiagnostic produceert deterministische, uitgepakte uitvoer voor inspectie en gecontroleerde tekstbewerking, terwijl RepairDiagnosticDocument het bewerkte bestand terugzet naar een structureel geldige PDF
Round-trip-werkstroom
- Laad een document en roep
SaveLoadedDocumentDiagnosticaan - Bewerk objectwoordenlijsten of niet-gecomprimeerde stroombytes zonder te proberen
/Length, xref-rijen ofstartxrefhandmatig te onderhouden - Roep
RepairDiagnosticDocumentaan met begrensde opties - Inspecteer
THPDFDiagnosticRepairReporten gebruik het gerepareerde doel alleen wanneer de methodeTrueretourneert
Reparatiecontract
- De bron moet beginnen met een PDF-header en de
%QDF-1.0-markering dragen die door HotPDF wordt uitgezonden - Gevallideerde indirecte objecten worden in fysieke volgorde gekopieerd zonder strings, woordenlijsten of stroompayloads te hercoderen
- Directe, indirecte, ontbrekende en verouderde stroom-
/Length-waarden worden vervangen door de gemeten payloadlengte - Een klassieke xref-tabel, canonieke trailer en exacte
startxref-offset worden herbouwd uit gemeten uitvoerposities - De trailer behoudt geldige
/Info-,/ID- en/Encrypt-waarden en bindt/Rootaan de enkele gevalideerde Catalogus - Het doel wordt geschreven via een sibling tijdelijk bestand en vervangt het gevraagde pad alleen nadat alle controles slagen
Strikte afwijzing
De reparatie faalt veilig bij dubbele objectnummers, meerdere of ontbrekende Catalogi, gebroken trailerverwijzingen, niet-commentaire bytes tussen objecten, ongeldige objectgrammatica, object- of invoerlimieten, klassieke xref-offsets breder dan tien cijfers en strikte herlaadvalidatiefouten
Markeringen binnen gevalideerde objecten worden overgeslagen, dus objectachtige tekst in strings en gecodeerde stroompayloads wordt geen xref-vermelding
Begrensde prestaties
De scanner leest vensters van 1 MiB met een korte carry, kopieert objectbereiken rechtstreeks tussen bestandsstromen en behoudt alleen gevalideerde objectmetagegevens plus begrensde woordenlijstsondes
MaxInputBytes, MaxObjectCount en MaxObjectNumber begrenzen scannen, behouden metagegevens en uitgezonden xref-rijen vóór uitvoer wordt gepubliceerd
Pascal-voorbeeld
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;