Автоматически сжать все рисунки в документе

Программирование на Visual Basic for Applications
Депрессия
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 13.02.2009 (Пт) 15:11

Автоматически сжать все рисунки в документе

Сообщение Депрессия » 13.02.2009 (Пт) 15:28

Задача:
Автоматически уменьшить вес документа с расширением doc.
В документе произвольное число рисунков, вставленных через буфер обмена.
Размеры рисунков разные, рисунки имеют неотображаемые необрезанные части.
По кнопке "Формат рисунка\Рисунок\Сжать..." все прекрасно получается.
Пытаюсь записать макрос, но записывается только "Формат рисунка\Рисунок",
а действие кнопки "\Сжать..."-нет.
Помогите, пожалуйста!

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Автоматически сжать все рисунки в документе

Сообщение Денис » 13.02.2009 (Пт) 15:34

Я знаю офигенный способ, но, к сожалению, не автоматический:
Сохраняешь в html и работаешь с папкой картинок, либо сохраняешь в docx (zip-архив, как известно), распаковываешь и работаешь с папкой картинок. В папке картинок ужимаешь любым графическим редактором какой тебе нравится, до тех размеров и качества, до которых умеешь.

Такой способ.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Депрессия
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 13.02.2009 (Пт) 15:11

Re: Автоматически сжать все рисунки в документе

Сообщение Депрессия » 13.02.2009 (Пт) 16:12

Попробовала сохранить документ в формате html -теряется форматирование, а мне нельзя допустить изменений в документе.
При сжатии рисунков размер документа уменьшается более, чем в 10 раз, Word это как-то делает своей волшебной кнопочкой, вот бы узнать - как?

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Автоматически сжать все рисунки в документе

Сообщение Денис » 13.02.2009 (Пт) 16:18

Депрессия писал(а):Попробовала сохранить документ в формате html -теряется форматирование, а мне нельзя допустить изменений в документе.


Точно теряется форматирование? Просто при сохранении в html вид переключается с "разметка страницы" на "веб-документ"; а если попробовать установить вид обратно?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Депрессия
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 13.02.2009 (Пт) 15:11

Re: Автоматически сжать все рисунки в документе

Сообщение Депрессия » 13.02.2009 (Пт) 16:29

Точно теряется, выдается сообщение:

Масштабирование знаков будет потеряно. 2
Абсолютная высота строки будет изменена на ''Минимум''. 3
Текст, расположенный на левом поле, сместится вправо.


Пользователи, создавшие документ, не ограничены в возможностях использования форматирования, так что с другими документами могут быть еще проблемы.

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Re: Автоматически сжать все рисунки в документе

Сообщение viter.alex » 13.02.2009 (Пт) 20:21

Депрессия писал(а):…рисунки имеют неотображаемые необрезанные части.…


Загадочная фраза. Можно поподробнее? С примером.

Депрессия
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 13.02.2009 (Пт) 15:11

Re: Автоматически сжать все рисунки в документе

Сообщение Депрессия » 16.02.2009 (Пн) 10:25

Прошу прощения за туманные фразы, вызванные огорчением и помрачением рассудка от неумения найти выход из ситуации :) .
Я имела ввиду, что к вставленному в документ рисунку была применена команда "Обрезка рисунка". В результате, если в свойствах рисунка открыть закладку "Рисунок" ( где, кстати, находится непослушная кнопка "Сжать" :cry: ), имеются ненулевые значения свойства "Обрезка" слева, справа, сверху и снизу. Я пробовала макросом просто сделать их нулевыми
Selection.InlineShapes(1).PictureFormat.CropLeft = 0#
Selection.InlineShapes(1).PictureFormat.CropRight = 0#
Selection.InlineShapes(1).PictureFormat.CropTop = 0#
Selection.InlineShapes(1).PictureFormat.CropBottom = 0# , но:
1. видимый размер рисунка изменился, появилась часть ранее неотображаемой области ;
2. размер документа на диске не уменьшился.
Весь сыр-бор как раз из-за уменьшения размеров хранящегося в базе документа.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Автоматически сжать все рисунки в документе

Сообщение Денис » 16.02.2009 (Пн) 13:59

Депрессия писал(а):Точно теряется, выдается сообщение:...


Эээ, это, как я понимаю при попытке сохранения в html? (сам такое видел)

Тогда остается второй вариант. поставить 2007 офис и сохранить в docx. Затем docx переименовать в zip, распаковать, пережать картинки, упаковать обратно, переименовать в docx, открыть, проверить и если все удачно, то сохранить как doc.

И самое главное! Я не просто так говорю, я опробовал как-то этот метод на практике. У меня был 40 меговый doc'умент (поделка офисного планктона с огромными скринами со сканера). Вышеуказанным методом пожался до 1.5 метра. (40M => 1.5M)
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Депрессия
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 13.02.2009 (Пт) 15:11

Re: Автоматически сжать все рисунки в документе

Сообщение Депрессия » 16.02.2009 (Пн) 15:25

поставить 2007 офис

Не получится, работаем с 2003 и эту операцию надо сделать автоматически с большим количеством документов.
Подозреваю, должна быть команда бэйсика "установить разрешение рисунка", ведь можно же это делать по кнопочке "Сжать...". Мне хватило бы установить разрешение 200 dpi.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Автоматически сжать все рисунки в документе

Сообщение alibek » 16.02.2009 (Пн) 16:03

"Сжатие" не только уменьшает разрешение, но и отрезает невидимые области рисунка.
Но в объектной модели Word я ничего подходящего не нашел.
Видимо с помощью Word VBA это не сделать.

Есть бесплатные компоненты, позволяющие обрабатывать изображения, я бы использовал их.
Lasciate ogni speranza, voi ch'entrate.

Депрессия
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 13.02.2009 (Пт) 15:11

Re: Автоматически сжать все рисунки в документе

Сообщение Депрессия » 16.02.2009 (Пн) 16:16

Видимо с помощью Word VBA это не сделать

Спасибо за советы, раз безнадежно, перестану копать в эту сторону и поищу компоненты.

Депрессия
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 13.02.2009 (Пт) 15:11

Re: Автоматически сжать все рисунки в документе

Сообщение Депрессия » 19.02.2009 (Чт) 10:01

Послала SendKeys, как советовали здесь:
http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/31039c48-85cc-4fce-8145-01d3ae7fa24e/
Понравилось, что если не выделен никакой рисунок, сразу сжимаются все рисунки документа - меньше кода писать.
Нарыла еще забавную ссылку - кто-то таки знает, как это делать, но отвечать будет только за деньги :lol: .
http://www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_21640251.html
Забавно, что я не смогла туда зайти, даже указав данные банковской карточки.

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Автоматически сжать все рисунки в документе

Сообщение Williams » 23.02.2009 (Пн) 22:55

Депрессия писал(а):Забавно, что я не смогла туда зайти, даже указав данные банковской карточки.

Скажите, удалось ли вам в конечном итоге зарегистрироваться на experts-exchange? Планирую завести там аккаунт, но прежде узнать больше информации.
(прошу прощения за оффтопик)
И вы думаете, что вас оставят в живых после прочтения этого поста?

Депрессия
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 13.02.2009 (Пт) 15:11

Re: Автоматически сжать все рисунки в документе

Сообщение Депрессия » 25.02.2009 (Ср) 15:10

Williams писал(а):Скажите, удалось ли вам в конечном итоге зарегистрироваться на experts-exchange?

Из-за вздорности и непостоянства характера больше не пыталась.
Если зарегистрируетесь, не сочтите за труд рассказать, есть там дальше что-нибудь дельное в ответе на вопрос моей темы, или просто написано "Низ-зя!"


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 91

    TopList