THotPDF.AddStructureElement + سمات إتاحة PDF/UA

THotPDF سطح PDF الموسوم (v2.119.36 / v2.119.40 / v2.119.41)

 

AddXFAPacket  دعم AcroForm

مرجع HotPDF

توثّق هذه الصفحة دوال المساعدة الحالية في THotPDF الخاصة بـ Tagged PDF وشجرة بنية PDF/UA. تطابق معرّفات الشيفرة التصريحات العامة (public declarations)

الواجهة الحالية في Delphi

function AddStructureElement(const Role: AnsiString; Parent: THPDFDictionaryObject;
  PageIndex: Integer = -1; MCID: Integer = -1): THPDFDictionaryObject; overload;
function AddStructureElement(const Role: AnsiString; Parent: THPDFDictionaryObject;
  PageIndex: Integer; MCID: Integer;
  const AltText: AnsiString; const ActualText: AnsiString): THPDFDictionaryObject; overload;
function AddStructureElement(const Role: AnsiString; Parent: THPDFDictionaryObject;
  PageIndex: Integer; MCID: Integer;
  const AltText: AnsiString; const ActualText: AnsiString;
  const IDStr: AnsiString): THPDFDictionaryObject; overload;
function AddStructureElement(T: THPDFStandardStructureType; Parent: THPDFDictionaryObject;
  PageIndex: Integer = -1; MCID: Integer = -1): THPDFDictionaryObject; overload;

procedure SetStructureElementLanguage(Elem: THPDFDictionaryObject; const Lang: AnsiString);
procedure SetStructureElementExpansionText(Elem: THPDFDictionaryObject; const ExpansionText: AnsiString);
procedure SetStructureElementTitle(Elem: THPDFDictionaryObject; const Title: AnsiString);
procedure AddStructRoleMap(const SourceRole: AnsiString; const TargetRole: AnsiString);

function BeginTaggedContent(const Role: AnsiString; Parent: THPDFDictionaryObject;
  const Lang: AnsiString = ''; const Alt: AnsiString = '';
  const ActualText: AnsiString = ''; const ExpansionText: AnsiString = ''): THPDFDictionaryObject;
procedure EndTaggedContent;

function EmitTaggedHeading(Level: Integer; Parent: THPDFDictionaryObject; X, Y: Single; const Text: WideString): THPDFDictionaryObject;
function BeginTaggedList(Parent: THPDFDictionaryObject; const NumberingStyle: AnsiString = 'None'): THPDFDictionaryObject;
function EmitTaggedListItem(ListElem: THPDFDictionaryObject; LblX, LblY: Single; const LabelText: WideString; BodyX, BodyY: Single; const BodyText: WideString): THPDFDictionaryObject;
function BeginTaggedTable(Parent: THPDFDictionaryObject): THPDFDictionaryObject;
function AddTaggedTableRow(TableElem: THPDFDictionaryObject): THPDFDictionaryObject;
function EmitTaggedTableHeader(TRElem: THPDFDictionaryObject; X, Y: Single; const Text: WideString; const Scope: AnsiString): THPDFDictionaryObject;
function EmitTaggedTableCell(TRElem: THPDFDictionaryObject; X, Y: Single; const Text: WideString): THPDFDictionaryObject;
function BeginTaggedFigure(Parent: THPDFDictionaryObject; const AltText: AnsiString; const BBox: array of Single): THPDFDictionaryObject;
procedure EndTaggedFigure;
procedure RegisterAnnotForStructure(AnnotDict: THPDFDictionaryObject; StructElem: THPDFDictionaryObject);

function StandardStructureTypeToName(T: THPDFStandardStructureType): AnsiString;
function IsStandardStructureType(const Name: AnsiString): Boolean;

إنشاء عناصر البنية

