К созданию компоненты привела необходимость быстрого обмена печатной информацией между пользователями моих разработок и их аудиторией. Максимум, что позволяет сделать 1С с печатной формой при её сохранении - выбрать тип файла из ограниченного списка "ТипФайлаТабличногоДокумента". Возможно, этот список неплох для стационарной платформы. Но что делать, если из приложения нужно выгрузить, например, прайс-лист прямо в вайбер. В мессенджерах удобно смотреть фотки. А значит делаем PNG. Для этого Package.zip необходимо загрузить в макет внешней компоненты:
Далее подключаем обработчик внешнего события:
В модуле формы подключаем компоненту, формируем печатную форму, сохраняем её в формате PDF, и передаём компоненте путь к pdf-файлу:
&AtClient
Var ExtLib;
&AtClient
Procedure OnOpen(Cancel)
// при открытии рабочей формы подключаем внешнюю компоненту
AttachAddIn ( "CommonTemplate.PDFToPNGConverter", "Sample", AddInType.Native );
ExtLib = New ( "AddIn.Sample.SimonsPDFConverter" );
EndProcedure
&AtClient
Procedure PrintForm(Command)
// формируем печатную форму
Spr = PrintBillServer();
// сохраняем её в PDF
Spr.Write( DocumentsDir() + "test.pdf", SpreadsheetDocumentFileType.PDF);
// во внешнюю компоненту передаём имя сформированного на диске PDF-файла ( !!! обязательно без расширения !!! )
//Кириллица
//ExtLib.ПолучитьИзображение ( DocumentsDir() + "test" );
ExtLib.GetPicture ( DocumentsDir() + "test" );
// при завершении работы внешней компоненты по конвертации из PDF в PNG будет инициировано внешнее событие
EndProcedure
&AtServer
Function PrintBillServer ()
spr = new SpreadsheetDocument;
bill = GetCommonTemplate( "Bill" );
head = bill.GetArea( "head" );
row = bill.GetArea( "row" );
ttl = bill.GetArea( "ttl" );
spr.Put( head );
spr.Put( row );
spr.Put( ttl );
spr.PageSize = "Custom";
spr.PageWidth = 75;
spr.PageHeight = 100;
spr.TopMargin = 1;
spr.BottomMargin = 0;
spr.LeftMargin = 1;
spr.RightMargin = 0;
Return spr;
EndFunction
&AtClient
Procedure ExternalEvent(Source, Event, Data)
//сообщения внешней компоненты маркируются строкой "PDFConverter" в параметр "Source"
if Source = "PDFConverter" then
// при успехе конвертирования компонента в параметр "Event" передаёт текст "onSuccess"
if Event = "onSuccess" then
//в параметр "Data" передаёт путь к сгенерированному PNG-файлу изображения
//для примера файл открывается штатной галереей телефона, откуда его можно отправить в Viber, Skype и т.д.
RunApp ( Data );
else
//при возникновении проблем компонента передаёт в 1С сообщение об ошибке
DoMessageBox( Data, , Event );
endif;
endif;
EndProcedure
В случае многостраничного PDF-файла, его страницы будут конвертированы в множество файлов и внешнее событие будет генерироваться для каждого из них.
Работа компоненты проверена на платформе 8.3.15.59. Ограничения со стороны Android - Версия не менее Lollipop