Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.51/79: Рейтинг темы: голосов - 79, средняя оценка - 4.51
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 5
1

Пакетная обработка *.doc с рисунками внутри. Уменьшить качество рисунков.

16.03.2012, 16:11. Показов 15203. Ответов 37
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Поискал на форуме, поискал в Интернете,
Нашёл только пакетную обработку *.Doc и изменение масштабов рисунка.

А задача такая:
Есть примерно 2000 целевых файлов в папке. Там в *.doc файлах есть рисунки, которые необходимо сжать без сильной потери качества. Вручную это делается легко, но рисунков слишком много.

Word 2007. Или 2010.

Поможете?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.03.2012, 16:11
Ответы с готовыми решениями:

Плохое качество рисунков в TImageList
Собственно я недоволен компонентом TImageList . Точнее его ограничениями на размеры хранимых в нем рисунков а) однотипность размеров...

Есть книга которую я отсканировал, но после сканирования качество рисунков пропадает
Есть книга который я сканировал, но после сканирование качество рисунки пропадает то есть немножко серовата. Хочу создать прогу который...

Пакетная обработка
Привет всем ! У меня созрел вопрос следующего характера: во время пакетной обработки в Fhotoshop, ну допустим изменения размера, во время...

37
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
16.03.2012, 16:21 2
corvus_ukhta,
а как вручную сжимаете?
Надо будет писать тогда код на VBA.
0
 Аватар для Buckminster
1032 / 703 / 66
Регистрация: 30.01.2012
Сообщений: 714
19.03.2012, 01:25 3
Цитата Сообщение от corvus_ukhta Посмотреть сообщение
Вручную это делается легко
Цитата Сообщение от Busine2012 Посмотреть сообщение
а как вручную сжимаете?
присоединяюсь к вопросу...

как вариант:

.doc -> .docx -> .zip -> unzip\word\media\*.jpg -> [пакетная обработка] -> .zip -> .docx
0
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 5
19.03.2012, 09:29  [ТС] 4
Простите за долгий ответ, был занят.

Надо открыть каждый документ и щёлкнуть на замечательную кнопочку "Сжать документ".

Скрин из 10-го, но смысл тот же. Находится во вкладке "Работа с рисунками"



Выделено красным квадратом.

Там есть опции
- применить ко всем рисункам документа
- для печати (200 dpi)
-Сжать рисунки
-Удалить обрезанные области
0
 Аватар для Buckminster
1032 / 703 / 66
Регистрация: 30.01.2012
Сообщений: 714
19.03.2012, 10:47 5
возможно, существует и более простой способ, но приведённый мною вполне рабочий:
  1. с помощью макроса VBA осуществляем пакетную конвертацию .doc -> .docx;
  2. групповое переименование .docx -> .zip (.docx – это на самом деле zip-файл);
  3. архиватором распаковываем каждый архив в отдельную папку;
  4. любым скриптом собираем данные о файлах изображений в папках word\media;
  5. информацию о путях к графическим файлам собираем в текстовый документ;
  6. текстовый документ подаём на вход пакетной обработки файлов IrfanView;
  7. в параметрах указываем перезапись оригинальных файлов;
  8. результаты архивируем в отдельные архивы (тоже понадобится скрипт);
  9. групповое переименование .zip -> .docx;
не элементарно, но вполне реализуемо... весь процесс, по сути, представляет из себя один большой скрипт...
0
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
19.03.2012, 11:19 6
Цитата Сообщение от corvus_ukhta Посмотреть сообщение
Надо открыть каждый документ и щёлкнуть на замечательную кнопочку "Сжать документ".
а где находится кнопка Сжать документ?


Цитата Сообщение от corvus_ukhta Посмотреть сообщение
Там есть опции
- применить ко всем рисункам документа
- для печати (200 dpi)
-Сжать рисунки
-Удалить обрезанные области
и какую опцию нужно применить?

Напишите от А до Я, как вы делаете вручную, например:
  1. открываю документ;
  2. вкладка такая-то, группа такая-то, кнопка такая-то.


Цитата Сообщение от corvus_ukhta Посмотреть сообщение
Есть примерно 2000 целевых файлов в папке.
а что значит целевых, какие ещё бывают файлы?


Цитата Сообщение от Buckminster Посмотреть сообщение
.doc -> .docx -> .zip -> unzip\word\media\*.jpg -> [пакетная обработка] -> .zip -> .docx
что за [пакетная обработка]?
Вроде вопрос темы и заключается в том, что нужно эту пакетную обработку сделать.
0
 Аватар для Buckminster
1032 / 703 / 66
Регистрация: 30.01.2012
Сообщений: 714
19.03.2012, 11:40 7
Цитата Сообщение от Busine2012 Посмотреть сообщение
что за [пакетная обработка]?
Вроде вопрос темы и заключается в том, что нужно эту пакетную обработку сделать.
пакетная обработка графических файлов из папок word\media zip-архивов docx-файлов...
0
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
19.03.2012, 11:41 8
Цитата Сообщение от Buckminster Посмотреть сообщение
пакетная обработка графических файлов из папок word\media zip-архивов docx-файлов...
так человек и спрашивает, как сделать эту пакетную обработку.
0
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 5
19.03.2012, 12:11  [ТС] 9
Наверно тороплюсь и непонятно выражаюсь.
Входные данные

Есть структура папок которая называется "Архив". В ней много подпапок. В них находятся различные файлы, например *.pdf, *.dwg, *.doc
Файлы кроме *.doc нас не интересуют.

В файлах *.doc, зачастую (почти во всех), много фото и сканированных протоколов. Они иногда обрезаны(т.е. отображена только часть рисунка).

Задача:
Прошерстить всё дерево подпапок и сжать документы *.doc(Т.е. просто сжать рисунки в них).

Если вручную это делать, то выглядит это так:
1) Открываем документ
2) выделяем рисунок, кликнув на него
3) Щёлкаем на ленту меню(вкладку) "Работа с рисунками"
4) Щёлкаем на кнопку "Сжать рисунки"
и выбираем опции, как на скриншоте




* Там на фото ошибка. Нужно применять сжатие для всех рисунков в документе...
0
 Аватар для Buckminster
1032 / 703 / 66
Регистрация: 30.01.2012
Сообщений: 714
19.03.2012, 13:49 10
Цитата Сообщение от Busine2012 Посмотреть сообщение
так человек и спрашивает, как сделать эту пакетную обработку.
возможно, я тоже не совсем ясно выразился: после конвертации имеющихся doc-файлов в docx-формат и разархивирования docx-файлов осуществляется пакетная обработка (например, с помощью IrfanView) графических файлов, хранящихся на диске в папках word\media, соответствующих конкретным исходным документам... такая пакетная обработка сама по себе осуществляется элементарно, но требует предварительной подготовки и последующей обработки полученных результатов (обратное запаковывание в docx-файлы)... впрочем, я согласен с тем, что я описал саму идею, но не предложил конкретной реализации в виде готовых скриптов... также я неявно предполагал, что все исходные ("целевые") doc-файлы уже имеются (например, лежат в одной папке)...

p.s. впрочем, реализация через ExecuteMso "PicturesCompress" и SendKey, наверное, действительно проще... без лишней мороки с конвертацией... например, такой код:

Visual Basic Скопировано
1
2
3
4
5
6
Sub CompressPic()
 
SendKeys "оп~"
Application.CommandBars.ExecuteMso "PicturesCompress"
 
End Sub
применяет сжатие ко всем рисункам документа в разрешении для печати (200 точек на дюйм)...

осталось только
Цитата Сообщение от corvus_ukhta Посмотреть сообщение
Прошерстить всё дерево подпапок
0
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
19.03.2012, 14:08 11
Buckminster,
просматривать все папки можно только с помощью рекурсивной процедуры.
Я сейчас буду код писать.
У меня только не совпадает диалоговое окно, рисунок которого выложен автором темы, с диалоговом окном, которое у меня на компьютере.
0
 Аватар для Buckminster
1032 / 703 / 66
Регистрация: 30.01.2012
Сообщений: 714
19.03.2012, 14:12 12
Цитата Сообщение от Busine2012 Посмотреть сообщение
не совпадает диалоговое окно, рисунок которого выложен автором темы, с диалоговом окном, которое у меня на компьютере
в режиме совместимости (doc) окно отличается от стандартного (docx)...
1
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
19.03.2012, 14:15 13
Цитата Сообщение от Buckminster Посмотреть сообщение
в режиме совместимости (doc) окно отличается от стандартного (docx)...
да, точно.
0
 Аватар для Buckminster
1032 / 703 / 66
Регистрация: 30.01.2012
Сообщений: 714
19.03.2012, 14:20 14
Цитата Сообщение от Busine2012 Посмотреть сообщение
просматривать все папки можно только с помощью рекурсивной процедуры
не только... например, dir "path\*.doc" /s /b генерирует список имён файлов с учётом всех подкаталогов... или FileSearch с SearchSubFolders
0
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
19.03.2012, 14:28 15
Цитата Сообщение от Buckminster Посмотреть сообщение
например, dir "path\*.doc" /s /b
напишите пример кода на VBA.
0
 Аватар для Buckminster
1032 / 703 / 66
Регистрация: 30.01.2012
Сообщений: 714
19.03.2012, 15:03 16
Цитата Сообщение от Busine2012 Посмотреть сообщение
напишите пример кода на VBA

Code Скопировано
1
2
3
  ChDir SearchPath
  cmd = " /c dir *.doc /s /b > dir.txt"
  Shell Environ("ComSpec") & cmd
или

Visual Basic Скопировано
1
2
3
4
5
6
7
8
9
With Application.FileSearch
  .LookIn = SearchPath
  .SearchSubFolders = True
  .FileType = msoFileTypeWordDocuments
   List = ""
   For i = 1 To .FoundFiles.Count
      List = List & .FoundFiles(i)
   Next i
End With
0
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
19.03.2012, 15:13 17
Цитата Сообщение от Buckminster Посмотреть сообщение
With Application.FileSearch
а что за Application?
0
 Аватар для Buckminster
1032 / 703 / 66
Регистрация: 30.01.2012
Сообщений: 714
19.03.2012, 15:21 18
Цитата Сообщение от Busine2012 Посмотреть сообщение
а что за Application?
хм, т.е. как это что за Application? вот:
Application Object: Represents the Microsoft Word application
0
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
19.03.2012, 15:30 19
Buckminster,
а вы тестировали код?
0
 Аватар для Buckminster
1032 / 703 / 66
Регистрация: 30.01.2012
Сообщений: 714
20.03.2012, 09:49 20
Цитата Сообщение от Busine2012 Посмотреть сообщение
а вы тестировали код?
согласен, это рабочий код под Word 2003 и начиная с Word 2007 у объекта Application действительно отсутствует свойство FileSearch...
приведённый код для Shell прекрасно решает ту же задачу...

p.s. эскиз кода:

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
Sub BatchCompress()
  
  dirpath = "С:\Temp\"                                          'целевой каталог
  driveletter = Left(dirpath, 1)                                'диск
  ChDrive driveletter                                           'устанавливаем диск
  ChDir dirpath                                                 'устанавливаем путь
  cmd = " /c dir *.doc /s /b > dir.txt"                         'формируем строку для dir
  Shell Environ$("comspec") & cmd, vbHide                       'получаем список doc-файлов
 
  MsgBox "Dir List Created!"
 
  dirfile = dirpath & "dir.txt"                                 'путь к списку файлов (DOS CP866)
  Set dirlist = Documents.Open(dirfile, , , , , , , , , , msoEncodingOEMCyrillicII) 'открываем список
  For i = 1 To dirlist.Paragraphs.Count                         'перебираем строки списка
    With dirlist.Paragraphs(i).Range            
      fn = .Text
      fn = Replace(fn, vbCr, "")                                'удаляем CR/LF
      fn = Replace(fn, vbLf, "")
      Set od = Documents.Open(fn)                               'открываем doc-файл
      SendKeys "оп~"                                            'устанавливаем опции компрессии
      od.Application.CommandBars.ExecuteMso "PicturesCompress"  'выполняем сжатие рисунков
      od.Save                                                   'сохраняем файл
      od.Close                                                  'закрываем файл
    End With
  Next
 
  MsgBox "Compressing Finished!"
 
  dirlist.Close                                                 'закрываем список файлов
  
