![]() |
BAT DOC->JPG
Имеется огромное число файлов .doc в каждом примерно по 130 страниц, на выходе необходимо получить .jpg файлы склеенные по 3 страницы.
превратить doc в jpg труда особого не составило, благо есть и под винду линуксовые пакеты типа ghostscript, imagemagick. ну и конечно же LibreOffice. Вообще путь получился достаточно сложный, по тому как мною не было найдено программы которая может перевести "на лету" пакетно из командной строки doc в jpg. По этому у меня получился промежуточный шаг - перевод doc - pdf. 1) переводим DOC в PDF с помощью LibreOffice: Код:
soffice.exe -headless --convert-to pdf:writer_pdf_Export %1 --outdir %~dp1\TMP Код:
soffice.exe -headless --convert-to jpg:writer_jpg_Export %1 --outdir %~dp1\TMP 2) затем PDF в JPG постранично программой ghostscript: Код:
gswin32.exe -q -dNOPAUSE -dPDFFitPage -dFIXEDMEDIA -sDEFAULTPAPERSIZE=a4 -dSAFER -sDEVICE=jpeg -r300 -sOutputFile="%~dp1\TMP\%~n1_page_%%03d.jpg" "%~dp1\TMP\%~n1.pdf" bla-bla-bla_page_001.jpg bla-bla-bla_page_002.jpg bla-bla-bla_page_003.jpg ... bla-bla-bla_page_n.jpg 3) дело осталось за малым, склеить 3 соседние картинки в одну программой montage из пакета imagemagick: Код:
montage.exe bla-bla-bla_page_00[1-3].jpg -tile 3x1 -geometry +0+0 001-003.jpg В принципе меня устраивает длина моего решения, но возможно, кто-то уже сталкивался с подобной задачей и решил ее короче или может быть есть альтернативный метод решения который будет работать быстрее. Хотелось бы тогда его услышать. Условие лишь одно - все должно работать из командной строки, никаких интерфейсов с кнопками, нужна пакетная обработка. |
Цитата:
Примерно так: Код:
@echo off |
Спасибо, то что нужно! Единственное, с нумерацией конечных файлов есть небольшие проблемы, но это поправимо.
|
Цитата:
|
Цитата:
По такому принципу именовать файлы больше нет необходимости, так как полное имя файла все равно не видно (там где они читаться будут), а это критично. Присвоил каждому файлу свой порядковый номер. |
Цитата:
Спасибо, ясно. |
Снова вернусь к этой же теме. До недавнего времени скрипт предложенный Iska (за что ему огромное спасибо), полностью меня устраивал и работал по сей день. Но в виду того, что последнее время в файлах doc стали чаще встречаться страницы с альбомной ориентацией, появилась потребность его подкорректировать, а скорее всего, вообще переписать. Так как, ghostscript при создании jpg все страницы считает портретными и при склеивании montage они выглядят коряво. Пришлось разбить скрипт на 2 части: первый из doc создает jpg, а второй их склеивает и добавил еще один скрипт который в качестве параметров запуска получает имена jpg файлов и осуществляет их вращение на 90 градусов при этом добавляет суффикс "_rotate". Эти файлы склеивать нет необходимости. Но из-за того что в скрипте выше, цикл работает с шагом 3 и в списке файлов уже нет очередности получается полная белиберда. В итоге скрипт выше приходится запускать для каждой группы файлов между файлами с суффиксами "_rotate", а это очень неудобно. Хотелось бы его усовершенствовать, но своих знаний не хватает, а конкретно не знаю как создать цикл. Прошу помощи как минимум в этом, а в идеале вообще бы объединить все скрипты в один, но тут все упирается в ghostscript. В общем хотелось бы на выходе получать файлы в виде:
|
Нашел решение своей задачи, не знаю на сколько правильно оно грамматически, но отработало оно во всех случаях правильно. Как оказалось, скрипт предложенный Iska до сих пор работает на ура, нужно лишь для каждого случая изменять начальное и конечное значения цикла.
Может быть есть более грамотное решение? По ходу решения задачи возникло еще пара вопросов: - Как определить количество jpg файлов в папке %1? (нужно для присвоения значения MaxCount) - Сколько параметров запуска поддерживает bat\cmd файл? На сколько я знаю, это число равно 9, но это если в внутри файла обращаться к каждому отдельно (%1 %2 %3 ... %9), а если необходимо обращаться ко всем сразу (%*)? Ну и о наболевшем: очень хотелось бы все-таки объединить этот скрипт с остальными скриптами, но этому мешает портретная ориентация страницы. Может быть кто-то подскажет возможность извлечения сначала портретных, а затем альбомных страниц при помощи ghostscript'а или другого ПО, поддерживающего работу из командной строки? Или может быть есть возможность получить список всех страниц из файла pdf с указанием ориентации? |
Цитата:
Код:
for %%i in (%1\*.jpg) do set /a MaxCount += 1 |
Время: 19:47. |
Время: 19:47.
© OSzone.net 2001-