$D.date.format(value, format)
Позволяет отформатировать дату по нужному шаблону.
$D.date.format(new Date('October 14, 2019 11:30:00'), 'dd.MM.YY');// = "14.10.19"$D.date.format('1571039928020', 'dd.MM.YY');// = "14.10.19"$D.date.format(1571039928020, 'dd.MM.YY');// = "14.10.19"$D.date.format($D.java.newLong('1571039928020'), 'dd.MM.YY');// = "14.10.19"$D.date.format($D.java.newDate('1571039928020'), 'dd.MM.YY');// = "14.10.19"$D.date.format($D.date.parse('14.10.19', 'dd.MM.YY'), 'dd.MM.YY');// = "14.10.19"
$D.date.parse(value, format)
Позволяет прочитать дату по нужному шаблону (потом можно передать в date.format для смены представления даты).
$D.date.parse('14.10.19', 'dd.MM.YY');// = "2019-10-14T00:00:00.000+03:00"
$D.xmlToJSON(XMLString)
$D.xmlToJSON(XMLString)
Где XMLString - строка в формате XML (пример)
//объявляем тестовый пример xml строки (символ "\" - перенос строки)var xml = '<human profession = "слесарь">\<body>\<arms>\<arm name = "right">\<fingers>\<finger number = "first"></finger>\<finger number = "second"></finger>\<finger number = "third"></finger>\</fingers>\</arm>\<arm name = "left">\<fingers>\<finger number = "first"></finger>\<finger number = "second"></finger>\<finger number = "third"></finger>\</fingers>\</arm>\</arms>\</body>\</human>'//передаем в парсер xml строкуvar res = $D.xmlToJSON(xml)/*res = {"human": {"@profession": "слесарь","body": {"arms": {"arm": [{"@name": "right","fingers": {"finger": [{"@number": "first"},{"@number": "second"},{"@number": "third"}]}},{"@name": "left","fingers": {"finger": [{"@number": "first"},{"@number": "second"},{"@number": "third"}]}}]}}}}*///преобразуем полученный JSON в JS объектvar data = JSON.parse(res)//пример осуществления доступа до ключей объектаreturn data.human.body.arms.arm[0].fingers.finger[0]['@number'];//return = first});
$D.fileLinkToBase64(link)
$D.fileLinkToBase64(link)
$D.htmlToPDF = function(html:String,height)
$D.htmlToPDF(html, height)
height - параметр высоты страницы в миллиметрах. По умолчанию 297 мм.
$D.htmlToPDF = function(html:String)//example codeDirectualEngine.addEventListener(AppEvents.START, function(context){//DirectualEngine.sendSMS('','79151111111', 'test')//return context.scenarioObject.fields().id > 0 ? true : false;//получаем значение ID текущего объектаvar templateID = null;templateID = $D.getValueFromTemplate("{{id}}");var code = '<html><head></head><body><span>тест</span></body></html>';var htmlToPDF;htmlToPDF = $D.htmlToPDF(code);//добавляем в текущий объект значение$D.saveObject("htmlToPDF",{id:templateID,field1:htmlToPDF});return true;});
Результат выполнения функции — ссылка на pdf файл.
$D.convertToPdf = function(link)
$D.convertToPdf = function(link)//example codeDirectualEngine.addEventListener(AppEvents.START, function(context){//DirectualEngine.sendSMS('','79151111111', 'test')//return context.scenarioObject.fields().id > 0 ? true : false;//получаем значение ID текущего объектаvar templateID = null;templateID = $D.getValueFromTemplate("{{id}}");//получаем ссылку на конвертируемый файл из глобальной переменнойvar file = $D.getValueByID("GlobalVariables","docx","value")//объявляем переменную, в которую будет записан результат и выполняем конвертациюvar convertToPDFdocx;convertToPDFdocx = $D.convertToPdf(file);//добавляем результат в текущий объект в поле convertToPdfResultDOCX$D.saveObject("convertToPDF",{id:templateID,convertToPdfResultDOCX:convertToPDFdocx});return true;});
Результат выполнения функции — ссылка на сконвертированный файл .pdf.
Создает документ в структуре FileUpload. Если по исходной ссылке можно понять имя сети, то имя файла будет соответствовать исходному.
$D.office.modify = function(link, options)
$D.office.modify = function(link, options)//var file = "http://someurl.somefile.docx"//var options = {// header:{text:headerVal, bold:true, italic:true, underline:true, size:15, fontName:"Andale Mono", alignment:"right"},// footer:{text:footerVal, bold:true, size:15, fontName:"Andale Mono", alignment:"right"},// }//var url = $D.office.modify(file, options)
В options можно указать формат добавления header и footer в документ:
{header:{text:"Header\n test", bold:true, size:15, fontName:"Arial", alignment:"right"},footer:{text:"Footer\n test", bold:true, size:15, fontName:"Arial", alignment:"right"},table:{ borderWidth: 0, position: "header", cells: {A1: {text:"Cell content", bold:true, size:15, fontName:"Arial", alignment:"right"},B1: {text:"Cell content", bold:true, size:15, fontName:"Arial", alignment:"right"},C1: {text:"Cell content", bold:true, size:15, fontName:"Arial", alignment:"right"}}}}
Параметры в options:
header/footer/table: указывает, настройки какого блока описываются; text: Содержимое блока; bold: true - жирный текст, false - обычный; size: задаёт размер шрифта; fontName: задаёт шрифт текста; borderWidth: ширина границ таблицы (0 - границы будут скрыты); position: место вставки таблицы (header/footer); cells: перечисление ячеек таблицы; (для создания таблицы 2x2 нужно указать 4 ячейки A1, A2, B1, B2); color: определяет цвет шрифта;
Результат работы функции — ссылка на модифицированный файл.
$D.office.convert = function(link, format)
Результат выполнения функции — ссылка на сконвертированный файл. Форматы: .docx → .pdf, .txt, .html, .jpg .doc(97-2003) → .pdf, .txt, .html, .jpg .xls → .pdf, .jpg
$D.office.convert = function(link, format)//$D.office.convert(url, 'pdf')//example codeDirectualEngine.addEventListener(AppEvents.START, function(context){//получаем значение ID текущего объектаvar ID = null;ID = $D.getValueFromTemplate("{{id}}");//получаем ссылку на конвертируемый файл из глобальной переменнойvar fileDOCX = $D.getValueByID("GlobalVariables","docx","value")//конвертируем из docx в pdfvar convertDOCXToPDF = $D.office.convert(fileDOCX, 'pdf')//записываем результат (ссылку на файл) в текущий объект в поле DOCXtoPDF$D.saveObject("yourStructure",{id:ID,DOCXToPDF:convertDOCXToPDF});return true;});
Поддержка множества форматов, таких как Markdown, HTML, LaTeX, ODT и других. Более подробное описание библиотеки: https://pandoc.org/
$D.office.transform(data, initialFormat, targetFormat) data: ссылка на файл в FileUpload или же простой текстовые данные; initialFormat: формат передаваемого файла или текстовых данных; targetFormat: целевой формат.
Результат выполнения функции — ссылка на сконвертированный файл.
$D.office.transform(data, initialFormat, targetFormat)//example codeDirectualEngine.addEventListener(AppEvents.START, function(context){//получаем значение ID текущего объектаvar templateID = null;templateID = $D.getValueFromTemplate("{{id}}");var filePandoc = $D.getValueByID("GlobalVariables","pandoc","value");var pandocResultHTML = $D.office.transform(filePandoc, "markdown", "html");//Результатом работы метода будет ссылка на файл в FileUpload.//добавляем в текущий объект значение в поле$D.saveObject("officeTransform",{id:templateID,pandocMarkdownToHTML: pandocResultHTML});return true;});
$D.jsoup.connect(url)
Используется для парсинга объектов DOM в документе.Реализованы 2 метода загрузки библиотеки Jsoup: parse & connect.
Рассмотрим на примере извлечения первого элемента, выделенного заголовком H3 из docx документа.
Подробнее функционал можно изучить в документации библиотеки Jsoup.
//example codeDirectualEngine.addEventListener(AppEvents.START, function(context){//Получаем ID текущего объектаvar templateID = null;templateID = $D.getValueFromTemplate("{{id}}");//получаем docx документ из глобальной переменной (можно использовать ссылку на хранилище fileUpload)var docxTemplate = $D.getValueByID("GlobalVariables","domParser","value");//конвертируем docx в xhtmlvar xhtml = $D.office.convert(docxTemplate, "xhtml");//парсим полученный xhtml документvar doc = $D.jsoup.connect(xhtml);//сохраняем первый элемент DOM, выделенный тегом <h3></h3>var result = doc.select('h3').first().text();//добавляем в текущий объект полученное значение$D.saveObject("DOMparse",{id:templateID,DOMparseResult:result});return true;});
$D.fs.saveText = function('Text', format)
$D.fs.saveText = function('Text', format)//$D.fs.saveText('<html><body>test</body></html>', 'html')//$D.fs.saveText('1;2;3', 'csv')
Результат выполнения функции — ссылка на сконвертированный файл.
Встречается ситуация, когда в готовый .pdf документ требуется добавить "шапку" или "подвал". При этом, на первой странице в шапке ничего быть не должно, зато на последней информация должна отличаться от других. Для этого используется JS SDK метод pdf.modify.
$D.pdf.modify(url, options)
url (тип string) - линка на pdf-файл
options (тип json) - массив, содержащий для одной/нескольких/всех страниц параметры масштабирования страницы, параметры вставки "шапки", "футера" (page, scale, header, footer, table) Принимаемые значения:
page (тип int): <номер страницы> - указание, какие страницы модифицируются, может принимать следующие значения:
положительное число - порядковый номер страницы с начала. Например: "1" — первая страница,
отрицательное число - порядковый номер страницы с конца. Например: "-1" — последняя страница, "-3" — третья страница с конца (8-я страница из 10).
0, либо null, либо ключ-значение “page” отсутствует — страницы, которые соответствуют всем оставшимся страницам pdf, не указанные в других элементах массива options. Например, в options были параметризированы первая и последняя страницы 10-страничного документа, тогда 0 будет параметризировать страницы с 2 по 9 включительно.
scale (тип float): 0.0-1.0 — коэффициент масштабирования страницы. Особенности обработки параметра scale:
если на странице есть header — позиционировать (прижимать) смасштабированную страницу к низу;
если на странице есть footer — позициониовать смасштабированную страницу к верху;
если есть и то, и другое — позиционировать страницу посередине (как в примере кода).
header | footer | table (тип json): переиспользуем options реализованные в методе officeModify()
Пример options.
Однотипное изменение всех страниц.
[{"scale": 0.8,"header": {"text": "some text", "bold": true, "size":12, "fontName": "Times New Roman", "alignment": "right"},"footer": {"text": "some another text", "bold": true, "size":12, "fontName": "Times New Roman", "alignment": "right"},}]
Изменение первой/промежуточных/последней страниц:
[{"page": 1,"scale": 0.8,"header": {"text": "some text", "bold": true, "size":12, "fontName": "Times New Roman", "alignment": "right"},"footer": {"text": "some another text", "bold": true, "size":12, "fontName": "Times New Roman", "alignment": "right"},"table": {"borderWidth": 0, "position": "footer", "cells": {"A1": {"text":"first row", "bold":true, "size":12, "fontName":"Times New Roman", "alignment":"left"},"B1": {"text":"second row", "bold":true, "size":12, "fontName":"Times New Roman", "alignment":"left"},}}},{"page": -1,"scale": 0.8,"header": {"text": "some text", "bold": true, "size":12, "fontName": "Times New Roman", "alignment": "right"},"footer": {"text": "some another text", "bold": true, "size":12, "fontName": "Times New Roman", "alignment": "right"},"table": {"borderWidth": 0, "position": "footer", "cells": {"A1": {"text":"first row", "bold":true, "size":12, "fontName":"Times New Roman", "alignment":"left"},"B1": {"text":"second row", "bold":true, "size":12, "fontName":"Times New Roman", "alignment":"left"},}}},{"page": 0,"scale": 0.8,"header": {"text": "some text", "bold": true, "size":12, "fontName": "Times New Roman", "alignment": "right"},"footer": {"text": "some another text", "bold": true, "size":12, "fontName": "Times New Roman", "alignment": "right"},"table": {"borderWidth": 0, "position": "footer", "cells": {"A1": {"text":"first row", "bold":true, "size":12, "fontName":"Times New Roman", "alignment":"left"},"B1": {"text":"second row", "bold":true, "size":12, "fontName":"Times New Roman", "alignment":"left"},}}},]
Реализована работа с вертикально ориентироваными ("portrait") документами. Планируется реализация "landscape" документами.
Пример реализации метода:
//example codeDirectualEngine.addEventListener(AppEvents.START, function(context){var url = 'https://api.directual.com/fileUploaded/yourApp/9c4db617-35e5-4788-87d6-3e37f6ae7c40.pdf';var result;var options = {};options =[{"page": 1,"scale": 0.8,"header": {"text": "HEADER TEXT 1", "bold": true, "size":12, "fontName": "Times New Roman", "alignment": "right"},"footer": {"text": "footer TEXT 1", "bold": true, "size":12, "fontName": "Times New Roman", "alignment": "right"},"table": {"borderWidth": 0, "position": "footer", "cells": {"A1": {"text":"first row", "bold":true, "size":12, "fontName":"Times New Roman", "alignment":"left"},"B1": {"text":"second row", "bold":true, "size":12, "fontName":"Times New Roman", "alignment":"left"},}}},{"page": -1,"scale": 0.8,"header": {"text": "HEADER TEXT 2", "bold": true, "size":12, "fontName": "Times New Roman", "alignment": "right"},"table": {"borderWidth": 0, "position": "header", "cells": {"A1": {"text":"first row", "bold":true, "size":12, "fontName":"Times New Roman", "alignment":"left"},"A2": {"text":"second row", "bold":true, "size":12, "fontName":"Times New Roman", "alignment":"left"},"B1": {"text":"вторая колонка", "bold":true, "size":12, "fontName":"Times New Roman", "alignment":"left"},}}},{"page": 0,"scale": 0.5,"footer": {"text": "footer TEXT 3", "bold": true, "size":12, "fontName": "Times New Roman", "alignment": "right"},"table": {"borderWidth": 0, "position": "footer", "cells": {"A1": {"text":"first row", "bold":true, "size":12, "fontName":"Times New Roman", "alignment":"left"},"B1": {"text":"second row", "bold":true, "size":12, "fontName":"Times New Roman", "alignment":"left"},}}},];result = $D.pdf.modify(url, options);return result;});
Особенность функции На примере выше указаны настройки для двух и более страниц ("page": 1, "page": -1, "page": 0). Если в качестве шаблона функция получит одностраничный документ, а настройка была для нескольких страниц, то на странице появится только "footer".
Можно провести две итерации, сначала добавить "header", а затем "footer".
Для $D.pdf.modify предусмотрен функционал, который позволяет вставить шапку и подвал документа из файла по ссылке.
"header": {"file": URL}
Пример.
//example codeDirectualEngine.addEventListener(AppEvents.START, function(context){var url = 'https://api.directual.com/fileUploaded/yourApp/9c4db617-35e5-4788-87d6-3e37f6ae7c40.pdf';var result;var options = [{"scale": 0.8,"header": {"file": "https://api.directual.com/fileUploaded/PCC-dev/97b54874-2dd5-4e80-9420-4cfe4bf444d3.pdf"},"footer": {"file": "https://api.directual.com/fileUploaded/PCC-dev/97b54874-2dd5-4e80-9420-4cfe4bf444d3.pdf"}}];result = $D.pdf.modify(url, options);return result;});
$D.pdf.merge(arr)
Где arr - массив ссылок на файлы (внешние / внутренние)
//example codeDirectualEngine.addEventListener(AppEvents.START, function(context){var templateID = null;templateID = $D.getValueFromTemplate("{{id}}")var arr = [];var url1 = 'https://api.directual.com/fileUploaded/yourApp/a0e13ac1-df12-4e1d-8c47-456a1bc1edf5.pdf';var url2 = 'https://api.directual.com/fileUploaded/yourApp/8836be48-e3a7-40e1-b41c-fdca4c1a8a24.pdf';arr = [url1,url2];var result = $D.pdf.merge(arr);$D.saveObject("111",{"id":templateID,"result":result})return true;});
Результат выполнения функции — ссылка на сконвертированный файл.
$D.pdf.overlay(initURL, templateURL, yShift)
Если необходимо поместить некоторый xhtml текст внутрь шаблона, существует метод $D.pdf.overlay.
$D.pdf.overlay(initURL, templateURL, yShift)
initURL — исходный документ, который будет вставлен внутрь шаблона. Исторически используется вместе с методом htmlToPDF, в котором уменьшается высота документа с 297мм до значения, которое позволит разместить в шаблон. Конвертируются данные из xhtml в pdf (заданной высоты); templateURL — Ссылка на .docx шаблон. В нём может быть, например, шапка и нижний колонтитул; yShift — опциональный, сдвигает контент исходного документа вниз.
DirectualEngine.addEventListener(AppEvents.START, function(context){var html = $D.getValueFromTemplate("{{html}}")var templateUrl = $D.office.convert('link_to_your_template.docx')var initUrl = $D.htmlToPDF(html, 150)return $D.pdf.overlay(initUrl, templateUrl, 100);});
Результат выполнения функции — ссылка на сконвертированный файл .pdf.