Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2010, 18:37   #1
Diego__
Форумчанин
 
Регистрация: 12.08.2009
Сообщений: 118
По умолчанию Проблема с именем шрифта

В цикле вставляю текст

Код:
for (int i = 0; i < textCount; ++i)
{
	...	
	range->InsertAfter(wordText.GetText().GetString());	
	Word::_FontPtr font = range->GetFont();
	
	font->PutName(wordText.GetFont().c_str());
	font->PutSize(wordText.GetFontSize());
        ...
	range->PutStart(range->GetEnd());
}
на N-ой итерации после выполнения метода InsertAfter получаю текст с именем шрифта (calibri (Body)). Данный шрифт до сих пор не устанавливался . Далее мой PutName желаемый шрифт не устанавливает и исключение не кидает. Это происходит для русских символов. Предполагаю, что в устанавливаемом мной шрифте нет русских символов.

Откуда берется шрифт calibri? Я создаю документ на основе моего шаблона. В шаблоне задаю шрифт по умолчанию Times New Roman. Если в font->PutName() для всех итераций цикла задаю "Times New Roman" - все отрабатывает нормально.

Свой шаблон создал в word-е задав шрифт и сохранив файл с расширением dotx и dot (для 2003 и 2007 word-a). Внутри xml-ей dotx-a находил слово calibri и заменял на Times New Roman - результат прежний.

Возможно определить установил ли метод PutName желаемый Name? Почему шрифт устанавливается в calibri?

Последний раз редактировалось Diego__; 22.02.2010 в 18:48.
Diego__ вне форума Ответить с цитированием
Старый 22.02.2010, 23:12   #2
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Дело в стилях
cм: http://wordexpert.ru/page/kak-izmeni...imes-new-roman
Aent вне форума Ответить с цитированием
Старый 23.02.2010, 15:43   #3
Diego__
Форумчанин
 
Регистрация: 12.08.2009
Сообщений: 118
По умолчанию

Спасибо за ссылку. Получилось.

Столкнулся с еще одной проблемой. Вставляю следующий текст
"Contents
1 Введение ................................... ................................... ............. 3
2 Условия, необходимые для начала работы ................................... .. 4
2.1 Необходимое ПО ................................... ................................... ... 4
3 Normal Flow ................................... ................................... ........... 7"
Везде шрифт установлен тот что нужен, но для русского языка присутствует добавление (Body Asian), получается Times New Roman (Body Asian). Текст получается сильно растянутый в ширину. Что означает Body, Asian? Почему появляется данное окончание? Как этого можно избежать?

Последний раз редактировалось Diego__; 23.02.2010 в 16:13.
Diego__ вне форума Ответить с цитированием
Старый 25.02.2010, 18:09   #4
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Выложите пример файла
Aent вне форума Ответить с цитированием
Старый 25.02.2010, 18:34   #5
Diego__
Форумчанин
 
Регистрация: 12.08.2009
Сообщений: 118
По умолчанию

Английский текст установлен в Times - так и должно быть.
Русский - Times New Roman (Body Asian), что то не так.
Вложения
Тип файла: rar test.rar (11.3 Кб, 10 просмотров)
Diego__ вне форума Ответить с цитированием
Старый 25.02.2010, 19:22   #6
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Проблема проявляется у меня только в 2007. По крайней мере при пересохранении в .doc(2003) эффект исчезает ...
По всей видимости вставляемый вами фрагмент имеет установки для
основного текста и загоовков - Восточно-азиатское письмо. Возможно Word не правильно интерпретирует юникод при вставке
Проблема решается явным указанием кода языка для русских фрагментов.
Код:
Selection.LanguageID = wdRussian

Последний раз редактировалось Aent; 25.02.2010 в 19:27.
Aent вне форума Ответить с цитированием
Старый 25.02.2010, 19:31   #7
WordVest
Пользователь
 
Регистрация: 21.02.2010
Сообщений: 36
По умолчанию

Шрифт «calibri» берется по умолчанию Word 2007, также при открытии файлов от других пользователей, которые используют стили, установленные в Word, по умолчанию, тута получается интересная ситуация, любой файл, полученный от других пользователей, если Вы используете разную систему форматирования всегда слетит.........
WordVest вне форума Ответить с цитированием
Старый 26.02.2010, 12:08   #8
Diego__
Форумчанин
 
Регистрация: 12.08.2009
Сообщений: 118
По умолчанию

После вставки range-a добавил Word::WdLanguageID lang = range->LanguageID; и в дебаге просмотрел что за язык. В первом и большинстве русских слов установлен wdRussian.
Где можно поставить/убрать установки "Восточно-азиатское письмо"?

Обратил внимание на странный нюанс: если com модель word навствавляла текста и установила шрифт Calibri (body) шрифт выглядит растянутым. Сначала я предположил, что это так и должно быть. Но если я сам руками выделяю этот кусок текста и выбираю шрифт Calibri (body), который уже выбран, визуально шрифт меняется.
В прикреплении рисунок со шрифтом после работы СОМ модели и моих установок.

Откуда берется растяжение?
Изображения
Тип файла: jpg picture.JPG (33.4 Кб, 36 просмотров)
Diego__ вне форума Ответить с цитированием
Старый 26.02.2010, 15:34   #9
Diego__
Форумчанин
 
Регистрация: 12.08.2009
Сообщений: 118
По умолчанию

небольшое наблюдение:
вставляемая строка "2 Условия, необходимые для начала работы ................................... .. 4" у меня разбита на несколько последовательно вставляемый частей. "2 |Условия|, |необходимые для начала работы| ................................... .. 4" каждая часть вставляется отдельно потому, что имеет различные параметры. Часть "необходимые для начала работы" я хочу вставить со шрифтом Times New Roman, перед ней часть ", " вставлена со шрифтом Times. Получаю для моего цикла:

for (int i = 0; i < textCount; ++i)
{
...
range->InsertAfter(wordText.GetText().Get String());

строка "необходимые для начала работы" вставлена со шрифтом Times New Roman (Body), но пробелы в ней имеют шрифт Times

Word::_FontPtr font = range->GetFont();

font->PutName(wordText.GetFont().c_str() );
части которые были Times установились в Times New Roman, остальное осталось Times New Roman (Body)

font->PutSize(wordText.GetFontSize());
...
range->PutStart(range->GetEnd());
}
непонятна причина частичной установки шрифта
После этого руками любой части можно установить один шрифт.
Diego__ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема отображения шрифта в Дэлфи Lord777 Общие вопросы Delphi 2 06.01.2010 18:55
Количество записей с 1 именем Gapro БД в Delphi 6 09.12.2009 15:31
Сохранить с нужным именем maikoms Microsoft Office Excel 4 20.03.2009 11:44
Найти на диске файл с заданным именем D1g1T Помощь студентам 9 02.01.2009 21:17
Возможно ли назвать переменную именем 1y? Lamerok56 Общие вопросы C/C++ 4 18.04.2008 23:55