gifts2017

Пакетная печать изображений с помощью IrfanView

Опубликовал Антон Степанов (Stepa86) в раздел Печать - Пакетная печать

Встал вопрос с печатью большого количества изображений. Печать через наполнение табличного документа иногда приводила к падению 1Ски из-за нехватки памяти, после этого был выбран способ печати через IrfanView.

Алгоритм работы:

1. На входе: 

  •  
    • Массив полных путей к файлам-изображениям (по отношению к клиентской части даже для клиент-серверного варианта работы)
    • Имя принтера для печати (Необязательно. Если пустое, то подставляется принтер по-умолчанию)
    • Флаг использования сжатия (при подготовке файлов к печати они конвертируются в .tif со сжатием или без, использование сжатия уменьшает трафик для сетевого принтера, но возможно ухудшение качества)

2. Во временной папке создается/находится приложение IrfanView и ini-файл настроек

3. Во временной папке создается еще одна папка и туда конвертируются все файлы для печати. Конвертирование происходит в черно-белый .tif . При использовании сжатия файлы весят в 10 раз меньше исходных (примерно, исходные были jpegи), без сжатия больше в 8-25 на тех же файлах

4. Подается команда печать папки и управление переходит драйверам принтера

5. Удаляется папка с tifами

 

Обработка выполнена под 8.2. Для работы в упр. режиме можно открыть как внешнюю обработку, в обычном нужно прикрутить к конфигурации.

 

Пример вызова из конфы: 

Процедура ПечатьИзображений( пМассивИзображений , пИмяПринтера , пИспользоватьСжатие = Истина )

 

    ПараметрыФормы = Новый Структура;

    ПараметрыФормы.Вставить("МассивИзображений", пМассивИзображений);

    ПараметрыФормы.Вставить("ИмяПринтера", пИмяПринтера);

    ПараметрыФормы.Вставить("ИспользоватьСжатие", пИспользоватьСжатие);

    ОткрытьФорму("Обработка.ксПечатьИзображений.Форма.Форма", ПараметрыФормы);

 

КонецПроцедуры

 

 

 

 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Файл обработки
.epf 501,24Kb
13.02.13
119
.epf 501,24Kb 119 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Антон Степанов (Stepa86) 27.09.10 11:02
ЗЫ Аккуратней с лицензией на IrfanView :!:
2. vladal (Vladal) 27.09.10 17:10
Опоздал я.
В нашей базе такая штука печати сертификатов с февраля работает.
Запускается Ирфан с именем файла сертификата в параметре командной строки.
3. Антон Степанов (Stepa86) 27.09.10 17:16
(2) Основная идея не в печати с помощью программки одной картинки (с тем же успехом можно и просмотрщиком винды распечатать), а оптом и с минимальным трафиком по сетке... вроде 500 картинок минут за 7 посылает полностью на принтер у нас
4. vladal (Vladal) 30.09.10 14:16
у меня под рукой нет 8.2. Можете дать строку с запуском Вьюера?

У меня это сделано так:

ЗапуститьПриложение("C:\Program Files (x86)\IrfanView\i_view32.exe "+СокрЛП(ПолноеИмяФайла)+"/resample /aspectratio /print", , Истина);


Обратите внимание на третий параметр - он заставляет 1С ждать, пока не выполнится программа. Без него в очередь принтера посылаются все файлы. Но не факт, что они напечатаются в порядке их очереди, т.к. Ирфан запускается как параллельный процесс и потому могут быть небольшие задержки, во время которых свою картинку на принтер может послать другой параллельный процесс.
5. Антон Степанов (Stepa86) 30.09.10 15:26
(4)
&НаКлиенте
Процедура ПечатьФайловЧерезIrfanView( пПутиКФайлам , пИмяПринтера )
	
	Состояние( "Передача файлов на печать принтеру" );
	
	Для Каждого цСтрока Из пПутиКФайлам Цикл
		
		Сценарий = Объект.ПутьКИсполняемомуФайлу + " """ + цСтрока + """ /ini=""" + ПолучитьПутьИниФайла() + """ /print=""" + пИмяПринтера + """";
		
		ЗапуститьПриложение( Сценарий , ПолучитьПутьПоУмолчанию() , Истина );
		
	КонецЦикла;
	
КонецПроцедуры
...Показать Скрыть


в массиве приходит адрес папки (не файла, а папки с файлами), которые нужно напечатать
6. vladal (Vladal) 30.09.10 15:45
Нет, у меня с папкой не пройдёт - в папке лежат все сертификаты. Разве что их сначала в другую папку копировать, потом уже всю папку запускать - но тогда тоже нет очереди по документам. В смысле, соответствия.
Хотя, если при копировании задавать соответствующее имя... Вариант.

Плюс за идею.
7. Антон Степанов (Stepa86) 30.09.10 16:25
(6) ну собсно все файлы не только конвертятся в тифф в новую папку, но еще и переименовываются в порядке очереди от 1 до ...
8. vladal (Vladal) 01.10.10 08:23
А Вы можете сконвертировать эту обработку для платформы 8.1?
Будет очень интересно.
9. Антон Степанов (Stepa86) 01.10.10 08:35
(8) может на выходных займусь, для 8.1 там все просто, это с 8.2 пришлось повозится с сохранением из макета исполняемого файла, но спросом видимо не будет пользоваться так же... вот если на 7.7 сконвертить...
10. Sirruf (Sirruf) 17.05.11 16:23
А как установить размер печатаемого изображения по размеру листа А4? Печатается только часть изображения, которая помещается на лист бумаги.
11. ksai ksai (ksai) 09.02.12 12:34
(5) Stepa86,

Каким образом вот это:

в массиве приходит адрес папки (не файла, а папки с файлами), которые нужно напечатать


соотносится с описанием:

1. На входе:
Массив полных путей к файлам-изображениям (по отношению к клиентской части даже для клиент-серверного варианта работы)


Всё-таки что должно быть в передаваемом массиве - пути к файлам или адрес папки?
12. Антон Степанов (Stepa86) 09.02.12 13:26
(11) в (5) описание внутренностей и это описано в топике:

"3. Во временной папке создается еще одна папка и туда конвертируются все файлы для печати. Конвертирование происходит в черно-белый .tif . При использовании сжатия файлы весят в 10 раз меньше исходных (примерно, исходные были jpegи), без сжатия больше в 8-25 на тех же файлах
4. Подается команда печать папки и управление переходит драйверам принтера"

На вход самой обработки нужно подавать массив имен файлов. А вообще код открыт и достаточно не сложен, можно легко адаптировать под себя и разобраться что именно там происходит.
14. Денис (KrakoZyabl) 27.06.13 15:44
Идея хороша и реализация тоже, взял это на вооружение, долго искал выход, то кресты у меня через макеты печатает то нормально всё не поймешь в чем причина, только одно но...не получается удалить файлы в папке после печати, ругается что файл занят(конфликт блокировок) и как следствие повтор при печати предидущих файлов вместо новых (т.к. не удалились) и еще вот проблемка в дуплексной печати, можно как-то целиком запустить всю папку сразу на печать?(наверное строку нужно формировать из файлов и закладывать в сценарий), а то пофайлово двухсторонней печати не получается(((
15. Денис (KrakoZyabl) 27.06.13 16:20
(14) Извиняюсь, увидел что печатается вся папка сразу, просто дуплекса не получается
16. Денис (KrakoZyabl) 27.06.13 17:33
И с дуплексом разобрался), выгрузил макет ini, поставил Duplex = 2 после загрузил. Как говориться сам с собой поговорил :))) Спасибо )
17. Евгений Петренко (EugenP) 25.03.14 15:07
А можно немного подробнее, как побороли проблему Дуплекса
И с дуплексом разобрался), выгрузил макет ini, поставил Duplex = 2 после загрузил.


куда загрузил-то?
у меня в ini файле тоже Duplex = 2,
но каждый файл отдельным заданием и следовательно на отдельной странице выходит
18. Сергей (Che) Коцюра (CheBurator) 25.03.14 16:41
Я так понимаю вы чисто гипотетически обсуждаете, типа долма попробовать...
Прога бесплатна для некоммерческого использования.
Для коммерческого - атата!!!
19. Роман Рогачев (janibeg) 08.07.15 11:01
Письмо с обработкой не пришло, монетка со счета снялась)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа