XSL-FO fop.Длинный текст течет в соседние ячейки / блоки, скрывая там что-то - PullRequest
11 голосов
/ 23 ноября 2010

Может ли кто-нибудь предложить мне способ обернуть длинные слова (например, серийные номера)? Я попробовал какое-то коммерческое программное обеспечение, и такой проблемы нет. Это ошибка FOP или, возможно, есть решение?

Я не могу вставить пробел нулевой длины после каждого символа каждого слова в документе. Это решение звучит безумно для меня.

Ответы [ 5 ]

11 голосов
/ 13 января 2011

Вы можете указать атрибут wrap-option в вашем fo:block следующим образом:

<fo:block wrap-option="wrap"> ... stuff </fo:block>

Вот спецификация XSL-FO для этого атрибута:

XSL Определение:

Значение : без переноса | обернуть | наследовать

По умолчанию : упаковка

Относится к : fo: block, fo: inline, fo: page-number, ВОК: страница-номер-цитата

Наследуется : да

Проценты : N / A

Носитель : визуальный

Значения имеют следующие значения:

нет намотки

Перенос строки не будет выполняться.

В случае, если строки длиннее доступная ширина прямоугольник содержимого, переполнение будет лечиться в соответствии с свойство "overflow", указанное на ссылочной области.

упаковка

Разрыв строки произойдет, если линия переполняет доступный блок ширина. Никаких специальных маркеров или других лечение будет происходить.

Указывает, как перенос строки (разрыв строки) содержания объект форматирования должен быть обработан.

Реализации должны поддерживать значение «без переноса», как определено в этом Рекомендация, когда значение «linefeed-treatment» - это «сохранить».

Вы также можете определить атрибут wrap-option в fo:table-cell

<fo:table-cell wrap-option="wrap"> ... </fo:table-cell>

и fo:block внутри наследуют свойство.

8 голосов
/ 04 января 2014

Ответ Zkoh (перенос) поможет вам, только если текст содержит несколько слов, разделенных пробелами.В случае длинных слов (как отмечалось в вопросе), перенос слов - путь (как предложил Даниил).

Может быть довольно много проблем с переносом слов в FOP:

  1. FOP использует алгоритмы переноса из TeX и из-за некоторых проблем с лицензированием эти алгоритмы (по крайней мере, для некоторых языков) не являются частью стандартного двоичного дистрибутива FOP (как указано здесь ) и должны быть загружены отдельно с OFFO web site .На сайте есть два вида файлов шаблонов переноса.Формат XML (который должен быть скомпилирован первым для использования с FOP) и файл JAR (уже скомпилированный).Обязательно скачайте скомпилированную версию!Установка проста и хорошо документирована - просто поместите бинарный файл OFFO в папку lib FOP и все ...
  2. Не забудьте указать язык вашего документа и, если необходимо, включить переносына уровне блоков (наследуется, поэтому добавьте его в корневой элемент, и все будет в порядке) - см. FAQ по FOP
6 голосов
/ 23 ноября 2010

Решит ли ваша проблема переносы? Вы должны иметь возможность включать переносы с атрибутом hyphenate="true". Размещение этого атрибута будет зависеть от того, где вы хотите включить переносы.

Вот ссылка на соответствие FOP переносу: Страница соответствия Apache FOP

Вот ссылка на спецификацию XSL: XSL Spec # дефис

Если нет, возможно, вам придется поэкспериментировать с некоторыми свойствами keep (например, keep-together.within-line).

1 голос
/ 16 августа 2018

Вопрос касается серийных номеров, а не словарных слов.Указание hyphenate="true" полезно только тогда, когда словарь переноса или алгоритм переноса могут успешно переносить слова в тексте.Серийные номера редко генерируют последовательности, которые могут быть полезны через дефис, как если бы они были словами.

Конечно, вы можете использовать XSLT для добавления пробелов нулевой ширины в текст в ячейках таблицы, а не делать это вручную.StackOverflow любит дубликаты вопросов (см. https://stackoverflow.blog/2010/11/16/dr-strangedupe-or-how-i-learned-to-stop-worrying-and-love-duplication/),, но, все же, пожалуйста, смотрите ответы в XSL-FO: принудительное наложение на записи в таблице .

0 голосов
/ 05 июня 2014

Используйте keep-Together.within-column = "всегда" вместо keep-Together = "всегда", чтобы хранить длинные строки в ячейке таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...