THotPDF.AddStructureElement + PDF/UA accessibility attributes

THotPDF tagged-PDF surface (v2.119.36 / v2.119.40 / v2.119.41)

 

AddXFAPacket  AcroForm Support

THotPDF.AddStructureElement و ابزارهای کمکی Tagged PDF

این صفحه ابزارهای کمکی فعلی THotPDF برای Tagged PDF و درخت ساختار PDF/UA را توضیح می‌دهد. شناسه‌های کد با اعلان‌های عمومی یکسان هستند

سطح فعلی 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 سند ثبت می‌کند. overload شش‌پارامتری /Alt و /ActualText را می‌نویسد، و overload هفت‌پارامتری یک /ID یکتای سند نیز اضافه می‌کند

نوع‌های استاندارد ساختار (Table 333)

overload مربوط به THPDFStandardStructureType ورودی type-safe است: نام نقش /S همیشه یکی از نوع‌های استاندارد ساختار در ISO 32000-1 §14.8.4 Table 333 خواهد بود و خطر غلط املایی یا حساسیت به بزرگی و کوچکی حروف در رشته آزاد را کم می‌کند

به حروف کوچک در sstLbl / sstLBody توجه کنید: نام‌های واقعی نقش PDF برابر Lbl و LBody هستند. نقش‌های سفارشی همچنان می‌توانند از overload نوع 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 مقدار /Lang در قالب BCP-47 را می‌نویسد، SetStructureElementExpansionText متن گسترش /E را می‌نویسد، SetStructureElementTitle عنوان خواندنی /T را می‌نویسد و AddStructRoleMap نقش‌های ساختاری سفارشی را به نقش‌های استاندارد PDF برمی‌گرداند. StandardStructureTypeToName نام نقش PDF را برای مقدار THPDFStandardStructureType برمی‌گرداند و IsStandardStructureType استاندارد بودن نام نقش را بررسی می‌کند

ابزارهای کمکی سطح بالا برای محتوای tagged

EmitTaggedHeading، BeginTaggedList، EmitTaggedListItem، BeginTaggedTable، AddTaggedTableRow، EmitTaggedTableHeader، EmitTaggedTableCell، BeginTaggedFigure، EndTaggedFigure و RegisterAnnotForStructure اتصال معمول سربرگ، فهرست، جدول، شکل و annotation در PDF/UA را بدون مدیریت دستی MCID پوشش می‌دهند

گردش کار معمول

خروجی tagged یا PDFUACompliance را فعال کنید، عنصر ریشه ساختار را بسازید، با خانواده ابزارهای کمکی محتوای معنایی تولید کنید و پیش از EndDoc هر توالی tagged-content یا شکل آغازشده را ببندید