تنشئ AddStructureElement قاموس /StructElem وتُلحقه كابن لـ Parent (مرّر nil لإرفاقه تحت جذر شجرة البنية). يربط PageIndex العنصر بصفحته عبر /Pg؛ مرّر قيمة سالبة للتخطي. عندما يكون MCID صفرًا أو أكبر، فإنه يربط تسلسل محتوى مُعلَّم (marked-content) على الصفحة بالعنصر ويسجّله في /ParentTree الخاص بالمستند. يضيف التحميل الزائد ذو الستة وسائط /Alt (وصف بديل يُقرأ صوتيًا للمحتوى غير النصي مثل الأشكال والصيغ) و/ActualText (نص بديل يُعاد عند النسخ/اللصق للأحرف (glyphs) صعبة الاستخراج). يكتب التحميل الزائد ذو السبعة وسائط إضافة على ذلك /ID فريدًا على مستوى المستند حتى تتمكن عناصر البنية الأخرى من استهداف العنصر عبر المعرّف (ISO 32000-1 §14.7.2)

إنشاء عناصر البنية

يمثل التحميل الزائد لتعداد THPDFStandardStructureType نقطة الدخول الآمنة من ناحية النوع (type-safe): يُضمَن أن اسم الدور /S الصادر هو أحد أنواع البنية القياسية في ISO 32000-1 §14.8.4 الجدول 333، ما يزيل خطر الأخطاء الإملائية وحساسية حالة الأحرف الموجود في التحميل الزائد بالسلسلة النصية المفتوحة. يجمّع التعداد الأسماء حسب عائلة المواصفة الخاصة بها:

لاحظ الأحرف الصغيرة في sstLbl / sstLBody: أسماء أدوار PDF الحرفية هي Lbl وLBody. لا يزال بإمكانك تمرير أسماء أدوار مخصَّصة عبر التحميل الزائد بنوع AnsiString وربطها بدور قياسي باستخدام AddStructRoleMap

إنشاء عناصر البنية

PDF.PDFUACompliance := pdfuaPDFUA1;
PDF.BeginDoc;
Doc := PDF.AddStructureElement(sstDocument, nil);
H1 := PDF.AddStructureElement(sstH1, Doc);
PDF.SetStructureElementLanguage(Doc, 'en-US');
PDF.SetStructureElementTitle(H1, 'Annual Report');
// Alt / ActualText ride on the AnsiString overload; reuse the
// spec-prescribed role name via StandardStructureTypeToName
Fig := PDF.AddStructureElement(StandardStructureTypeToName(sstFigure), Doc, 0, -1,
  'Sales by quarter: Q1 4.2M, Q2 5.1M, Q3 5.8M, Q4 6.4M', '');

إنشاء عناصر البنية

تكتب SetStructureElementLanguage تجاوزًا (override) لـ /Lang وفق BCP-47، وتكتب SetStructureElementExpansionText نص التوسيع /E، وتكتب SetStructureElementTitle العنوان المقروء /T، وتربط AddStructRoleMap أدوار البنية المخصَّصة بأدوار PDF القياسية. تُعيد StandardStructureTypeToName اسم دور PDF لقيمة THPDFStandardStructureType، وتتحقق IsStandardStructureType مما إذا كان اسم الدور أحد الأدوار القياسية

إنشاء عناصر البنية

تغطي EmitTaggedHeading وBeginTaggedList وEmitTaggedListItem وBeginTaggedTable وAddTaggedTableRow وEmitTaggedTableHeader وEmitTaggedTableCell وBeginTaggedFigure وEndTaggedFigure وRegisterAnnotForStructure ربط العناوين والقوائم والجداول والأشكال والملاحظات الشائع في PDF/UA دون إجبار المستدعين على إدارة MCIDs يدويًا

إنشاء عناصر البنية

فعّل الإخراج المُعلَّم (tagged) أو PDFUACompliance، وأنشئ عنصر البنية الجذر، واستخدم عائلة دوال المساعدة لإصدار محتوى دلالي، وأغلق كل تسلسل محتوى مُعلَّم أو شكل تم بدؤه قبل EndDoc

إنشاء عناصر البنية

تُرفِق BeginTaggedContentForStructure وAppendStructureMarkedContent مراجع محتوى مُعلَّم محلية للصفحة بعنصر بنية منطقي واحد موجود عبر استكمالات الصفحات

تطبّق Automatic PDF/UA Structure from Layout Trees النموذج نفسه على العناوين والقوائم والجداول والأشكال والعناصر الزائدة (artifacts) التصريحية