Форум программистов, компьютерный форум, киберфорум
MS Office Word
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
1 / 1 / 0
Регистрация: 03.12.2019
Сообщений: 23

Очистка содержимого документа Word от <w:rFonts w:hint="eastAsia"/>

02.03.2023, 01:05. Показов 10384. Ответов 23

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Заранее извиняюсь за "много букв", так как более лаконично описать проблему не хватает времени.

Прошу оказать помощь в решении следующей проблемы:

При создании своего документа пользователи копируют части текста из разных документов, также созданных в Microsoft Word, в которых есть различные шрифты(как внедряемые так и не внедряемые), которые не всегда имеются на локальной машине пользователя и получить их нет возможности.

Когда пользователь копирует текст из чужого файла в свой и при этом шрифт, используемый в чужом файле, отсутствует у пользователя, то Word подменяет шрифт на наиболее подходящий. И вроде бы, какая проблема?! Подменяет и подменяет и что с того. Пользователь спокойно выделяет вставленный кусок текста и меняет шрифт на свой, который он использует в своём документе и вроде бы всё хорошо.

Документ подготовлен, всё в редакторе выглядит аккуратно, но как оказалось, проблема кроется внутри файла. Как выяснилось, что при копировании текста с сохранением форматирования из одного документа в другой, при отсутствии используемого шрифта на локальной машине пользователя применяемого в файле-источнике текста Microsoft Word подставляет похожий по виду шрифт и в буквальном смысле "ломает" текст внутри документа дробя целые предложения тегами вида <w:rFonts w:hint="eastAsia"/>.

Сразу отмечу, что "Очистка формата" и "Формат по абзацу" не решают проблемы. При этом документ в Microsoft Word выглядит целостным и в нигде нет упоминания о "eastAsia". Проблемы начинаются при конвертации файла в PDF. Из-за того что, внутри файла document.xml текст хаотично разбит выше упоминаемыми тэгами, при конвертации слетает форматирование, и например часть слова может быть перенесена на новую строку с нарушением правил переноса.

Поиск дал, что подобная проблема уже ранее встречалась: https://stackoverflow.com/ques... 2#49225232

Однако решения описанной проблемы я так и не нашел.
Пока выяснилось следующее:
Если извлечь из контейнера docx файл document.xml и в нем по поиску удалить все <w:rFonts w:hint="eastAsia"/>,
то при конвертации в PDF проблема с форматированием пропадает.

Не могли бы вы подсказать решение описанной проблемы.
Если есть возможность макросом VBA в MS Word удалить лишнее было бы прекрасно не "вскрывая" каждый docx
Или, всё таки нужно всё нужно создавать программку, которая "обрабатывала" файлы docx удаляя лишнее.
Заранее благодарен за ответы.

Пример содержимого текста проблемного файла document.xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
...
<w:r w:rsidRPr="008B15BE">
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
<w:lang w:val="en-US"/>
</w:rPr>
<w:t>время</w:t>
</w:r>
<w:r w:rsidRPr="008B15BE">
<w:rPr>
<w:lang w:val="en-US"/>
</w:rPr>
<w:t xml:space="preserve"> </w:t>
</w:r>
-<w:r w:rsidRPr="008B15BE">
-<w:rPr>
<w:rFonts w:hint="eastAsia"/>
<w:lang w:val="en-US"/>
</w:rPr>
<w:t>трансляции</w:t>
</w:r>
...
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.03.2023, 01:05
Ответы с готовыми решениями:

Вывод содержимого документа MS Word в RichTextBox
Здравствуйте! Возникли такие вопросы при работе с Word документом. 1) Возможно ли построчное считывание документа Word в RichTextBox? ...

Добавление содержимого документа Word в бд MS Access 2013
Доброго времени суток, уважаемые форумчане. Имеется задача: создать банк-генератор вариантов ЕГЭ по информатике. Смысл примерно такой:...

На оборотной стороне документа word в правой части документа, текст съезжает за границу документа
Добрый вечер. Есть код, который формирует документ из шаблона. И все вроде бы, но происходит что то непонятное. На оборотной стороне...

23
Динохромный
1639 / 776 / 288
Регистрация: 22.12.2015
Сообщений: 2,422
07.03.2023, 10:12
Студворк — интернет-сервис помощи студентам
AlexSwan, убрат
Цитата Сообщение от AlexSwan Посмотреть сообщение
по отлову подобного тега и удаления из него части тега с eastAsia
В коде ниже реализовано удаление, в принципе можно вместо этого программно проверить, есть ли в теге упоминание другого шрифта, и менять "eastAsia" на предыдущий шрифт в теге: то есть <w:rFonts w:hAnsi="Times New Roman" w:ascii="Times New Roman" w:hint="eastAsia"/> исправить на <w:rFonts w:hAnsi="Times New Roman" w:ascii="Times New Roman" w:hint="Times New Roman"/>.
Посмотрите, если есть смысл, код в общем-то написать несложно. Пока из тега удаляется кусок w:hint="eastAsia"
, плюс первый тег удаляется полностью, как было раньше.
Надо на самом деле почитать спецификацию xml, за что эти теги отвечают, когда руки дойдут.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Sub ReplaceInWordOpenXML_test8()
    Dim rngObj As Range, i As Long, p As Boolean, k As Boolean
    p = False
    k = False
    For i = ActiveDocument.Paragraphs.Count To 1 Step -1
    Set rngObj = ActiveDocument.Paragraphs.Item(i).Range
    'rngObj.Select
    'MsgBox rngObj.Tables.Count
    If rngObj.Tables.Count = 0 Then
         If p And rngObj.ContentControls.Count = 0 And rngObj.WordOpenXML Like "*<w:rFonts w:hint=" & Chr(34) & "eastAsia" & Chr(34) & "/>*" Then
            rngObj.Select
            Selection.Collapse wdCollapseEnd
             Selection.MoveLeft Unit:=wdCharacter, Count:=1
            Selection.TypeText Chr(10) & Chr(10)
            k = True
            Set rngObj = ActiveDocument.Paragraphs.Item(i).Range
            'rngObj.Select
            p = False
            End If
        If rngObj.ContentControls.Count = 0 Then
            sWordOpenXML = rngObj.WordOpenXML
            If sWordOpenXML Like "*<w:rFonts w:hint=" & Chr(34) & "eastAsia" & Chr(34) & "/>*" Then
                sCleanedXML = Replace(sWordOpenXML, "<w:rFonts w:hint=" & Chr(34) & "eastAsia" & Chr(34) & "/>", "")
                If sCleanedXML Like "*<w:rFonts*w:hint=" & Chr(34) & "eastAsia" & Chr(34) & "/>*" Then
                    sCleanedXML = Replace(sCleanedXML, Chr(34) & "eastAsia" & Chr(34), "")
                End If
                rngObj.InsertXML sCleanedXML
                If k Then
                    ActiveDocument.Paragraphs.Item(i + 1).Range.Delete
                    k = False
                End If
            End If
        End If
    Else
    p = True
    End If
1
 Аватар для Narimanych
2752 / 1726 / 779
Регистрация: 23.03.2015
Сообщений: 5,452
07.03.2023, 11:23
Регулярками же легче....
0
Динохромный
1639 / 776 / 288
Регистрация: 22.12.2015
Сообщений: 2,422
07.03.2023, 11:29
Narimanych, оно вроде как да, но у меня проблема - я не знаю как xml разметка в Word работает. По хорошему нужно читать спецификацию, но оно ж времени нет (я вяло полистал и забил, каюсь. Ну дык я и английский так как вы не знаю , ничего не попишешь).
Поэтому костыль - удалять то, что точно мешает, и не трогать все остальное, тут без регулярок вполне себе. Честно говоря, даже не знаю, какой результат дает удаление hint в теге.
1
1 / 1 / 0
Регистрация: 03.12.2019
Сообщений: 23
08.03.2023, 23:26  [ТС]
Dinoxromniy

Спасибо, задача решена. Всё работает отлично.
Про почитать про xml схожие ощущения
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.03.2023, 23:26
Помогаю со студенческими работами здесь

Создание документа Word из другого документа Word
Добрый вечер, не судите строго, мало разбираюсь в программировании ,но был бы не против почитать ваши советы насчёт моего вопроса. Мне...

Excel Word Delphi 7 поиск содержимого в диапазоне ячеек и перенос в Word
Всем привет! Вопрос следующий. Моя программа АСУ делает следующие. Есть список сотрудников в Excel и из этого списка я формирую титульный...

Очистка содержимого файла
Не могу разобраться (: Пишу программу чтобы удаляла содержимое текстового документа ( именно содержимое ( не сам txt) Подскажите код ) ...

Очистка содержимого Image
Всем доброго времени суток. Кто может подсказать как можно очистить Image? Нужно т.к. если загоняю в него картинку меньшего размера то...

Очистка содержимого QWidget
Доброе время ! Я рисую в Qwidjet Qpaineter'ом по кнопке но не знаю как очищать widget перед новым рисованием. Нужна ваша помощь, желательно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
Диалоги с ИИ
zorxor 23.05.2026
Насколько я понимаю - Вы - Искусственный Интеллект. Это так? Да, всё верно. Я — искусственный интеллект. Я представляю собой большую языковую модель, созданную для помощи в самых разных задачах. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru