[ELMA3] Конвертация сгенерированного по шаблону файла в PDF в бизнес-процессе
В данной статье приводится пример организации бизнес-процесса, в ходе которого создается документ, генерируется файл по шаблону, конвертируется в pdf и прикрепляется в качестве версии созданного документа.
Процесс "Генерация файла по шаблону"
Данный процесс будет выглядеть следующим образом:
Список контекстных переменных представлен на следующем рисунке:
Рассмотрим каждую операцию по отдельности.
1. Сценарий "Создание документа"
Данный сценарий выглядит следующим образом:
Пример сценария с использованием PublicAPI
1 2 3 4 5 | var docFolder = PublicAPI.Docflow.Folder.LoadOrNull(531); var docName = string .Format( "Новый документ от {0}" , DateTime.Now); var doc = PublicAPI.Docflow.Types.File.Create(docFolder, docName); doc.Save(); context.NovyyDokument = (File)doc; |
Пример сценария без использования PublicAPI
1 2 3 4 5 6 7 8 9 | var doc = InterfaceActivator.Create<File>(); //Определяем папку doc.Folder = (Folder)FolderManager.Instance.Load(531); //Задаем название doc.Name = "Новый документ от " + DateTime.Now.ToString(); //Сохраняем doc.Save(); // Сопоставляем созданный документ с контекстной переменной процесса context.NovyyDokument = (File)doc; |
Данный сценарий:
- создает новый документ типа Файл в папке с указанным ID;
- в случае необходимости смены типа документа во всем сценарии необходимо будет заменить File на название класса необходимого типа документа. Также необходимо будет изменить тип контекстной переменной Новый документ;
- в строке doc.Folder = (Folder)FolderManager.Instance.Load(531); число 531 необходимо заменить на Id папки, в которую необходимо создать документ (его можно узнать в адресной строке браузера, зайдя в веб-части в необходимую папку, последнее число в адресе и будет Id папки).
2. Plug-in "Генерация документа"
Генерирует файл по шаблону в указанную контекстную переменную(Файл для генерации). На вкладке Настройки операции Генерация документа добавляем шаблон и переменную типа файл, в которую будет сохранен сгенерированный документ.
3. Внутренний подпроцесс "Конвертация в PDF" (описан ниже)
4. Сценарий «Добавление версии в документ»
Сценарий выглядит следующим образом:
Пример сценария с использованием PublicAPI
1 2 3 4 5 6 7 8 9 10 11 | var version = PublicAPI.Docflow.DocumentVersion.Create(); version.Document = context.NovyyDokument; context.Temp = InterfaceActivator.Create<BinaryFile>(); context.Temp.Name = "Шаблон1.pdf" ; context.Temp.CreateDate = DateTime.Now; context.Temp.InitializeContentFilePath(); System.IO.File.Copy( @"c:\\Шаблон1.pdf" , context.Temp.ContentFilePath); version.File = context.Temp; version.Status = DocumentVersionStatus.Current; //устанавливаем статус версии Текущая context.NovyyDokument.Versions.Add(version); context.NovyyDokument.Save(); |
Пример сценария без использования PublicAPI
1 2 3 4 5 6 7 8 9 10 11 12 | var version = InterfaceActivator.Create<DocumentVersion>(); version.Document = context.NovyyDokument; context.Temp = InterfaceActivator.Create<BinaryFile>(); context.Temp.Name = "Шаблон1.pdf" ; context.Temp.CreateDate = DateTime.Now; context.Temp.InitializeContentFilePath(); System.IO.File.Copy( @"c:\\Шаблон1.pdf" , context.Temp.ContentFilePath); Locator.GetServiceNotNull<IFileManager>().SaveFile(context.Temp); version.File=context.Temp; version.Status = DocumentVersionStatus.Current; //устанавливаем статус версии Текущая context.NovyyDokument.Versions.Add(version); context.NovyyDokument.Save(); |
Данный сценарий:
- создает и прикрепляет к созданному в п.1 документу версию. Название версии задается в строке context.Temp.Name = "Шаблон1.pdf" Его можно изменить на любое другое;
- в строке System.IO.File.Copy(@"c:\\Шаблон1.pdf", context.Temp.ContentFilePath) указывается путь к временному файлу в формате pdf из подпроцесса «Конвертация в pdf».
Пространства имен, которые необходимо использовать в модуле сценариев БП "Генерация файла по шаблону":
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using EleWise.ELMA.Documents.Managers; using EleWise.ELMA.Documents.Models; using EleWise.ELMA.Files; using EleWise.ELMA.Model.Common; using EleWise.ELMA.Model.Entities; using EleWise.ELMA.Model.Entities.ProcessContext; using EleWise.ELMA.Model.Managers; using EleWise.ELMA.Model.Services; using EleWise.ELMA.Model.Types.Settings; using EleWise.ELMA.Runtime.Managers; using EleWise.ELMA.Services; using Microsoft.CSharp; |
Также необходимо подключить глобальную сборку Microsoft.CSharp (на вкладке Сценарий выбранного процесса, в правом меню нажать кнопку Добавить – Добавить ссылку на сборку. В открывшемся окне выбрать Microsoft.CSharp и нажать кнопку Ok).
Внутренний подпроцесс "Конвертация в PDF"
Он состоит из одной операции – сценария "Конвертация в PDF":
- в нем используются временные служебные файлы Шаблон1.doc (или Шаблон1.xls) и Шаблон1.pdf. Необходимо заранее определить, где они будут храниться и изменить путь до них во всем сценарии. По умолчанию это - c:\\Шаблон1.doc (или c:\\Шаблон1.xls ) и c:\\Шаблон1.pdf;
- первые две строки сценария удаляют временные файлы, для их последующего обновления;
- третья строка копирует сгенерированный в процессе "Генерация файла по шаблону" файл во временный файл Шаблон1.doc (или Шаблон1.xls);
- четвертая и пятая строки конвертируют данный файл в формат pdf.
Рассмотрим два случая:
1. Конвертация документа MS Word в pdf
Сценарий будет выглядеть следующим образом:
1 2 3 4 5 | System.IO.File.Delete( @"c:\\Шаблон1.doc" ); System.IO.File.Delete( @"c:\\Шаблон1.pdf" ); System.IO.File.Copy(context.FaylDlyaGeneracii.ContentFilePath, @"c:\\Шаблон1.doc" ); Document doc = new Document( @"c:\\Шаблон1.doc" ); doc.Save( @"c:\\Шаблон1.pdf" , Aspose.Words.SaveFormat.Pdf); |
2. Конвертация таблицы Excel в pdf
Сценарий будет выглядеть следующим образом:
1 2 3 4 5 | System.IO.File.Delete( @"c:\\Шаблон1.xls" ); System.IO.File.Delete( @"c:\\Шаблон1.pdf" ); System.IO.File.Copy(context.ShablonSchetNaOplatu.ContentFilePath, @"c:\\Шаблон1.xls" ); Workbook workbook = new Workbook( @"c:\\Шаблон1.xls" ); workbook.Save( @"c:\\Шаблон1.pdf" , Aspose.Cells.SaveFormat.Pdf); |
Пространства имен, которые необходимо использовать:
1 2 3 4 5 6 7 8 9 10 11 12 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using EleWise.ELMA.Model.Common; using EleWise.ELMA.Model.Entities; using EleWise.ELMA.Model.Managers; using EleWise.ELMA.Model.Types.Settings; using EleWise.ELMA.Model.Entities.ProcessContext; using System.Xml; using Aspose.Words; //для конвертации файла формата doc using Aspose.Cells; //для конвертации файла формата xls |
Также необходимо подключить глобальную сборку System.Xml (на вкладке Сценарий выбранного процесса, в правом меню нажать кнопку Добавить - Добавить ссылку на сборку. В открывшемся окне выбрать System.Xml и нажать кнопку Оk).
System.IO.File.Delete(@"c:\\Шаблон1.doc");
System.IO.File.Delete(@"c:\\Шаблон1.pdf");
System.IO.File.Copy(context.FaylDlyaGeneracii.ContentFilePath, @"c:\\Шаблон1.doc");
Aspose.Words.Document doc = new Aspose.Words.Document(@"c:\\Шаблон1.doc");
doc.Save(@"c:\\Шаблон1.pdf", Aspose.Words.SaveFormat.Pdf);