|
Добавляет на текущую страницу виджет rich-text поля AcroForm из PDF 1.5+ (ISO 32000-1 12.7.4.3 + Annex L). Виджет несёт стандартный /V + /DV запасной вариант из обычного текста для ридеров, не разбирающих rich text, плюс новое /RV тело XHTML rich-text и /DS записи стиля по умолчанию, которые Acrobat и Foxit потребляют напрямую, чтобы рисовать стилизованный текст. Бит /Ff RichText (26) добавляется по OR автоматически.
Синтаксис Delphi:
procedure AddRichTextField(const FieldName, InitialValue: AnsiString; const RichValue, DefaultStyle: AnsiString; Rectangle: TRect; MaxLen: Integer = 0; Flags: THPDFFormFieldFlags = []);
Синтаксис C++:
void AddRichTextField(const AnsiString& FieldName, const AnsiString& InitialValue, const AnsiString& RichValue, const AnsiString& DefaultStyle, const TRect& Rectangle, int MaxLen = 0, THPDFFormFieldFlags Flags = THPDFFormFieldFlags());
Описание
Виджет выводится как поле формы Tx с /FT /Tx, /DA (/Helv 12 Tf 0 0 0 rg), /Ff с установленным битом RichText; переданное InitialValue записывается и как /V и /DV, RichValue, и как /RV, и DefaultStyle, и как /DS. InitialValue, RichValue и DefaultStyle автоматически распознают многобайтовый контент и при необходимости переключаются на hex-строку UTF-16BE (как существующее AddTextField поведение для международных текстовых полей без форматирования).
Отрисовка rich text происходит в ридере: Acrobat / Foxit / Edge / Chrome PDF viewer разбирают /RV когда бит RichText включён, и берут Unicode-подмену шрифтов из системы, поэтому CJK, кириллица, арабский и акцентированная латиница показываются корректно без встраивания HotPDF CID-шрифта в /DR Ресурсы. На собственном пути AutoFormAppearances пути заглушка пустой AP для многобайтового текста остаётся на месте (задача v2.56.0+); ридеры с поддержкой rich-text игнорируют эту AP и рисуют из /RV.
FieldName — имя поля формы PDF, /T частичное имя (уникально в пределах родителя). Пробелы и не-ASCII байты допустимы; не-ASCII включает кодирование UTF-16BE для записываемой /T строки.
InitialValue — обычная текстовая PDF-строка, записываемая в /V и /DV. Ридеры, не разбирающие /RV, показывают вместо этого это значение.
RichValue — тело тегированного XHTML из PDF 1.7 Annex L (самая переносимая форма начинается с <?xml version="1.0"?> и XHTML-корня <body> с атрибутом пространства имён xfa:contentType="text/html"). Встроенные стили задаются <span style="..."> со свойствами CSS (font-family, font-size, font-weight, font-style, colorи т. д.).
DefaultStyle — строка стиля в духе CSS, применяемая к символам, которые пользователь вводит при заполнении, когда в /RVнет посимвольного стиля. Пример: 'font: 12pt Helvetica; color: #000000'.
Rectangle — область виджета /Rect в экранных координатах HotPDF (начало слева сверху); проецирование по Y выполняется автоматически при переводе прямоугольника в пользовательское пространство PDF.
MaxLen — опционально; при значении больше нуля пишется /MaxLen запись, ограничивающая число вводимых пользователем символов. По умолчанию 0 (без ограничений).
Flags — опционально; любые дополнительные флаги поля для OR-сложения с /Ff сверх автоматически добавленного бита RichText. Типовые дополнительные флаги: ffMultiline для многоабзацных rich-text тел, ffReadOnly для форматированного текста «только для показа». Флаг ffRichText добавляется всегда, так что вызывающему не нужно включать его самому.
Пример кода
// Rich-text Tx widget with bold + italic markup
var
Rich, DS: AnsiString;
R: TRect;
begin
HPDF.BeginDoc;
Rich :=
'<?xml version="1.0"?>' +
'<body xmlns="http://www.w3.org/1999/xhtml" ' +
'xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" ' +
'xfa:contentType="text/html">' +
'<p style="font-family:Helvetica;font-size:12pt">' +
'<span style="font-weight:bold">Bold</span> and ' +
'<span style="font-style:italic">italic</span> text.' +
'</p></body>';
DS := 'font: 12pt Helvetica; color: #000000';
R.Left := 60; R.Top := 60; R.Right := 280; R.Bottom := 100;
HPDF.CurrentPage.AddRichTextField(
'Biography', 'Plain biography text', Rich, DS, R);
HPDF.EndDoc;
end;
См. также
AddTextField, AutoFormAppearances, Версия, Поддержка AcroForm
|