gifts2017

Обработка изображений (dpi, цветность) - для 1С отчетности. Обычные формы

Опубликовал Евгений Ггг (dezzarr) в раздел Печать - Печатные формы документов

Простая обработка по изменению качества сканов документов для отправки налоговикам.

Бывает, что от компании требуется предоставить сканы документов в налоговую, и это можно сделать из 1с отчетности. Что удивительно - при привязке файлов к письму, разработчиками отчетности небыло предусмотрено никакой конвертации\сжатия картинок (только предупреждение, что, дескать, убедитесь что качество картинок соответствует), и когда бухгалтер через пару тысяч счет-фактур узнает что, видите ли, качество сканов слишком высокое - радости просто нету предела. По опыту, такие сканы просто не принимаются, приходит отбойник со словами "качество картинок не подходит".

Данная обработка заточена именно под налоговые, которым надо 150-300 dpi и 256-цветную ч\б картинку. Сначала искал что-то подобное, но примеров для работы с картинками из 1с не так уж и много.

Основа - компонента GFLAx, http://www.xnview.com/en/GFL/#downloads, ставится без проблем, если всетаки не работает - смотрим по ссылке http://infostart.ru/public/312924 (спасибо  insurgut )

Можно конечно, сделать через фотошоп\ ирфан вью, но пользователям проще выбрать файлы и нажать одну кнопку, чем руками крутить настройки

 

Добавлю основную процедуру, которой на вход идет строка с путем к файлу или папке с картинками, конвертированые картинки складываются в *\Обработанные файлы\


Процедура ОбработатьКартинку(ПутьФайла) Экспорт
	
	МассивРасширенийКартинок = Новый Массив;
	МассивРасширенийКартинок.Добавить(".bmp");
	МассивРасширенийКартинок.Добавить(".jpg");
	МассивРасширенийКартинок.Добавить(".jpeg");
	МассивРасширенийКартинок.Добавить(".tif");
	МассивРасширенийКартинок.Добавить(".gif");
	МассивРасширенийКартинок.Добавить(".png");
	
	ВхФайл = Новый Файл(ПутьФайла);
	Если Не ВхФайл.Существует() Тогда
		Сообщить("Указанный файл\каталог не существует!");
		Возврат;
	КонецЕсли;
	
	ОбъектКом = Новый COMОбъект("GFLAX.GFLAX");
	
	Если ВхФайл.ЭтоКаталог() Тогда
		КаталогСохранения = ПутьФайла + ?(Прав(ПутьФайла,1) = "\", "", "\")	+ "Обработанные файлы\";
		
		Файл = Новый Файл(КаталогСохранения);
		Если Не Файл.Существует() Тогда
			СоздатьКаталог(КаталогСохранения);
		КонецЕсли;
		
		///
		Для Каждого Расширение Из МассивРасширенийКартинок Цикл
			НайдФайлы = НайтиФайлы(ПутьФайла, "*" + Расширение, Ложь);
			Для Каждого НайдФайл Из НайдФайлы Цикл
				КонвертироватьПересохранитьФайл(ОбъектКом, НайдФайл, КаталогСохранения);
			КонецЦикла;				
		КонецЦикла;
				
	Иначе
		МассивЭлементов = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ПутьФайла, "\");
		ПутьФайла2 = СтрЗаменить(ПутьФайла, МассивЭлементов[МассивЭлементов.Количество()-1], "");
		КаталогСохранения = ПутьФайла2 + ?(Прав(ПутьФайла2,1) = "\", "", "\") + "Обработанные файлы\";
		
		Файл = Новый Файл(КаталогСохранения);
		Если Не Файл.Существует() Тогда
			СоздатьКаталог(КаталогСохранения);
		КонецЕсли;
		
		КонвертироватьПересохранитьФайл(ОбъектКом, ВхФайл, КаталогСохранения);
	КонецЕсли;
	
	Сообщить("=== Выполнено. Обработанные файлы помещены в """ + КаталогСохранения + """");
	
КонецПроцедуры
Процедура КонвертироватьПересохранитьФайл(ОбъектКом, ВхФайл, КаталогСохранения)
	
	ТекИмяФайла = ВхФайл.ПолноеИмя;
	//ОбъектКом.EnableLZW = Истина;[=boolean] - для формата гиф
	ОбъектКом.LoadBitmap(ВхФайл.ПолноеИмя);
	
	ОбъектКом.Xdpi = 200;
	ОбъектКом.Ydpi = 200;
	
	ОбъектКом.ChangeColorDepth(256,0,1);
	ОбъектКом.SaveJPEGQuality = 75;
	
	Если ОбъектКом.SaveFormat <> 1 Тогда
		ОбъектКом.SaveFormat = 1;
		ТекИмяФайла = КаталогСохранения + ВхФайл.ИмяБезРасширения + ".jpg";
	Иначе
		ТекИмяФайла = КаталогСохранения + ВхФайл.Имя;
	КонецЕсли;
	
	Попытка
		ОбъектКом.SaveBitmap(ТекИмяФайла);
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;
	
КонецПроцедуры

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

Наименование Файл Версия Размер Кол. Скачив.
Конвертация картинок
.epf 9,06Kb
18.11.15
2
.epf 9,06Kb 2 Скачать

См. также

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

Комментарии

1. Александр Шкураев (salexdv) 20.11.15 15:18
(0) Как вариант, можно воспользоваться GGraphics. Демо-версия, как раз, выводит только ч/б изображения.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа