Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

16 Август 2017, 20:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice  без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 »   Вниз
  Печать  
Автор Тема: Нумерация списков *.RTF файла в LO  (Прочитано 1329 раз)
0 Пользователей и 1 Гость смотрят эту тему.
schweps2
Новичок
*
Offline Offline

Сообщений: 9


« Стартовое сообщение: 8 Июнь 2017, 17:22 »

Приветствую, дорогие друзья. Улыбка
Помогите, сил моих больше нет.

Есть проблема при открытии RTF документов в ЛО.
Все хорошо, но нумерасия списков из обычного стиля превращается автоматически в жирный. как это побороть, уже не знаю, голова ломится.

Вот здесь пример текста:
https://drive.google.com/file/d/0BzWo2P5vUkiuVjlRNFBOMmFnRTQ/view

нумерация (1) (2) в Ворде выглядит нормально, но как только я откраваю это в ЛО, она изменяется на жирность. Где копать - ума не приложу.
Как убрать это автоматическое приобразование??? Злой Злой Злой

Помогите, люди добрые! Плачущий Плачущий Плачущий Плачущий


Спасибо!
« Последнее редактирование: 8 Июнь 2017, 17:24 от schweps2 » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 300


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #1: 8 Июнь 2017, 18:03 »

Добро пожаловать на форум!
Можно было бы рассказать как найти в каком из стилей застряла эта "жирность" и как её убрать, но это привело бы к большому количеству ручных правок: стилей с именем ListLabelХХХ в документе много, перебирать их будет скучно.
Возможно такой вот макрос может облегчить жизнь:
Код:
Sub delBoldNumbers
Const stylePrefix As String = "ListLabel"
Dim oStyles As Variant
Dim oStyle As Variant
Dim oElementNames As Variant
Dim i As Long, j As Integer
oStyles = ThisComponent.getStyleFamilies().getByName("CharacterStyles") ' Стили символов
oElementNames = oStyles.getElementNames() ' Все названия стилей символов
j = Len(stylePrefix)
For i = LBound(oElementNames) To UBound(oElementNames)
If Left(oElementNames(i), j) = stylePrefix Then ' Во всех стилях, имена которых начинаются на "ListLabel"
oStyle = oStyles.getByName(oElementNames(i))
If oStyle.CharWeight <> 100 Then oStyle.CharWeight = 100.0
EndIf
Next i
End Sub

Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
mikekaganski
Ветеран
*****
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 539


« Ответ #2: 8 Июнь 2017, 18:11 »

https://bugs.documentfoundation.org/show_bug.cgi?id=108416
Записан

С уважением,
Михаил Каганский
ape
Ветеран
*****
Offline Offline

Сообщений: 2 468


« Ответ #3: 8 Июнь 2017, 18:39 »

Версия: 5.4.0.0.beta2
ID сборки: 3cc1cdd8ee50f144e5514da51800a08119754d8f
Потоков ЦП: 8; ОС:Windows 5.2; Отрисовка ИП: по умолчанию;
Локаль: ru-RU (ru_RU); Calc: group

Что-то не так (скриншот)?


* bug_108416.png (114.46 Кб, 1565x663 - просмотрено 15 раз.)
Записан
schweps2
Новичок
*
Offline Offline

Сообщений: 9


« Ответ #4: 8 Июнь 2017, 20:39 »

Что-то не так (скриншот)?
Не так выглядит нумерация в ЛО. она жирным маркирована...


Возможно такой вот макрос может облегчить жизнь:
Спасибо большое, завтра обязательно попробую!
Записан
schweps2
Новичок
*
Offline Offline

Сообщений: 9


« Ответ #5: 8 Июнь 2017, 20:41 »


Спасибо большое!!
Записан
ape
Ветеран
*****
Offline Offline

Сообщений: 2 468


« Ответ #6: 9 Июнь 2017, 08:01 »

Что-то не так (скриншот)?
Не так выглядит нумерация в ЛО. она жирным маркирована...

Подтвердил ошибку в Багзилле.
Записан
schweps2
Новичок
*
Offline Offline

Сообщений: 9


« Ответ #7: 9 Июнь 2017, 09:50 »

Добро пожаловать на форум!
Можно было бы рассказать как найти в каком из стилей застряла эта "жирность" и как её убрать, но это привело бы к большому количеству ручных правок: стилей с именем ListLabelХХХ в документе много, перебирать их будет скучно.
Возможно такой вот макрос может облегчить жизнь:
Код:
Sub delBoldNumbers
Const stylePrefix As String = "ListLabel"
Dim oStyles As Variant
Dim oStyle As Variant
Dim oElementNames As Variant
Dim i As Long, j As Integer
oStyles = ThisComponent.getStyleFamilies().getByName("CharacterStyles") ' Стили символов
oElementNames = oStyles.getElementNames() ' Все названия стилей символов
j = Len(stylePrefix)
For i = LBound(oElementNames) To UBound(oElementNames)
If Left(oElementNames(i), j) = stylePrefix Then ' Во всех стилях, имена которых начинаются на "ListLabel"
oStyle = oStyles.getByName(oElementNames(i))
If oStyle.CharWeight <> 100 Then oStyle.CharWeight = 100.0
EndIf
Next i
End Sub


Скрипт бомбовый, спасибо, большое!
А можете сделать так, если вас не затруднит, чтобы строки с символом §(параграф) не изменялись.
Я специалист по SAP ABAP/JAVA, но не по макросам, к сожалению.

Спасибо большое!

ПС. Еще один вопрос, как сделать, чтобы он автоматически запускался при открывании файла? Всё хорошо
« Последнее редактирование: 9 Июнь 2017, 10:16 от schweps2 » Записан
schweps2
Новичок
*
Offline Offline

Сообщений: 9


« Ответ #8: 9 Июнь 2017, 10:52 »

Что-то не так (скриншот)?
Не так выглядит нумерация в ЛО. она жирным маркирована...

Подтвердил ошибку в Багзилле.

Привет!
Я вчера пробывал разные версии. Это встречается с версии 4.4.4 и дальше. На 4.1.2 нормально выглядит нумерация. 4.2, 4.3 я не тестировал.
Записан
mikekaganski
Ветеран
*****
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 539


« Ответ #9: 9 Июнь 2017, 11:02 »

Там уже определили коммит, после которого возникло такое поведение; правда, ни Вы, ни они неправы в том, что "до этого всё нормально". До того не учитывался жирный шрифт в нумерации первой строки таблицы; после ситуация обратная, так что это не регрессия, а смена проблемы.
Записан

С уважением,
Михаил Каганский
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 300


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #10: 9 Июнь 2017, 11:05 »

А можете сделать так, если вас не затруднит, чтобы строки с символом §(параграф) не изменялись.
всё могём: и пилить могём, и строгать могём... а параграфы не могём... потому как с ними долбёжу много
Это ж для каждого стиля нужно перебрать все стили нумерации, для каждого из десяти уровней проверить а не параграф ли там префикс да не этот ли стиль символа назначен (ДЕСЯТЬ УРОВНЕЙ, КАРЛ!)
В общем, это так же скучно, как переоформлять стили вручную
Код:
Sub delBoldNumbers
Const stylePrefix As String = "ListLabel"
Dim oStyles As Variant
Dim oStyle As Variant
Dim oElementNames As Variant
Dim i As Long, j As Integer
oStyles = ThisComponent.getStyleFamilies().getByName("CharacterStyles") ' Стили символов
oElementNames = oStyles.getElementNames() ' Все названия стилей символов
j = Len(stylePrefix)
For i = LBound(oElementNames) To UBound(oElementNames)
If Left(oElementNames(i), j) = stylePrefix Then ' Во всех стилях, имена которых начинаются на "ListLabel"
oStyle = oStyles.getByName(oElementNames(i))
If (oStyle.CharWeight <> 100) And Not noParagraph(oElementNames(i)) Then oStyle.CharWeight = 100.0
EndIf
Next i
End Sub
Function noParagraph(sCharStyle As String) As Boolean
Dim oStyles As Variant
Dim oStyle As Variant
Dim oElementNames As Variant
Dim i As Long, j As Integer, k As Integer
Dim oNumberingRules As Variant
Dim oRule As Variant
Dim aPropertyValue As Variant
Dim levelThisStyle As Boolean
Dim levelHasParagraph As Boolean
On Error Resume Next
noParagraph = False
oStyles = ThisComponent.getStyleFamilies().getByName("NumberingStyles")
oElementNames = oStyles.getElementNames() ' Все названия стилей символов
For i = LBound(oElementNames) To UBound(oElementNames)
oStyle = oStyles.getByName(oElementNames(i))
oNumberingRules = oStyle.NumberingRules
For j = 0 To oNumberingRules.getCount()-1
oRule = oNumberingRules.getByIndex(j)
levelThisStyle = False
levelHasParagraph = False
For k = LBound(oRule) To UBound(oRule)
aPropertyValue = oRule(k)
levelHasParagraph = levelHasParagraph Or ((aPropertyValue.Name="Prefix") And (InStr(aPropertyValue.Value, "§")>0))
levelThisStyle = levelThisStyle Or ((aPropertyValue.Name="CharStyleName") And (aPropertyValue.Value=sCharStyle))
If levelHasParagraph And levelThisStyle Then
noParagraph = True 
Exit Function
EndIf
Next k
Next j
Next i
End Function

как сделать, чтобы он автоматически запускался при открывании файла?
Вообще-то это делается через Сервис - Настройка - События
Но я категорически не рекомендую! Во-первых, макрос для автозапуска должен предусмотреть кучу дополнительных проверок (например, а того ли типа документ открыт), а в этом убожестве, слепленном на коленке, ничего похожего нет. А во-вторых, выполняется этот "перебор каждого для каждого" утомительно долго - запускать эту ерунду для КАЖДОГО открывающегося файла означает намеренно подвешивать офис. Проще один раз вручную запустить для нужного документа
Опять же - возможно, скоро пофиксят и нужда в этой самоделке сама собой отпадёт
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
schweps2
Новичок
*
Offline Offline

Сообщений: 9


« Ответ #11: 9 Июнь 2017, 11:15 »

Вручную не подходит..
Проблема в том, что я конвертирую в ПДФ документы, которые лежат в SAP...эээ..Verzeichnis, не знаю, как это по-нашему.. Ручками там невозможно, что-то изменить, потому что программа делает все автоматически..
И лежит это все на Linux-сервере. Я вчера на убунту замучился либрыофисы тестировать..Все хорошо, но это лишняя жирность все портит..

ПС. Спасибо за доработанный код, н у меня он уже не работает.. ан

УПД! Ан нет! Пока писал сообшение, работа макроса закончилась Всё хорошо Всё хорошо Всё хорошо
« Последнее редактирование: 9 Июнь 2017, 11:21 от schweps2 » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 300


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #12: 9 Июнь 2017, 11:22 »

н у меня он уже не работает..
Точно не работает? Или все-таки работает, но утомительно долго?

В принципе, как всегда можно изменить (ускорить) алгоритм - первым делом выдрать все стили нумерации, из них из всех выбрать только те, где встречаются параграфы со стилем символа начинающегося с "ListLabel". А уже потом пробежаться по всем стилям символов и поменять в нужных жирность символа. Но я это уже делать не стану, лень...

УПД. И ещё в десять раз ускорить - раз уж глюк связан только с первым уровнем, то проверять не все 10, а только первый... И стили перебирать только используемые в документе, а не все... И просто не обращать внимание на не очень жирный параграф... Вариантов масса!
« Последнее редактирование: 9 Июнь 2017, 11:27 от JohnSUN » Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
schweps2
Новичок
*
Offline Offline

Сообщений: 9


« Ответ #13: 9 Июнь 2017, 11:27 »

н у меня он уже не работает..
Точно не работает? Или все-таки работает, но утомительно долго?

В принципе, как всегда можно изменить (ускорить) алгоритм - первым делом выдрать все стили нумерации, из них из всех выбрать только те, где встречаются параграфы со стилем символа начинающегося с "ListLabel". А уже потом пробежаться по всем стилям символов и поменять в нужных жирность символа. Но я это уже делать не стану, лень...

Работает))
На виртуальной машине на один документ 5 минут)

И на том большое спасибо!
Записан
mikekaganski
Ветеран
*****
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 539


« Ответ #14: 9 Июнь 2017, 11:33 »

SAP...эээ..Verzeichnis, не знаю, как это по-нашему..

http://lurkmore.to/SAP ?
Записан

С уважением,
Михаил Каганский
Страниц: 1 2 »   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!