Линейный интервал в многострочных полях

Я пытаюсь настроить межстрочный интервал в многострочном поле 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 и его повторное создание после сброса. Вам нужно будет написать свою собственную функцию сброса и добавить некоторые меры предосторожности, когда пользователь использует действие сброса этой формы.

Другие вопросы по тегам