Работа с расстановкой переносов
Иногда бывает необходимо использовать расстановку переносов для более компактного размещения текста в документе. В то же время важно понимать, что особенности расстановки переносов слов могут отличаться для каждого языка.
В настоящее время расстановка переносов используется не так часто, как раньше, особенно в текстах на английском языке. Тем не менее, использование этой функции может оказать серьезное влияние на пользовательские документы – расстановка переносов влияет на оформление и, как следствие, на внешний вид выходных файлов, например, в формате PDF.
Для корректного разделения слов используются словари переносов для конкретных языков. Aspose.Words использует продвинутые алгоритмы для работы с такими словарями и позволяет получить ту же расстановку переносов, что и в Microsoft Word.
Словари для расстановки переносов
Поскольку в разных языках используются разные нормы и правила переноса слов, оптимальным решением для правильной расстановки переносов является использование специальных словарей. Aspose.Words использует OpenOffice словари.
Для проверки орфографии OpenOffice использует Hunspell библиотека, который является обобщением алгоритма расстановки переносов в TeX. Этот алгоритм позволяет автоматически расставлять нестандартные переносы, используя конкурирующие стандартные и пользовательские шаблоны расстановки переносов. Hunspell использует Дефис для расстановки переносов.
Алгоритм расстановки переносов
Aspose.Words реализует алгоритм настройки перестановок в ТЕКС и может повторно использовать OpenOffice словари расстановки переносов.
Следует учитывать следующие особенности алгоритмов Aspose.Words:
- Параметры расстояния между переносами (LEFTHYPHENMIN, RIGHTHYPHENMIN, COMPOUNDLEFTHYPHENMIN, COMPOUNDRIGHTHYPHENMIN), указанные в словаре переносов, игнорируются. Aspose.Words использует свой собственный набор параметров расстояния в зависимости от режима совместимости с документом.
- Алгоритм расстановки переносов в Aspose.Words поддерживает составные переносы. Однако Aspose.Words разбивает последовательности символов, содержащие смешанные буквенные и неалфавитные символы, на части (слова), содержащие только буквы, и переносит их отдельно. Обратите внимание, что Microsoft Word логика расстановки сложных слов через дефис зависит от режима совместимости документов.
- Алгоритм расстановки переносов в Aspose.Words не реализует нестандартную расстановку переносов. Нестандартные шаблоны игнорируются.
Загрузка словарей расстановки переносов
Чтобы использовать функцию расстановки переносов, сначала зарегистрируйте словарь расстановки переносов.В следующем примере кода показано, как загрузить словари расстановки переносов для указанных языков из файла:
В следующем примере кода показано, как загрузить словари переносов для указанного языка из потока:
В качестве альтернативы предварительной регистрации словарей расстановки переносов можно зарегистрировать только необходимые словари расстановки переносов “по запросу”. Для достижения этой цели реализуйте интерфейс IHyphenationCallback и используйте статический обратный вызов Callback.
В следующем примере кода показано, как реализовать интерфейс IHyphenationCallback:
Влияние расстановки переносов на макет
При разбиении текста на строки Aspose.Words проверяет, полностью ли каждое слово помещается в текущей строке. Если другое слово слишком длинное, чтобы поместиться в конце строки, по умолчанию Aspose.Words перемещает его в начало следующей строки, а не переносит через дефис.
Однако функция расстановки переносов может использоваться в Aspose.Words для вставки дефисов в слова, чтобы устранить пробелы в выровненном тексте или сохранить одинаковую длину строки в узких столбцах. Очевидно, что это может повлиять на количество строк и, следовательно, на количество страниц. Другими словами, использование функции расстановки переносов влияет на макет документа.
Расстановка переносов и их обоснование (H&J)
Microsoft Word имеет сложную логику выбора точки останова, если текст выровнен по ширине и включена расстановка переносов. Короче говоря, Microsoft Word может предпочесть сокращать или растягивать пробелы, чтобы избежать переноса строк. Скорее всего, эта логика основана на статье Кнут.
Aspose.Words реализует свой собственный алгоритм H&J, который дает тот же результат, что и Microsoft Word, и обеспечивает идентичную разбивку строк в выходном документе.