Створення динамічних Word DOCX файлів за допомогою безкоштовного C++ API
Бібліотека C++ DOCX з відкритим кодом для створення Word документів (.docx формат) безпосередньо з коду C++. Дозволяє додавати таблиці та зображення, застосовувати формати та стилі до тексту та інше.
Що таке MiniDocx?
DocxFactory – потужна, крос‑платформенна бібліотека з відкритим кодом на C++, призначена для генерації файлів Microsoft Word DOCX (формат OpenXML) шляхом створення документів на основі шаблону. Ця безкоштовна бібліотека включає обгортки для кількох мов програмування, включно з C#, Java, Python та Progress 4GL, а також інструменти командного рядка. Що вирізняє DocxFactory, так це підхід, орієнтований на шаблони, який усуває потребу розробникам розуміти складний формат файлів OpenXML. Бібліотека включає підтримку різних важливих функцій обробки тексту, таких як створення документів за шаблонами, вставка/видалення абзаців або зображень, форматування тексту, робота з таблицями, об’єднання чи розділення клітинок, управління списками, підтримка багатьох мов, широке підтримка штрих‑коду, підтримка кількох форматів виводу тощо.
MiniDocx – це сучасна, безкоштовна, крос‑платформенна бібліотека C/C++ (з багатомовними обгортками), яка спрощує роботу з файлами Microsoft Word .docx. Бібліотека крос‑платформенна та плавно працює на основних операційних системах (Windows, UNIX/Linux) — забезпечуючи гнучкість розгортання на серверах, настільних комп’ютерах чи вбудованих системах. Бібліотека ліцензована під Apache 2.0, що робить її повністю безкоштовною як для приватного, так і комерційного використання без жодних обмежень функціональності чи часу. Незалежно від того, чи створюєте ви корпоративні системи звітності, автоматизовані робочі процеси з документами чи прості додатки для злиття листів, MiniDocx надає інструменти, необхідні для ефективного створення професійних документів.
Початок роботи з 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.Створення документу на основі шаблону за допомогою C++
Основна філософія MiniDocx базується на простоті. Замість того, щоб програмно будувати документи елемент за елементом, ви створюєте шаблон у Microsoft Word — звичайний файл DOCX з заповнювачами — і зливаюте в нього свої дані. Такий підхід має кілька переваг, таких як швидша розробка, WYSIWYG‑редагування тощо. Ось корисний приклад, який демонструє, як створювати нові Word документи з шаблону за допомогою бібліотеки C++.
Як створити новий документ з шаблону за допомогою бібліотеки 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++
Бібліотека з відкритим кодом MiniDocx підтримує широкий спектр 1D та 2D штрих‑коду, включаючи Code39, Code128, EAN, UPC, ISBN, Databar, поштові коди, PDF417, Data Matrix, QR‑code та Maxi Code. Штрих‑коди вставляються в шаблони як поля і автоматично генеруються на підставі наданих вами даних. Це робить їх ідеальними для систем управління інвентарем, додатків для доставки та логістики, рішень для маркування продуктів, систем відстеження документів, інтеграції точок продажу в роздрібі тощо.
Як застосувати розширене форматування та стиль у документах 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 може динамічно заповнювати дані діаграм, дозволяючи створювати візуалізації, що базуються на даних. Діаграми, визначені у вашому шаблоні, можуть програмно оновлювати свої серії даних, що робить можливим створення управлінських панелей та аналітичних звітів. Бібліотека включає підтримку повного списку понад 70 типів діаграм, доступних у Microsoft Word, включаючи стовпці, лінії, кругові діаграми, стовпчики, області, розкидані, акції, поверхневі, кільцеві, бульбашкові, радарні тощо. Ця функція дозволяє створювати динамічні фінансові звіти з реальними даними, документи статистичного аналізу, панелі бізнес‑інтелекту, наукові дослідницькі звіти, документацію щодо відстеження продуктивності та ін.
How to Insert an Image into a Word Document via C++ library?
#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;
}
Розділи документа та розмітка сторінки
Бібліотека з відкритим кодом MiniDocx зберігає рідне форматування Word, одночасно динамічно коригуючи стилі у C++‑застосунках. Вона підтримує різноманітні функції форматування, такі як стилі шрифтів, розміри та кольори, вирівнювання та інтервали абзаців, таблиці з користувацькими межами, колонтитули, номери сторінок та розриви розділів, користувацькі стилі та теми тощо. Створений документ зберігає увесь формат з шаблону, забезпечуючи послідовність бренду та професійний вигляд. Наведений нижче приклад коду показує, як розробники можуть застосовувати умовне форматування на основі даних у C++‑додатках.
How to Work with Multiple Sections of Word Documents via C++ Library?
#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;
}