Задача: выводить согласующих на входящих счетах от контрагентов. Сканы счетов могут быть различных форматов, но чаще всего это pdf. В данном примере файлы хранятся в справочнике ПрисоединенныеФайлы конфигурации ЕРП, но можно исходный файл брать из любого места.
Перед использованием необходимо установить бесплатное ПО
1. ImageMagick это консольный растровый редактор. https://imagemagick.org/ С его помощью мы будем рисовать программно на изображении.
2. Ghostscript это для преобразования файлов pdf в картинку Можно взять тут https://www.ghostscript.com/download/gsdnld.html Нужен для конвертации файлов pdf в файл jpg
Описание работы:
1. Получаем двоичные данные файла из базы и сохраняем файл во временную папку. Если Ваши файлы хранятся на диске то можно сразу их использовать для конвертации, убедившись в том что есть доступ с сервера к файлу.
2. Конвертируем с помощью ImageMagick файлы из pdf в jpg. Если pdf многостраничный то на выходе будет столько файлов jpg, сколько страниц. Файлы будут пронумерованы.
3. На каждом файле полученным на предыдущем этапе рисуем текст в правом нижнем углу.
4. Файлы с добавленным текстом по очереди выводятся в результирующий табличный документ, который можно открыть на экране, напечатать и т.п.
За основу взята статья //infostart.ru/public/830374/
Функция ВывестиФайлыПоЗаявкеВТабдок(Заявка)
ТабДок = Новый ТабличныйДокумент;
СогласователиСтрокой = "Иванов"+Символы.ПС+"Петров";
		СписокФайлов = ПолучитьСписокФайлов(Заявка,Истина);
		
		Для Каждого Файл Из СписокФайлов цикл
			
			ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(Файл);
			ИмяФайлаСПутем = ПолучитьИмяВременногоФайла(ДанныеФайла.Расширение); 		
			
			ДвоичныеДанныеФайла = ПолучитьИзВременногоХранилища(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла);
			ДвоичныеДанныеФайла.Записать(ИмяФайлаСПутем);
			
			ИмяФайлаРезультата = ПолучитьИмяВременногоФайла("jpg");
			ИмяФайлаРезультата2 = ПолучитьИмяВременногоФайла("jpg");
			ПутьКПрограммеКонвертацииPDF = "C:\Program Files\ImageMagick-7.0.8-Q16\magick.exe";//РаботаСФайламиВызовСервера.ПолучитьПутьКПрограммеКонвертацииPDF();
			
			стрПуть = ИмяФайлаСПутем;
			//конвертация в катинку, если многостраничный файл то много картинок
			стрПуть = """" + ПутьКПрограммеКонвертацииPDF + """" +" convert  -density 150 -quality 100 -debug none "+ стрПуть + " " + ИмяФайлаРезультата; 			
			ЗапуститьПриложение(стрПуть,,Истина);
			
			ИмяФайла = Прав(ИмяФайлаРезультата,СтрДлина(ИмяФайлаРезультата)-СтрДлина(КаталогВременныхФайлов()));
			МасФайлов = НайтиФайлы(КаталогВременныхФайлов(),Лев(ИмяФайла,СтрДлина(ИмяФайла)-4)+"*");
			
			Для Каждого Файл Из МасФайлов Цикл
				//на каждой картинке рисуем согласователей
				стрПуть = """" + ПутьКПрограммеКонвертацииPDF + """" +" convert -density 150 -quality 100 -debug none "+ Файл.ПолноеИмя  
					+ " -resize 1754x1240> -font Tahoma -pointsize 12 -draw ""gravity SouthEast text 90,70 '"+ СогласователиСтрокой + "'"" " + ИмяФайлаРезультата2;
				ЗапуститьПриложение(стрПуть,,Истина);
				
				ДвоичныеДанныеРезультата = Новый ДвоичныеДанные(ИмяФайлаРезультата2);
				
				УдалитьФайлы(ИмяФайлаСПутем);
				УдалитьФайлы(ИмяФайлаРезультата);
				УдалитьФайлы(ИмяФайлаРезультата2);
				
				//вывод в таблок
				Область = Макет.ПолучитьОбласть("ОбластьКартинки");
				Рисунок = Область.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка); 
				
				Рисунок.Верх = 0; 
				Рисунок.Высота = 290; 
				Рисунок.Ширина = 210;         
				Рисунок.Лево = 0; 
				Рисунок.ГраницаСверху = Ложь;
				Рисунок.ГраницаСнизу = Ложь;
				Рисунок.ГраницаСправа = Ложь;
				Рисунок.ГраницаСлева = Ложь;
				
				Рисунок.Картинка = Новый Картинка(ДвоичныеДанныеРезультата);
				
				ТабДок.АвтоМасштаб = Истина;
				ТабДок.ОтображатьСетку = Ложь;
				
				ТабДок.Вывести(Область);
				ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
			КонецЦикла;  			
		конеццикла;
Возврат Табдок;
КонецФункции
Функция ПолучитьСписокФайлов(Знач Заявки, КартинкиИПДФ = Ложь) Экспорт
			
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ЗаявкаНаРасходованиеДенежныхСредствПрисоединенныеФайлы.Ссылка КАК Файл
		|ИЗ
		|	Справочник.ЗаявкаНаРасходованиеДенежныхСредствПрисоединенныеФайлы КАК ЗаявкаНаРасходованиеДенежныхСредствПрисоединенныеФайлы
		|ГДЕ
		|	НЕ ЗаявкаНаРасходованиеДенежныхСредствПрисоединенныеФайлы.ПометкаУдаления
		|	И ЗаявкаНаРасходованиеДенежныхСредствПрисоединенныеФайлы.ВладелецФайла В(&Заявки)
		|	И ВЫБОР
		|			КОГДА &КартинкиИПДФ
		|				ТОГДА ЗаявкаНаРасходованиеДенежныхСредствПрисоединенныеФайлы.Расширение В (&РасширенияКартинок)
		|			ИНАЧЕ НЕ ЗаявкаНаРасходованиеДенежныхСредствПрисоединенныеФайлы.Расширение В (&РасширенияКартинок)
		|		КОНЕЦ";
	
	Запрос.УстановитьПараметр("Заявки", Заявки);
	Запрос.УстановитьПараметр("КартинкиИПДФ", КартинкиИПДФ);
	РасширенияКартинок = Новый СписокЗначений;
	РасширенияКартинок.Добавить("jpg");
	РасширенияКартинок.Добавить("pdf");
	РасширенияКартинок.Добавить("tif");
	РасширенияКартинок.Добавить("jpeg");
	РасширенияКартинок.Добавить("png");
	РасширенияКартинок.Добавить("bmp");
	РасширенияКартинок.Добавить("jp2");
	Запрос.УстановитьПараметр("РасширенияКартинок", РасширенияКартинок);
	
	РезультатЗапросаТЗ = Запрос.Выполнить().Выгрузить();
	
	Возврат РезультатЗапросаТЗ.ВыгрузитьКолонку("Файл");
	
КонецФункции
Вступайте в нашу телеграмм-группу Инфостарт
 
                                    