1 / 1 / 0
Регистрация: 03.12.2019
Сообщений: 23

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

02.03.2023, 01:05. Показов 10592. Ответов 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,430
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,430
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru