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
Trueפירושו שהטרנזקציה התקבלה, לרבות מקרה האפס-שינויים עבור מסמך שכבר תואםFalseפירושו שהטרנזקציה בוצע rollback אחרי כשל מגבלה, נסיגת validation, חריגה, או מדיניותRequireFullConformanceשלא נתקיימהReport.ValidationSucceededהיא התוצאה הסמכותית של conformance מלא אחרי commit של תיקון- עם אפשרויות ברירת המחדל, תיקונים בטוחים יכולים לעשות commit גם כשממצאי validation לא-בטוחים לא-קשורים נותרים מפורשים ב-
Issuesוב-Findings
גבול התיקון הבטוח
השיטה יכולה לנרמל את ה-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;