Линейный интервал в многострочных полях
Я пытаюсь настроить межстрочный интервал в многострочном поле PDF. Это то, что я уже пробовал:
Используя форматированное текстовое поле и настройте межстрочный интервал с помощью панели инструментов "Свойства текста поля формы": это сработало, но изменения теряются при сбросе формы.
Использование JavaScript: я добавил событие нажатия клавиш в многострочные текстовые поля.
var spans = event.richValue;
if (spans !== undefined) {
for ( var i = 0; i < spans.length; i++ ) {
spans[i].linespacing = 14; // linespacing
}
event.richValue = spans;
}
С этим сценарием межстрочный интервал работает просто отлично, но больше невозможно вручную вставить разрывы строк. Они удаляются, как только event.richValue = spans
выполнен.
Последнее, что я попробовал, была слегка измененная версия скрипта:
var spans = event.richValue;
if (spans !== undefined) {
for ( var i = 0; i < spans.length; i++ ) {
spans[i].linespacing = 14; // linespacing
if (i < spans.length - 1) spans[i].text += "\r";
}
event.richValue = spans;
}
Я попытался исправить исчезающие разрывы строк, добавив "\r" в конце каждого промежутка. Оказывается, что Acrobat также обрабатывает двойные пробелы как один интервал, поэтому этот скрипт добавляет разрыв строки после двух пробелов.
Есть ли способ, чтобы навсегда установить межстрочный интервал в многострочном текстовом поле, не путая все?
2 ответа
Я думаю, что нашел решение сам. После более внимательного изучения свойств SPAN я наткнулся на endParagraph
,
Это мой последний пользовательский скрипт нажатия клавиш:
var spans = event.richValue;
if (spans !== undefined && event.willCommit) {
for ( var i = 0; i < spans.length; i++ ) {
spans[i].textSize = 9; // font size
spans[i].linespacing = 14; // linespacing
// restore line breaks
if (spans[i].endParagraph) spans[i].text += "\r";
// reset styles to default
spans[i].fontStyle = "normal";
spans[i].fontWeight = 400;
spans[i].strikethrough = false;
spans[i].underline = false;
spans[i].textColor = color.black;
spans[i].alignment = "left";
spans[i].fontFamily = ["Arial"];
}
event.richValue = spans;
}
Я не делал много испытаний, но похоже, что это решение работает правильно.
Линейным интервалом можно управлять только в многострочном поле с включенным richText.
Проблема с полями с включенным richText заключается в том, что они не защищены от сброса, поскольку нет свойства defaultRichValue (для его введения потребуется активное участие в процедуре ISO 32000).
Обходным путем будет сохранение состояния массива spans и его повторное создание после сброса. Вам нужно будет написать свою собственную функцию сброса и добавить некоторые меры предосторожности, когда пользователь использует действие сброса этой формы.