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

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

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

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

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

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

Здравствуйте.

Извиняюсь, что пишу немного не туда, но раздела по PowerPoint я не нашел. Тут больше интересует мнение людей работающих с СОМ объектной моделью и OpenXML оффиса.

Пишу генератор pptx файла. (pptx - запакованная иерархия xml-eй). На слайды вставляю текст и хочу чтобы он занимал конкретный размер. Например текст "парам пам пам" занимал 3см в ширину. Для этого в xml-e есть специальный тег <a:normAutofit /> в теге <a:bodyPr ..> в теге <p:txBody> ну и так далее.

Если я нагенерирую xml и текст не помещается в строку он переносится на следующую. И на первый взгляд поле <a:normAutofit /> не сильно работает. Но, если я руками в открытом pptx-e и изменю, например, положение какого-либо объекта, то текст на слайде автоматически перестроится в соответствии с нужными размерами, которые четко впишутся в заданную ширину.

Вопрос в том, как автоматизировать это перестроение?

Как вариант пробую открыть презентацию через СОМ модель, добраться до 1ого слайда и немного изменить положение какого-либо объекта. Затем пересохраняю документ и с виду все окей.
Но, когда генерируемый документ имеет количество слайд (страниц) побольше чем несколько(я провожу тест на 1300 стр.). То пересрохраненный текст оказывается на нескольких первых страницах. Остальные остаются с перенесенными словами на следующую строчку. В этом случае пробую в цикле менять каждый слайд (страницу) чтобы текст перестроился везде. Но в результате получаю, что где-то норм текст, где-то перепрыгнул на след. строку.

Данную операцию пробовал делать вручную. Т.е. открывал свой 1300 страничный документ через PowerPoint и менял что-либо на первой странице - текс перестраивается на ближайших 4-6 страниц, на 7ой ничего не происходит. Перехожу на 7ую, меняю тут что-либо - текст перестраиватся на след 4-6стр...

Вопрос в том, как перестроить текст всего документа, чтобы текст помещался точно в рамки отведенной ширины? Надеялся, что есть метод у презентации или у слайдов, что-то типа Refresh или update. То что нашел результатов не дало. Может быть в объектной модели word-a есть что-либо похожее?

Если открыть нагенеренный документ PowerPoint-ом, внести небольшое изменение, а затем сохранить его, а затем переименовать в zip, разархивировать, найти нужный слайд и взглянуть что PowerPoint делает с данными чтобы они уместились, то можно увидеть что в атрибутах xml тега <a:normAutofit /> появляются параметры fontScale="92.000%" lnSpcReduction="20.000%" которые для каждого текстового блока свои.

Могу сделать предположение, что меняя документ через PowerPoint выполняется ряд действий приводящий к данному желательному результату, но какие это действия?

В прикреплении 1страничный тест.
Прикрепить мой тестовый нагенеренный/запакованный pptx файл на 1300стр не получилось. Но скачать его можно тут https://onedrive.live.com/redir?resi...t=file%2c.pptx.

Основной вопрос, как перестроить документы, чтобы весь текст обновился?

Буду благодарен за любые подсказки/мысли, как это сделать в xml, СОМ или руками.
Вложения
Тип файла: zip t3.zip (7.7 Кб, 8 просмотров)
Diego__ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
26. Задан текст. Вывести первое слово, которое имеет заданную длину. jek09 Помощь студентам 2 15.01.2014 11:30
Треугольник вписанный в окружность. Найти площадь Ujas Паскаль, Turbo Pascal, PascalABC.NET 3 19.09.2012 01:13
составить программы на паскале: попадание точки в заданную область; вывести текст в разные места экрана Кашелот Помощь студентам 1 27.10.2011 23:24
Нарисовать заданную фигуру wdnk Общие вопросы C/C++ 6 29.05.2009 00:21
Содержит ли текст заданную отдельную строку длинной не более 255 из символов 0 и 1 Curtis Помощь студентам 1 15.02.2009 20:08