Нумерация списков *.RTF файла в LO

Автор schweps2, 8 июня 2017, 17:22

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

schweps2

Приветствую, дорогие друзья. :)
Помогите, сил моих больше нет.

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

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

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

Помогите, люди добрые! :'( :'( :'( :'(


Спасибо!

JohnSUN

Добро пожаловать на форум!
Можно было бы рассказать как найти в каком из стилей застряла эта "жирность" и как её убрать, но это привело бы к большому количеству ручных правок: стилей с именем 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

С уважением,
Михаил Каганский

ape

Цитата: mikekaganski от  8 июня 2017, 18:11
https://bugs.documentfoundation.org/show_bug.cgi?id=108416
Версия: 5.4.0.0.beta2
ID сборки: 3cc1cdd8ee50f144e5514da51800a08119754d8f
Потоков ЦП: 8; ОС:Windows 5.2; Отрисовка ИП: по умолчанию;
Локаль: ru-RU (ru_RU); Calc: group

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

schweps2

Цитата: ape от  8 июня 2017, 16:39Что-то не так (скриншот)?
Не так выглядит нумерация в ЛО. она жирным маркирована...


Цитата: JohnSUN от  8 июня 2017, 16:03Возможно такой вот макрос может облегчить жизнь:
Спасибо большое, завтра обязательно попробую!


ape

Цитата: schweps2 от  8 июня 2017, 20:39
Цитата: ape от  8 июня 2017, 16:39Что-то не так (скриншот)?
Не так выглядит нумерация в ЛО. она жирным маркирована...

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

schweps2

#7
Цитата: JohnSUN от  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



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

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

ПС. Еще один вопрос, как сделать, чтобы он автоматически запускался при открывании файла? :beer:

schweps2

Цитата: ape от  9 июня 2017, 08:01
Цитата: schweps2 от  8 июня 2017, 20:39
Цитата: ape от  8 июня 2017, 16:39Что-то не так (скриншот)?
Не так выглядит нумерация в ЛО. она жирным маркирована...

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

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

mikekaganski

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

JohnSUN

Цитата: schweps2 от  9 июня 2017, 09:50
А можете сделать так, если вас не затруднит, чтобы строки с символом §(параграф) не изменялись.
всё могём: и пилить могём, и строгать могём... а параграфы не могём... потому как с ними долбёжу много
Это ж для каждого стиля нужно перебрать все стили нумерации, для каждого из десяти уровней проверить а не параграф ли там префикс да не этот ли стиль символа назначен (ДЕСЯТЬ УРОВНЕЙ, КАРЛ!)
В общем, это так же скучно, как переоформлять стили вручную
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


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

schweps2

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

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

УПД! Ан нет! Пока писал сообшение, работа макроса закончилась :beer: :beer: :beer:

JohnSUN

#12
Цитата: schweps2 от  9 июня 2017, 11:15
н у меня он уже не работает..
Точно не работает? Или все-таки работает, но утомительно долго?

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

УПД. И ещё в десять раз ускорить - раз уж глюк связан только с первым уровнем, то проверять не все 10, а только первый... И стили перебирать только используемые в документе, а не все... И просто не обращать внимание на не очень жирный параграф... Вариантов масса!
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

schweps2

Цитата: JohnSUN от  9 июня 2017, 11:22
Цитата: schweps2 от  9 июня 2017, 11:15
н у меня он уже не работает..
Точно не работает? Или все-таки работает, но утомительно долго?

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

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

И на том большое спасибо!

mikekaganski

С уважением,
Михаил Каганский