Вывод pdf и картинок в табличный документ

26.03.19

Разработка - Работа с интерфейсом

Статья показывает, как вывести на экран или в печатную форму файлы pdf и картинок.

Задача: выводить согласующих на входящих счетах от контрагентов. Сканы счетов могут быть различных форматов, но чаще всего это 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");
	Запрос.УстановитьПараметр("РасширенияКартинок", РасширенияКартинок);
	
	РезультатЗапросаТЗ = Запрос.Выполнить().Выгрузить();
	
	Возврат РезультатЗапросаТЗ.ВыгрузитьКолонку("Файл");
	
КонецФункции

 

pdf

См. также

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Богатый редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    62984    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

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

2400 руб.

29.06.2020    18851    26    6    

41

Работа с интерфейсом Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Редактор графов в 1С - внешний отчет, который формирует графы на основе таблицы значений, используя рисунки табличного документа. Есть возможность добавления, редактирования объектов графа и выгрузки результата в таблицу значений.

1500 руб.

06.10.2020    10223    7    7    

10

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    14726    YA_418728146    7    

166

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3578    56    progmaster    8    

4

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    5742    kalyaka    6    

33
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Rudakov_D 231 11.09.19 18:49 Сейчас в теме
Добрый день
Поясните где используется Ghostscript. В коде не вижу упоминаний...
2. Aleksandr 202 12.09.19 05:54 Сейчас в теме
Добрый день!

Ghostscript используется неявно когда мы подсовываем файл pdf в ImageMagick(1)
3. Merkalov 11 03.07.20 03:18 Сейчас в теме
>Перед использованием необходимо установить бесплатное ПО
Когда пользователей не 3-4, попробуй пробежаться по всем и установить бесплатный софт...а ещё на терминальные сервера для удаленщиков...
4. janibeg 2 29.09.20 12:38 Сейчас в теме
У меня такое ощущение, что ImageMagick не умеет работать с файлами на латинице(
5. triviumfan 97 28.06.22 15:08 Сейчас в теме
На дворе уже 22 год. Статья актуальна? Может есть что-то более удобное и технологичное?
Попробовал я этот имиджмаджик... вроде работает, но какой-то костыль =\
Мне нужно пдф этикетки выводить на печать. Решили на лету картинку формировать и в табдок пихать =\
6. Aleksandr 202 28.06.22 15:36 Сейчас в теме
(5) вроде в последних версиях платформы расширили функционал работы с пдф
7. triviumfan 97 28.06.22 21:04 Сейчас в теме
(6) в 8.3.22? не, пока не интересно)
Оставьте свое сообщение