End Sub
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.03.2012, 09:49
Помогаю со студенческими работами здесь

Пакетная обработка
Ребят задумка такая....открываю файл docx, запускаю макрос. Он копирует в буфер картинки с листа, затем запускает...

Пакетная обработка треков
Всем привет. Нужно ПО, которое будет накладывать нужный мне звуковой файл на MP3 файлы. Допустим: имеется 20 MP3 песен (до 5 минут),...

Пакетная обработка файлов
Нужно переводить большие группы файлов *.txt *.hmtl *.php и т.д. из кодировки ANSI в UTF-8 с сохранением оригинальных файлов (скажем с...

Кроп и пакетная обработка
Привет форумчане, с прошедшим праздником :) Учусь делать HDR панорамы. Нужно выравнять и кадрировать фотки, снятые с эксповилкой. В...

Пакетная конвертация PDF в DOC и печать любых документов на PDF-принтере
В первую очередь извините, если создал тему в неположенном разделе, но к сожалению найти близкий по тематике раздел мне не удалось =(. ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Осваиваем Kubernetes: Подробная шпаргалка
Mr. Docker 15.03.2025
Kubernetes — это открытая платформа для автоматизации развертывания, масштабирования и управления контейнеризированными приложениями. Он был создан для решения проблем, с которыми сталкиваются. . .
Лучшие PHP REST API фреймворки
Jason-Webb 15.03.2025
Современные PHP REST API фреймворки предлагают большой набор функциональности: от автоматической валидации данных и управления маршрутизацией до генерации документации и интеграции с различными. . .
Многопоточность в Java с Project Loom: виртуальные или обычные потоки
Javaican 15.03.2025
Многопоточность всегда была одноим из основных элементов в разработке современного программного обеспечения. Она позволяет приложениям обрабатывать несколько задач одновременно, что критично для. . .
Что нового в Swift 6 и особенности миграции
mobDevWorks 15.03.2025
Swift 6 — это новый крупный релиз языка программирования от Apple, анонсированный на WWDC 2024. Если вы следили за эволюцией Swift, то наверняка заметили, что многие значимые возможности, которые. . .
Вопросы на собеседовании по Android
mobDevWorks 14.03.2025
По данным статистики, Android занимает более 70% мирового рынка мобильных операционных систем, что делает платформу привлекательной как для начинающих разработчиков, так и для опытных профессионалов. . . .
Лучшие игровые движки для Python
py-thonny 14.03.2025
Python обеспечивает разработчиков игр мощными движками и фреймворками, которые позволяют воплотить практически любую идею — от простой аркады до визуального романа с разветвленным сюжетом. Главное. . .
Бессерверный JavaScript: Разработка масштабируемых API с AWS Lambda
run.dev 14.03.2025
Но что такое бессерверные вычисления на самом деле? По сути, это модель облачных вычислений, где разработчик фокусируется исключительно на создании бизнес-логики, не тратя время на настройку. . .
Безопасность кода в C++26: Менеджеры ресурсов и висячие ссылки
NullReferenced 14.03.2025
C++ всегда был языком, предоставляющим разработчикам большие возможности и гибкость, но вместе с тем требующим ответственности. Одной из самых коварных проблем даже для опытных программистов остаются. . .
smart-agent proper interface settings (2025)
jigi33 14.03.2025
Smart-agent proper interface settings (mart 2025). (see screenshots to look at "Etalon" ARM)
Продвинутые настройки JVM
Javaican 14.03.2025
Стандартные параметры запуска JVM хороши для повседневной разработки, но совершенно недостаточны для высоконагруженных систем. Представьте, что вы запускаете финансовую платформу, обрабатывающую. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер