bdd2

Пакетная печать изображений с помощью 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) 418 27.09.10 11:02 Сейчас в теме
ЗЫ Аккуратней с лицензией на IrfanView :!:
2. vladal (Vladal) 27.09.10 17:10 Сейчас в теме
Опоздал я.
В нашей базе такая штука печати сертификатов с февраля работает.
Запускается Ирфан с именем файла сертификата в параметре командной строки.
3. Антон Степанов (Stepa86) 418 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) 418 30.09.10 15:26 Сейчас в теме
(4)
&НаКлиенте
Процедура ПечатьФайловЧерезIrfanView( пПутиКФайлам , пИмяПринтера )
	
	Состояние( "Передача файлов на печать принтеру" );
	
	Для Каждого цСтрока Из пПутиКФайлам Цикл
		
		Сценарий = Объект.ПутьКИсполняемомуФайлу + " """ + цСтрока + """ /ini=""" + ПолучитьПутьИниФайла() + """ /print=""" + пИмяПринтера + """";
		
		ЗапуститьПриложение( Сценарий , ПолучитьПутьПоУмолчанию() , Истина );
		
	КонецЦикла;
	
КонецПроцедуры
...Показать Скрыть


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

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

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

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


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

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


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

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

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


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