• Post category:Обертка C++
  • Запись изменена:16.11.2022

Для интеграции Document Builder в любое приложение используется библиотека doctrenderer C++. Текущая версия приложения содержит шесть основных классов:

  • CDoctrenderer class -используемые Document Builder в процессе преобразования файлов.
  • CString class — класс string со свойством wchar_t*.
  • CDocBuilder class — используется Document Builder для создания файла документа (текстового документа, электронной таблицы, презентации, документа формы, PDF).
  • CDocBuilderContext class -используется Document Builder для получения контекста JS для работы.
  • CDocBuilderContextScope class — класс, размещенный в стеке, который устанавливает контекст выполнения для всех операций, выполняемых в локальной области.
  • CDocBuilderValue class — используется Document Builder для получения результатов вызываемых команд JS. Он представляет собой оболочку для объекта JS.

Пример

C++

#include "./../common_deploy.h"
#include "../docbuilder.h"
#include "./utils.cpp"

using namespace NSDoctRenderer;
int main(int argc, char *argv[])
{
	std::wstring sProcessDirectory = NSUtils::GetProcessDirectory();
	std::wstring sWorkDirectory = NSUtils::GetBuilderDirectory();

    CDocBuilder::Initialize(sWorkDirectory.c_str());

    CDocBuilder oBuilder;
    oBuilder.SetProperty("--work-directory", sWorkDirectory.c_str());

    oBuilder.CreateFile(OFFICESTUDIO_FILE_DOCUMENT_DOCX);

    CContext oContext = oBuilder.GetContext();
    CContextScope oScope = oContext.CreateScope();

    CValue oGlobal = oContext.GetGlobal();

    CValue oApi = oGlobal["Api"];
    CValue oDocument = oApi.Call("GetDocument");
    CValue oParagraph = oApi.Call("CreateParagraph");
    oParagraph.Call("SetSpacingAfter", 1000, false);
    oParagraph.Call("AddText", "Hello, world!");
    CValue oContent = oContext.CreateArray(1);
    oContent[0] = oParagraph;
    oDocument.Call("InsertContent", oContent);

    std::wstring sDstPath = sProcessDirectory + L"/result.docx";
    oBuilder.SaveFile(OFFICESTUDIO_FILE_DOCUMENT_DOCX, sDstPath.c_str());
    oBuilder.CloseFile();

    CDocBuilder::Dispose();

    return 0;
}

.docbuilder

builder.SetTmpFolder("DocBuilderTemp");
builder.CreateFile("docx");
var oDocument = Api.GetDocument();
var oParagraph = Api.CreateParagraph();
oParagraph.SetSpacingAfter(1000, false);
oParagraph.AddText("Hello, world!");
oDocument.InsertContent([oParagraph]);
builder.SaveFile("docx", "result.docx");
builder.CloseFile();