Выравнивание текста и списков в полях (Writer)

Автор bryukva, 2 ноября 2018, 16:06

0 Пользователи и 1 гость просматривают эту тему.

bryukva

Здравствуйте!

Снова вопросы связанные с полями. Поля добавлены через Writer в шаблон, поля в шаблоне заполняются из внешней программы. При заполнении появляется некорректное поведение, а именно связанное с выравниванием по ширине как обычный текст так и нумерованный список. Приходится выставлять выравнивание по левому краю, что не очень красиво. Если создавать документ во Writer изначально, то таких проблем не наблюдается. В прикреплённом файле наглядно видно. Что это? Баг?

bigor

Мне кажется это из-за отсутствия конца параграфа (абзаца). Попробуйте после вставки текста добавить chr(13)
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

bryukva

Цитата: Bigor от  2 ноября 2018, 14:35Мне кажется это из-за отсутствия конца параграфа (абзаца). Попробуйте после вставки текста добавить chr(13)
Да, скорее всего из-за отсутствия конца параграфа (абзаца). Добавил chr(13) после текста в программе, в которой заполняются поля шаблона, не помогло - осталось так же.

economist

#3
Задайте полям стиль не Базовый, а Обычный/Основной с нужным выравниванием, автопереносами с ограничением не более 2-х - и будет выглядеть красиво. "Жидкие" строки с большим пробелами - это стили. Writer тем и замечателен, что позволяет форматировать поля (жирным, с переносами итп). MS Word так не умеет. 
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

bryukva

Цитата: economist от  2 ноября 2018, 15:17Задайте полям стиль не Базовый, а Обычный/Основной с нужным выравниванием, автопереносами с ограничением не более 2-х
Извиняюсь за нубский вопрос, но где это делается? :)

economist

Выделяете поле, жмете F11 - появился справа Стилист. В нем внизу - Просмотр стилей - Используемые стили, а затем щёлкаете на иконке Стиль абзаца, чтобы увидеть текущий стиль. Вот он должен быть не базовый, а Основной текст. Щелчок ПКМ - Изменить - там на 2-х вкладках (Выравнивание и ОтступыИнтервалы) - всё и настраивается.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

bryukva

Цитата: economist от  7 ноября 2018, 15:11Выделяете поле, жмете F11 - появился справа Стилист. В нем внизу - Просмотр стилей - Используемые стили, а затем щёлкаете на иконке Стиль абзаца, чтобы увидеть текущий стиль. Вот он должен быть не базовый, а Основной текст. Щелчок ПКМ - Изменить - там на 2-х вкладках (Выравнивание и ОтступыИнтервалы) - всё и настраивается.
В течении дня пробовал изменять разные параметры (игрался с "Отступы и интервалы", "Выравнивание" и "Положение на странице"), но так и не смог привести поля к тому виду, который хочется :(

economist

Добавьте

вкладка Положение на странице - Автоматический перенос

Внизу вкладки - снимите оба флажка Запрет ... висячих строк. 
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

bryukva

Цитата: economist от  8 ноября 2018, 17:02
Добавьте

вкладка Положение на странице - Автоматический перенос

Внизу вкладки - снимите оба флажка Запрет ... висячих строк. 

Удалось настроить стиль, чтобы содержание документа не начиналось с новой страницы, если оно слишком большое. "Жидкие" строки так и не получается сделать.

mikekaganski

#9
Цитата: bryukva от 16 ноября 2018, 15:56
"Жидкие" строки так и не получается сделать.

"Жидкие" - это какие? это которые, как "Установка на Ubuntu максимально проста:", растянуты по ширине, как и весь остальной абзац?

Всё содержимое поля - это один большой абзац с разрывами строк (аналогично Shift+Enter). И туда засунуть абзацы, по-моему, невозможно (ODF 1.2 говорит, что элементы <text:variable-set> не содержат подэлементов, а абзац - это элемент <text:p>). И это не баг.

А зачем и в каком процессе большие данные пихаются в поля? Не проще ли использовать в качестве шаблона документ .FODT, и править его как обычный XML (скажем, поместить в нужное место спецблок, который программа-генератор будет заменять на нормальный текст с разметкой ODF)? Если надо, программа-генератор потом может и перегонять получившееся в .ODT с помощью --convert-to.
С уважением,
Михаил Каганский

bryukva

Цитата: mikekaganski от 16 ноября 2018, 14:18"Жидкие" - это какие?
Например, в строке всего три слова (занимают половину), которые вытягиваются на всю ширину страницы и, соответственно, расстояние между словами очень большое.

Цитата: mikekaganski от 16 ноября 2018, 14:18А зачем и в каком процессе большие данные пихаются в поля?
Шаблон документа заполняется из данных 1С Документооборот. Текст там в формах без возможности какого-либо форматирования передаётся в шаблон.

mikekaganski

Цитата: bryukva от 18 ноября 2018, 15:10
Шаблон документа заполняется из данных 1С Документооборот. Текст там в формах без возможности какого-либо форматирования передаётся в шаблон.

...магически? или есть некая программа, которая занимается передачей текста в шаблон? если есть, то нельзя ли этот процесс изменить, как я предложил выше?
С уважением,
Михаил Каганский

bryukva

Цитата: mikekaganski от 18 ноября 2018, 13:14...магически? или есть некая программа, которая занимается передачей текста в шаблон?
Этим всем и занимается 1С Документооборот.

bigor

Если не получается с полями, можно через закладки попробовать
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

JohnSUN

Ну, если гора не идёт к Магомету... В смысле, если переписывать весь кусок Документооборота, который занимается формированием плохих документов, не представляется возможным, то можно нагрузить Документооборот дополнительной задачей - после сохранения готового файла, когда программа ещё помнит его имя, вызвать дополнительную обработку. Что-то вроде такого:
Процедура ИзменитьФорматСтраницы(ИмяФайла)
    Попытка
        ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
    Исключение
        Предупреждение(ОписаниеОшибки() + Символы.ПС + "Проверьте правильность установки и доступность LibreOffice!");
        Возврат;
    КонецПопытки;
Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop");
Args = Новый COMSafeArray("VT_VARIANT", 3);
Свойства = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
Свойства.Name = "FilterName";
Свойства.Value = "writer8";
Args.SetValue(0, Свойства);
Свойства1 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
Свойства1.Name = "FilterOptions";
Свойства1.Value = "";
Args.SetValue(1,Свойства1);
Свойства2 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
Свойства2.Name = "Hidden";
Свойства2.Value = Истина;
Args.SetValue(2,Свойства2);
ВременныйПуть = "file:///" + СтрЗаменить(СтрЗаменить(ИмяФайла, "\", "/"), " ", "%20");
Document = Desktop.LoadComponentFromURL(ВременныйПуть, "_blank", 0, Args);
// Всё, документ открыт - переменная Document содержит всё необходимое
// Здесь можно перебирать поля, менять их содержимое на обычный текст, применять стили...
// Эту часть можно написать и отладить на бэйсике и или пернести сюда,
// или сохранить в каком-то внешнем файле и вызывать оттуда
// А в самом конце:
Document.Store();
Document.close(Истина);
КонецПроцедуры
В конце концов, если киношники используют постпродакшн для улучшения отснятого материала, то чем программисты хуже?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне