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

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

16.03.2012, 16:11. Показов 15205. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Java Micronaut в Docker: контейнеризация с Maven и Jib
Javaican 16.03.2025
Когда речь заходит о микросервисной архитектуре на Java, фреймворк Micronaut выделяется среди конкурентов. Он создан с учётом особенностей облачных сред и контейнеров, что делает его идеальным. . .
Управление зависимостями в Java: Сравнение Spring, Guice и Dagger 2
Javaican 16.03.2025
Инъекция зависимостей (Dependency Injection, DI) — один из фундаментальных паттернов проектирования, который радикально меняет подход к созданию гибких и тестируемых Java-приложений. Суть этого. . .
Apache Airflow для оркестрации и автоматизации рабочих процессов
Mr. Docker 16.03.2025
Управление сложными рабочими процессами — одна из главных головных болей инженеров данных и DevOps-специалистов. Представьте себе: каждый день нужно запускать десятки скриптов в определенной. . .
Оптимизация приложений Java для ARM
Javaican 16.03.2025
ARM-архитектура переживает настоящий бум популярности в технологическом мире. Когда-то воспринимаемая исключительно как решение для мобильных устройств и встраиваемых систем, сегодня она штурмует. . .
Управление состоянием в Vue 3 с Pinia и Composition API
Reangularity 16.03.2025
Когда я начал работать с Vue несколько лет назад, мне казалось достаточным использовать простую передачу данных через props и события между компонентами. Однако уже на среднем по сложности проекте. . .
Введение в DevSecOps: основные принципы и инструменты
Mr. Docker 16.03.2025
DevSecOps - это подход к разработке программного обеспечения, который объединяет в себе принципы разработки (Dev), безопасности (Sec) и эксплуатации (Ops). Суть подхода заключается в том, чтобы. . .
GitHub Actions vs Jenkins: Сравнение инструментов CI/CD
Mr. Docker 16.03.2025
В этой битве за эффективность и скорость выпуска программных продуктов ключевую роль играют специализированные инструменты. Два гиганта в этой области — GitHub Actions и Jenkins — предлагают разные. . .
Реактивное программировани­е с Kafka Stream и Spring WebFlux
Javaican 16.03.2025
Реактивное программирование – это программная парадигма, ориентированная на потоки данных и распространение изменений. Она позволяет выражать статические или динамические потоки данных и. . .
Простая нейросеть на КуМир: Учебное пособие по созданию и обучению нейронных сетей
EggHead 16.03.2025
Искусственные нейронные сети — удивительная технология, позволяющая компьютерам имитировать работу человеческого мозга. Если вы хотя бы немного интересуетесь современными технологиями, то наверняка. . .
Исполнитель Кузнечик в КуМир: Решение задач
EggHead 16.03.2025
Среди множества исполнителей в системе КуМир особое место занимает Кузнечик — простой, но невероятно полезный виртуальный персонаж, который перемещается по числовой прямой, выполняя ваши команды. На. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru