Бесплатный C++ API для создания файлов Word DOCX на основе шаблонов

Ведущая бесплатная библиотека C++ с открытым исходным кодом для обработки текста позволяет программно создавать, редактировать, объединять и конвертировать файлы Word DOCX. Добавляйте графики со штрих‑кодами, текст, изображения и применяйте форматирование.

Что такое MiniDocx?

DocxFactory — мощная кроссплатформенная библиотека C++ с открытым исходным кодом, предназначенная для генерации файлов Microsoft Word DOCX (формат OpenXML) с помощью создания документов на основе шаблонов. Эта бесплатная библиотека поставляется с обёртками для нескольких языков программирования, включая C#, Java, Python и Progress 4GL, а также с инструментами командной строки. Что отличает DocxFactory, так это шаблонный подход, который устраняет необходимость разработчиков разбираться со сложным форматом файлов OpenXML. Библиотека включает поддержку различных важных функций обработки текста, таких как генерация документов на основе шаблонов, вставка/удаление абзацев или изображений, форматирование текста, работа с таблицами, объединение или разделение ячеек, управление списками, поддержка нескольких языков, обширная поддержка штрих‑кодов, поддержка множества форматов вывода и т.д.

DocxFactory — зрелая, бесплатная кроссплатформенная библиотека C/C++ (с обёртками для разных языков), упрощающая работу с файлами Microsoft Word .docx. Библиотека кроссплатформенная и плавно работает на основных операционных системах (Windows, UNIX/Linux), предоставляя гибкость развертывания на серверах, настольных компьютерах или встраиваемых системах. Библиотека лицензирована под лицензией Apache 2.0, что делает её полностью бесплатной как для частного, так и для коммерческого использования без ограничений функций или временных ограничений. Независимо от того, разрабатываете ли вы корпоративные системы отчётности, автоматизированные рабочие процессы с документами или простые приложения для слияния почты, DocxFactory предоставляет необходимые инструменты для эффективного создания профессиональных документов.

Previous Next

Начало работы с MiniDocx

Рекомендуемый способ установки MiniDocx — через GitHub. Пожалуйста, используйте следующую команду для быстрой установки.

Установить MiniDocx через GitHub

git clone git@github.com:totravel/minidocx.git 
cd minidocx  
You can also download it directly from Aspose product page.

Создание документа Word Docx с помощью C++

Открытая библиотека MiniDocx упрощает разработчикам создание и манипулирование документами Word Docx внутри C++ приложений. Библиотека включает поддержку применения форматирования, добавления текста, таблиц и изображений в документы Word. Самый простой способ понять MiniDocx — через практический пример. Создание базового документа Word с отформатированным текстом демонстрирует интуитивно понятный дизайн API библиотеки и простой рабочий процесс.

Как создавать документы Word, используя библиотеку C++?

#include "minidocx/minidocx.hpp"
#include 

int main()
{
  using namespace md;
  try {
    Document doc;
    SectionPointer sect = doc.addSection();

    ParagraphPointer para = sect->addParagraph();
    para->prop_.align_ = Alignment::Centered;

    RichTextPointer rich = para->addRichText("Happy Chinese New Year!");
    rich->prop_.fontSize_ = 32;
    rich->prop_.color_ = "FF0000";

    doc.saveAs("a.docx");
  }
  catch (const Exception& ex) {
    std::cerr << ex.what() << std::endl;
  }
  return 0;
}

Добавление таблиц в документы через библиотеку C++

Таблицы являются необходимыми для представления структурированных данных в документах Word, и MiniDocx предоставляет всесторонние возможности создания и форматирования таблиц. Таблицы состоят из строк и ячеек, каждая ячейка может содержать текст, форматирование и даже вложенный контент. Создание таблицы включает несколько шагов: определение структуры таблицы, добавление строк, заполнение ячеек содержимым и применение форматирования. Ниже представлен подробный пример, показывающий, как разработчики могут создать отформатированную таблицу в C++ приложениях.

Как создать отформатированную таблицу в документе Word через библиотеку C++?



#include "minidocx/minidocx.hpp"

int main()
{
  using namespace md;
  try {
    Document doc;
    SectionPointer sect = doc.addSection();

    // Create a table with 3 rows and 2 columns
    TablePointer table = sect->addTable(3, 2);

    // Access and populate cells
    // First row - header
    auto cell00 = table->cell(0, 0);
    auto para00 = cell00->addParagraph();
    auto text00 = para00->addRichText("Name");
    text00->prop_.bold_ = true;

    auto cell01 = table->cell(0, 1);
    auto para01 = cell01->addParagraph();
    auto text01 = para01->addRichText("Age");
    text01->prop_.bold_ = true;

    // Second row
    auto cell10 = table->cell(1, 0);
    auto para10 = cell10->addParagraph();
    para10->addRichText("Alice");

    auto cell11 = table->cell(1, 1);
    auto para11 = cell11->addParagraph();
    para11->addRichText("25");

    // Third row
    auto cell20 = table->cell(2, 0);
    auto para20 = cell20->addParagraph();
    para20->addRichText("Bob");

    auto cell21 = table->cell(2, 1);
    auto para21 = cell21->addParagraph();
    para21->addRichText("30");

    doc.saveAs("table_document.docx");
  }
  catch (const Exception& ex) {
    std::cerr << ex.what() << std::endl;
  }
  return 0;
}

Вставка изображений и картинок в файл Word DOCX

Визуальный контент улучшает читаемость и вовлечённость документа, делая поддержку изображений критически важной функцией любой библиотеки генерации документов. MiniDocx позволяет разработчикам вставлять изображения в документы, контролируя их размер и позицию. Добавление изображений в документ требует указания пути к файлу изображения и при необходимости установки размеров. Ниже пример, показывающий, как вставить изображение в документ Word через библиотеку C++.

Как вставить изображение в документ Word через библиотеку C++?

#include "minidocx/minidocx.hpp"

int main()
{
  using namespace md;
  try {
    Document doc;
    SectionPointer sect = doc.addSection();

    // Add a paragraph before the image
    ParagraphPointer para1 = sect->addParagraph();
    para1->addRichText("Below is an important diagram:");

    // Add a paragraph containing the image
    ParagraphPointer para2 = sect->addParagraph();
    para2->prop_.align_ = Alignment::Centered;

    // Insert the picture
    PicturePointer pic = para2->addPicture("path/to/image.png");
    pic->prop_.width_ = 400;
    pic->prop_.height_ = 300;

    // Add a paragraph after the image
    ParagraphPointer para3 = sect->addParagraph();
    para3->addRichText("Figure 1: Important visualization");

    doc.saveAs("document_with_image.docx");
  }
  catch (const Exception& ex) {
    std::cerr << ex.what() << std::endl;
  }
  return 0;
}

Секции документа и макет страницы

Секции обеспечивают основу для управления свойствами макета страниц в документах Word. Каждая секция может иметь разные настройки страницы, включая размер, ориентацию, отступы, заголовки и нижние колонтитулы. Такая архитектура, основанная на секциях, позволяет создавать сложные макеты документов с различными конфигурациями страниц. Типичный пример использования нескольких секций — создание документов с портретными и альбомными страницами, например, отчётов, включающих широкие таблицы или диаграммы, требующие альбомной ориентации. Ниже пример, показывающий, как работать с несколькими секциями документов Word внутри C++ приложений.

Как работать с несколькими секциями документов Word через библиотеку C++?


#include "minidocx/minidocx.hpp"

int main()
{
  using namespace md;
  try {
    Document doc;

    // First section with portrait orientation
    SectionPointer sect1 = doc.addSection();
    sect1->prop_.orientation_ = Orientation::Portrait;
    sect1->prop_.pageWidth_ = 8.5 * 1440; // Letter size in twips
    sect1->prop_.pageHeight_ = 11 * 1440;

    ParagraphPointer para1 = sect1->addParagraph();
    para1->addRichText("This is content in portrait orientation.");

    // Second section with landscape orientation
    SectionPointer sect2 = doc.addSection();
    sect2->prop_.orientation_ = Orientation::Landscape;
    sect2->prop_.pageWidth_ = 11 * 1440;
    sect2->prop_.pageHeight_ = 8.5 * 1440;

    ParagraphPointer para2 = sect2->addParagraph();
    para2->addRichText("This content appears in landscape orientation.");

    doc.saveAs("multi_section_document.docx");
  }
  catch (const Exception& ex) {
    std::cerr << ex.what() << std::endl;
  }
  return 0;
}

 Русский