API интеграции с Document Builder
Когда вы интегрируете Document Builder в свое собственное приложение, это можно сделать двумя способами:
- Если ваше приложение работает на C++ или .Net, вы можете встроить код Document Builder вместе с кодом скрипта для создаваемых файлов с документами в ваше приложение. В этом случае вам придется перекомпилировать ваше приложение каждый раз, когда в выходных файлах документов будут происходить какие-либо изменения. Этот вариант хорош, когда вам нужно более быстрое нативное приложение и вы уверены, что результирующие файлы документов всегда будут оставаться неизменными или будут изменяться только при перекомпиляции приложения.
Для интеграции Document Builder в любое приложение используется библиотека doctrenderer C++ или .Net. - Если вы собираетесь использовать Document Builder с приложением, написанным на любом другом языке программирования, рекомендуется второй вариант: запустить исполняемый файл Document Builder из вашего приложения и использовать файл сценария .docbuilder для создаваемого документа в качестве параметра к нему. Это гораздо более гибко и позволяет в дальнейшем изменять файлы сценариев документа (особенно если их несколько) независимо от вашего приложения. Вам нужно будет только перекомпилировать ваше приложение, если потребуется добавить в него дополнительные файлы сценариев документов.
Чтобы запустить Document Builder с помощью второго варианта, выполните следующую команду: -
docbuilder.exe mydocument.docbuilder
Известные проблемы
Если вы используете Document Builder и как приложение, и как скрипт, то вам необходимо знать некоторые правила и ограничения:
- Чтобы запустить исполняемый файл Document Builder в приложении C++, используйте метод CDocBuilder.Run следующим образом:
CDocBuilder::Initialize(sWorkDirectory.c_str()); CDocBuilder oBuilder; oBuilder.Run("path-to-script.docbuilder"); CDocBuilder::Dispose();
Another way to do this is to use the docbuilder.exe executable file and run it with the .docbuilder file as an argument, where all the code for the document file creation will be written:
docbuilder.exe "path-to-script.docbuilder"
- Чтобы задать классу билдера аргумент, который можно передать программе вне метода CDocBuilder.ExecuteCommand, добавьте его как дополнительное свойство при запуске исполняемого файла Document Builder или как часть кода JavaScript программы, но не включайте в файл документа сценарий:
Задает для свойства —argument значение CDocBuilder.Run.
docbuilder.exe "--argument={\"company\":\"Р7\",\"product\":\"Document Builder\"}" "path-to-script.docbuilder"
Задает свойство —argument с помощью кода JavaScript.
var sCompany = Argument["company"]; var sProduct = Argument["product"];
- Методы объекта построителя нельзя вызывать с помощью переменных JS. При необходимости оберните их инструкцией jsValue:
var jsVar = "123.docx"; builder.SaveFile("docx", jsVar); // Incorrect builder.SaveFile("docx", jsValue(jsVar)); // Correct
- Для удобства типы форматов заменяются строками.На пример,
builder.CreateFile("docx");
то же самое, что
CDocBuilder.CreateFile(AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX);
И
builder.SaveFile("docx", file_path);
то же самое, что
CDocBuilder.SaveFile(AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX, file_path);
ТИПЫ ФОРМАТОВ
строка | Тип формата |
«docx» | AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX |
«doc» | AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC |
«odt» | AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT |
«rtf» | AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF |
«txt» | AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT |
«pptx» | AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX |
«odp» | AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP |
«xlsx» | AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX |
«xls» | AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS |
«ods» | AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS |
«csv» | AVS_OFFICESTUDIO_FILE_SPREADSHEET_CSV |
«pdf» | AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF |
«image» | AVS_OFFICESTUDIO_FILE_IMAGE |
«jpg» | AVS_OFFICESTUDIO_FILE_IMAGE |
«png» | AVS_OFFICESTUDIO_FILE_IMAGE |
- Весь контекст JavaScript является оболочкой для собственного объекта CDocBuilder builderJS. Работать с ним нужно как с обычным объектом JavaScript. В этом случае инструкция jsValue для переменных JS не нужна:
builderJS.OpenFile("path_or_url", "x2t_additons_as_xml"); builderJS.CreateFile(AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX); or builderJS.CreateFile("docx"); builderJS.SetTmpFolder("folder"); builderJS.SaveFile(AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX, "path", "x2t_additons_as_xml"); or builderJS.SaveFile("docx", "path", "x2t_additons_as_xml"); builderJS.CloseFile();
- Конструктор документов всегда работает с одним файлом. Но бывают случаи, когда нужно иметь возможность открыть другой файл не для добавления его данных в содержимое, а для каких-то манипуляций (сравнение документов, mailmerge и т.д.). Для таких случаев в Конструкторе документов предусмотрен метод OpenTmpFile:
var tmpFile = builderJS.OpenTmpFile("path_or_url");
Методы:
Название Описание IsValid Указывает, является ли временный файл действительным (true). GetBinary Возвращает Uint8Array с бинарным содержимым doct/pptt/xlst. GetFolder Возвращает строковый путь к временной папке с содержимым временного файла. Close Закрывает файл (удаляет содержимое временной папки). GetImageMap Возвращает объект словаря с парами ключ-значение imageId -> imagePath (для вставки в документ). - Чтобы сделать код короче, используйте следующие определения типов:
typedef CDocBuilderValue CValue; typedef CDocBuilderContext CContext; typedef CDocBuilderContextScope CContextScope;