เมธอด THotPDF.RepairPDFUA2Structure
ซ่อม defect ด้าน namespace attribute โครงสร้าง และการเข้าถึงของ PDF/UA-2 ที่ยังกู้คืนได้ ภายใน graph transaction แบบ copy-on-write และ validate candidate 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
ตัวเลือกการ repair
เริ่มจาก THPDFUA2RepairOptions.Default แล้ว override เฉพาะการตัดสินใจเชิงนโยบายที่ workflow ของ input ต้องการ
| ฟิลด์ | หน้าที่ |
|---|---|
NormalizeDuplicateNamespaces | สร้าง StructTreeRoot/Namespaces ใหม่ให้มี indirect dictionary แบบ canonical หนึ่งตัวต่อ URI และปฏิเสธ role map ที่ขัดแย้งกัน |
RegisterReferencedNamespaces | ลงทะเบียน namespace dictionary ที่ถูกต้องซึ่ง structure element attribute หรือ role map ที่รู้เรื่อง namespace อ้างถึง |
RepairStandardStructureNamespaces | กำหนด namespace ของ PDF 2.0 ให้ role มาตรฐานเมื่อ namespace หายไปหรือใช้ไม่ได้ และ normalize Document ระดับบนสุดเสมอ |
RepairAttributeNamespaces | ทำให้การอ้างอิง namespace ของ attribute เป็น canonical และลบรายการ namespace ที่ใช้ไม่ได้ออกจาก owner มาตรฐาน |
RepairAttributeRevisions | normalize เลข revision ที่ติดลบหรือเป็นเศษส่วน และลบรายการ revision ที่กำพร้าออกจาก attribute array |
RepairListSemantics | normalize การนับเลข flag การต่อเนื่อง ชนิด continuation ที่ใช้ไม่ได้ และ caption ที่หลุดตำแหน่งหนึ่งตัว โดยไม่สร้างเนื้อหา list ขึ้นเอง |
RepairTableSemantics | normalize span และ scope ที่ใช้ไม่ได้ ลบการอ้างอิง header ระดับตารางที่ใช้ไม่ได้ และย้าย caption ที่หลุดตำแหน่งหนึ่งตัว |
RepairRubyWarichuSequences | จัดลำดับ children ใหม่เฉพาะเมื่อ role multiset ที่ต้องการเป๊ะ ๆ มีอยู่แล้ว |
RepairPronunciationHints | ลบ hint ที่ type ผิด ตัดการอ้างอิง lexicon ที่ใช้ไม่ได้ และ normalize MIME subtype ของ PLS ที่ฝังอยู่ |
RepairMissingAlternateText | คืน Alt ที่หายไปของ Figure, Formula และ Form จาก title ที่มีอยู่ expansion text ข้อความที่ extract จาก MCID เดียวกัน หรือ fallback ที่ระบุชัด ตามลำดับนี้ |
RepairLanguageInheritance | ยกระดับภาษา default ที่ถูกต้องจาก structure root หรือที่ระบุชัด ขึ้นไปไว้ที่ Catalog และลบรายการภาษาระดับ structure ที่ใช้ไม่ได้หรือซ้ำซ้อน เมื่อการ inherit ไม่กำกวม |
RepairHeadingOrder | รันเลขใหม่เฉพาะ defect แบบ first-heading และข้ามระดับ พร้อมคงลำดับเอกสารไว้ |
RepairArtifactTagging | เขียน tag marked-content ที่ผูกกับ structure element ประเภท Artifact ให้ครอบคลุมทั้งเนื้อหาฝั่ง producer และหน้าที่โหลดแล้ว |
AllowDocumentFragmentHeadingStarts | รีเซ็ตบริบท heading ภายใน DocumentFragment แต่ละชิ้น สำหรับทั้งการ repair และ validation หลังซ่อม |
RollbackOnValidationFailure | คืน graph เดิมเมื่อยังมี error ของ PDF/UA-2 เหลืออยู่หลังซ่อม |
CustomAttributeNamespaceURI | ระบุ namespace แบบชัดเจนให้ owner ของ attribute เฉพาะทางที่อนุมาน semantics ได้ไม่ปลอดภัย โดยค่า default ว่างจะ fail closed |
DefaultLanguage | ระบุ language tag แบบ BCP-47 เฉพาะเมื่อทั้ง Catalog และ structure root ไม่มีภาษาที่ถูกต้อง |
FallbackAlternateText | รับ alternate text ที่ผู้เรียกตรวจแล้ว หลังแหล่งที่มาจากเอกสารทั้งหมดล้มเหลว โดยค่า default ว่างจะไม่แต่งคำอธิบายขึ้นเองเด็ดขาด |
MaxGeneratedAlternateTextCharacters | จำกัดการ extract ข้อความจาก MCID เดียวกัน โดย default ที่ 4,096 UTF-16 code unit |
MaxObjects | จำกัดการสแกน object graph โดย default ที่ 1,000,000 object |
MaxRepairs | จำกัด mutation ที่เก็บไว้ โดย default ที่ 100,000 operation |
รายงานการ repair
THPDFUA2RepairReport รายงานว่า graph เปลี่ยนหรือถูก rollback หรือไม่ มีค่าใดเกินขอบเขตหรือไม่ สถานะ validation หลังซ่อม จำนวน object ที่ตรวจ error ที่เหลืออยู่ และตัวนับของทุกตระกูลการซ่อม รวมถึง alternate text รายการภาษา ระดับ heading และ tag Artifact
UnresolvedAlternateTextCount, UnresolvedLanguageCount และ UnresolvedArtifactCount แยก semantics ที่ยังต้องให้ผู้เขียนตรวจ ออกจากการแก้ไขอัตโนมัติ
array THPDFUA2ValidationIssues ที่คืนกลับจะมี diagnostics หลังการซ่อมเมื่อ validation ไม่ผ่าน และมี diagnostics เฉพาะของ repair ที่นิ่ง เมื่อ transaction ถูกยุติเพราะ resource bound หรือ role map ซ้ำที่ขัดแย้งกัน
overload แบบละเอียดยังคืน findings ก่อนซ่อมที่ระบุ annotation เป็น crsApplied, crsUnresolved, crsRolledBack หรือ crsFailed พร้อมสรุปพร้อมตัวนับของแต่ละตระกูลการซ่อม
overload provenance นี้รัน validation pass ก่อนซ่อมเพิ่มอีกรอบแบบมีขอบเขต ถ้าต้องการแค่รายงานสุดท้ายกับ issues ให้ใช้ overload สาม output เดิม
ความเป็น atomic และความปลอดภัย
- mutation ทุกชิ้นอยู่ใน graph transaction ของเอกสาร รวมถึง indirect namespace dictionary ที่จองใหม่
- namespace dictionary ที่ซ้ำกันจะถูก merge เฉพาะเมื่อ role mapping ของมันเห็นตรงกัน
- semantics ของ attribute เฉพาะทางจะไม่ถูกแต่งขึ้นเอง นอกจาก
CustomAttributeNamespaceURIถูกระบุไว้ชัดเจน - alternate text จะไม่ถูกแต่งขึ้นเอง นอกจาก
FallbackAlternateTextถูกระบุไว้ชัดเจน - การแก้เนื้อหาหน้าฝั่ง producer ถูก stage ไว้จนกว่า validation จะผ่าน ส่วนการแก้ stream ของเอกสารที่โหลดแล้วอยู่ใน graph transaction ตลอด
- จุดตัดตารางที่กำกวม structure child ที่หายไป ID ที่ขัดแย้ง ปลายทาง continuation ที่ชี้ไม่ถึง และ semantics header ที่ขาดหาย จะไม่ถูกเดาเด็ดขาด
- นโยบาย default จะ rollback การซ่อมทั้งหมดเมื่อ error ของ PDF/UA-2 ที่ไม่เกี่ยวข้องยังเหลืออยู่
- graph ฝั่งเอกสารที่โหลดและฝั่ง producer ใช้เส้นทาง validate และ repair แบบมีขอบเขตชุดเดียวกัน
ตัวอย่าง
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;