THotPDF.RepairPDFA4 Method

מריץ טרנזקציה מוגבלת של object graph שמחילה נרמול דטרמיניסטי של PDF/A-4, מאמתת את התוצאה, ומבצעת commit לערכת התיקונים הבטוחה המלאה או rollback למצב המסמך המקורי

הצהרה

function RepairPDFA4(
  const Options: THPDFPDFA4RepairOptions;
  out Report: THPDFPDFA4RepairReport;
  out Issues: THPDFPDFA4ValidationIssues): boolean; overload;

function RepairPDFA4(
  const Options: THPDFPDFA4RepairOptions;
  out Report: THPDFPDFA4RepairReport;
  out Issues: THPDFPDFA4ValidationIssues;
  out Findings: THPDFComplianceFindings): boolean; overload;

חוזה ה-commit

גבול התיקון הבטוח

השיטה יכולה לנרמל את ה-header של PDF 2.0, ליצור trailer ID חסר, ליצור או לתקן metadata streams ומילונים, לבצע קנוניזציה של זיהוי PDF/A לפי namespace URI תוך שימור כל קידומת RDF חוקית, להסיר רשומות Catalog אסורות, ולהסיר מבני alternate-presentation

תיקון XMP של UTF-8 מסיר את byte אסור של packet-header ותכונות קידוד, משתמש ב-namespace הקנוני של זיהוי PDF/A, כותב part=4 ו-rev=2020, ובוחר את תכונת ה-conformance הנכונה: base, engineering או associated-file

צינור התיקון אף פעם לא כותב מחדש content streams של עמודים או הערות, גופנים, מרחבי צבע, שקיפות, תמונות, אופרטורים גרפיים או טקסט מחולץ

Rollback ויכולת ביקורת

Snapshots של ה-graph מכסים מוטציות מילון ו-bytes של metadata stream, כך ש-rollback משחזר את ה-header המקורי, מצב ה-trailer, ה-object graph, ה-payload של ה-XMP ותוכן העמודים

ה-overload עם הממצאים המשותפים מצרף פעולות תיקון, סטטוס שהוחל/לא טופל/נכשל/בוצע בו rollback, מוני תיקונים, מזהי כלל יציבים, סעיפים, נתיבי אובייקט, מספרי אובייקט ומיקומי עמודים

תקציבי אובייקטים, מוטציות, בעיות שנשמרו, bytes מפוענחים ו-token של תוכן מונעים מקבצים עוינים להפוך את התיקון או שערי ה-validation שלו לעבודה בלתי-מוגבלת

דוגמה

var
  Options: THPDFPDFA4RepairOptions;
  Report: THPDFPDFA4RepairReport;
  Issues: THPDFPDFA4ValidationIssues;
begin
  Options := THPDFPDFA4RepairOptions.Default;
  Options.Profile := p4pAutomatic;

  if not PDF.RepairPDFA4(Options, Report, Issues) then
    raise Exception.Create('PDF/A-4 repair rolled back');

  if not Report.ValidationSucceeded then
    LogRemainingPDFA4Issues(Issues);
end;

ממשקי API קשורים