THotPDF.RepairPDFUA2Structure Method
מתקן פגמים שניתנים לשחזור של namespace, תכונות, מבנה ונגישות של PDF/UA-2 בתוך טרנזקציית graph מסוג copy-on-write, ומאמת את ה-graph המועמד לפני commit
הצהרה
function RepairPDFUA2Structure(
const Options: THPDFUA2RepairOptions;
out Report: THPDFUA2RepairReport;
out Issues: THPDFUA2ValidationIssues): boolean; overload;
function RepairPDFUA2Structure(
const Options: THPDFUA2RepairOptions;
out Report: THPDFUA2RepairReport;
out Issues: THPDFUA2ValidationIssues;
out Findings: THPDFComplianceFindings): boolean; overload;
יחידה
HPDFDoc
אפשרויות תיקון
התחילו מ-THPDFUA2RepairOptions.Default ודרסו רק את החלטות המדיניות שזרימת הקלט מחייבת
| שדה | מטרה |
|---|---|
NormalizeDuplicateNamespaces | בונה מחדש את StructTreeRoot/Namespaces עם מילון עקיף קנוני אחד לכל URI ודוחה role maps סותרים |
RegisterReferencedNamespaces | רושם מילוני namespace תקפים שאליהם מפנים אלמנטי מבנה, תכונות או role maps מודעי-namespace |
RepairStandardStructureNamespaces | מקצה את namespace של PDF 2.0 לתפקידים סטנדרטיים כשה-namespace חסר או פגום, ותמיד מנרמל את Document ברמה העליונה |
RepairAttributeNamespaces | מבצע קנוניזציה של הפניות namespace של תכונות ומסיר רשומות namespace פגומות מבעלים סטנדרטיים |
RepairAttributeRevisions | מנרמל מספרי revision שליליים או שבריים ומסיר רשומות revision יתומות ממערכי תכונות |
RepairListSemantics | מנרמל מספור, דגלי המשך, סוגי המשך פגומים ו-caption אחד שאינו במקומו, בלי להמציא תוכן רשימה |
RepairTableSemantics | מנרמל spans ו-scopes פגומים, מסיר הפניות header פגומות בטווח הטבלה, ומזיז caption אחד שאינו במקומו |
RepairRubyWarichuSequences | מסדר מחדש צאצאים רק כאשר ה-multiset המדויק של התפקידים הנדרשים כבר קיים |
RepairPronunciationHints | מסיר hints בטיפוס שגוי, מצלם הפניות lexicon פגומות, ומנרמל תתי-MIME של PLS מוטמעים |
RepairMissingAlternateText | משחזר Alt חסר עבור Figure, Formula ו-Form מתוך כותרת קיימת, טקסט הרחבה, טקסט מחולצה מאותו MCID, או fallback מפורש — בסדר זה |
RepairLanguageInheritance | מקדם שפת ברירת מחדל תקפה של שורש המבנה או כזו מפורשת אל ה-Catalog, ומסיר רשומות שפה פגומות או מיותרות ברמת המבנה כאשר הירושה חד-משמעית |
RepairHeadingOrder | ממספר מחדש רק פגמי כותרת-ראשונה ודילוגי-רמה תוך שימור סדר המסמך |
RepairArtifactTagging | כותב מחדש תגי marked-content המשויכים לאלמנט מבנה Artifact עבור תוכן של producer ושל עמודים טעונים |
AllowDocumentFragmentHeadingStarts | מאפס הקשר כותרות בתוך כל DocumentFragment, הן עבור התיקון והן עבור validation שאחריו |
RollbackOnValidationFailure | משחזר את ה-graph המקורי כאשר כל שגיאת PDF/UA-2 שהיא נותרת אחרי התיקון |
CustomAttributeNamespaceURI | מספק את ה-namespace המפורש לבעלי תכונות מותאמים שאת הסמנטיקה שלהם לא ניתן להסיק בבטחה; ברירת המחדל היא ערך ריק שנכשל בסגירה |
DefaultLanguage | מספק תג שפה BCP-47 רק כאשר לא ה-Catalog ולא שורש המבנה מכילים שפה תקפה |
FallbackAlternateText | מספק טקסט חלופי שנבדק על ידי הקורא לאחר שכל מקורות המסמך נכשלו; ברירת המחדל היא ערך ריק שלעולם לא ממציא תיאור |
MaxGeneratedAlternateTextCharacters | מגביל חילוץ טקסט מאותו MCID; ברירת המחדל היא 4,096 יחידות קוד UTF-16 |
MaxObjects | מגביל סריקת object graph; ברירת המחדל היא 1,000,000 אובייקטים |
MaxRepairs | מגביל מוטציות שנשמרות; ברירת המחדל היא 100,000 פעולות תיקון |
דוח התיקון
THPDFUA2RepairReport מדווח אם ה-graph השתנה או בוצע בו rollback, אם חרגה מגבלה, את מצב ה-validation שאחרי התיקון, את מספר האובייקטים שנבדקו, את השגיאות שנותרו, ומונים לכל משפחת תיקון, לרבות טקסט חלופי, רשומות שפה, רמות כותרות ותגי Artifact
UnresolvedAlternateTextCount, UnresolvedLanguageCount ו-UnresolvedArtifactCount מבדילים סמנטיקה שעדיין דורשת עיון המחבר ממוטציות אוטומטיות
המערך THPDFUA2ValidationIssues שמוחזר מכיל את האבחונים שאחרי התיקון כאשר ה-validation נכשל, ואבחונים יציבים ייעודיים-לתיקון כאשר מגבלת משאב או role map משוכפל וסותר מבטלת את הטרנזקציה
ה-overload המפורט מחזיר גם ממצאים שלפני התיקון עם הערות crsApplied, crsUnresolved, crsRolledBack או crsFailed, ובנוסף סיכומים ממונים לכל משפחת תיקון
overload זה של provenance מבצע מעבר validation נוסף ומוגבל לפני התיקון; השתמשו ב-overload הקיים עם שלושת הפלטים כאשר נדרשים רק הדוח הסופי והבעיות
אטומיות ובטיחות
- כל מוטציה משתתפת בטרנזקציית ה-graph של המסמך, לרבות מילוני namespace עקיפים שהוקצו חדשים
- מילוני namespace משוכפלים ממוזגים רק כאשר מיפויי התפקידים שלהם מסכימים
- סמנטיקה של תכונות מותאמות לעולם לא מומצאת אלא אם
CustomAttributeNamespaceURIסופק מפורשות - טקסט חלופי לעולם לא מומצא אלא אם
FallbackAlternateTextסופק מפורשות - עריכות תוכן עמוד של producer מוצבות עד שה-validation מצליח, ואילו עריכות stream טעון נשארות בתוך טרנזקציית ה-graph
- חיתוכי טבלה דו-משמעיים, צאצאי מבנה חסרים, מזהים סותרים, יעדי המשך לא פתורים וסמנטיקת header חסרה — לעולם לא מונחים
- מדיניות ברירת המחדל מבצעת rollback לתיקון המלא כאשר נותרות שגיאות PDF/UA-2 לא-קשורות
- graph טעון ו-graph בצד ה-producer משתמשים באותו נתיב validation ותיקון מוגבל
דוגמה
var
Options: THPDFUA2RepairOptions;
Report: THPDFUA2RepairReport;
Issues: THPDFUA2ValidationIssues;
begin
Options := THPDFUA2RepairOptions.Default;
Options.DefaultLanguage := 'en-US';
Options.CustomAttributeNamespaceURI :=
'https://example.com/ns/accessibility-attributes';
if not PDF.RepairPDFUA2Structure(Options, Report, Issues) then
raise Exception.CreateFmt('%s at %s',
[String(Issues[0].Code), String(Issues[0].Path)]);
end;