Вступ

Aspose.PDF FOSS для C++ включає невеликий векторний графічний API для створення довільних форм безпосередньо на сторінці PDF. Це окремо від шляху растрового рендерингу бібліотеки — BmpDevice, JpegDevice та TiffDevice, які перетворюють існуючий вміст сторінки у формати зображень — і замість цього дозволяє програмі будувати нову геометрію (кола, еліпси та лінії) на сторінці під час генерації документа.

API зосереджується навколо Graph — контейнера, що містить набір об’єктів Shape і розташовується на сторінці так само, як інший вміст сторінки, через Page.Paragraphs(). Три конкретні форми успадковуються від абстрактного базового класу Shape: Circle, Ellipse та Line, кожна з яких описує свою геометрію за допомогою невеликого набору числових властивостей, а не спільного типу точки або прямокутника. Ширина штриху, колір, заливка та шаблон пунктирної лінії задаються для кожної форми через GraphInfo, а сам контейнер Graph містить BorderInfo для обрамлення всього контейнера.

Це вузька частина бібліотеки — п’ять класів, що охоплюють геометрію форм та їх стилізацію — призначена для програм, яким потрібно малювати простий геометричний вміст (рамки, маркери, з’єднувальні лінії, виділені кола) на сторінці без створення повноцінного шару векторного малювання або переходу до композиції зображень.


Що включено

Контейнер графа та додавання форм на сторінку

Graph містить форми, намальовані на сторінці. Його власні властивості — Left(), Top(), Width(), Height() та IsChangePosition() — позиціонують і задають розмір контейнера на сторінці, а Shapes() повертає вектор вказівників на Shape, які він містить. Форми додаються шляхом їх створення, встановлення властивостей та додавання до цього вектора; сам Graph додається до сторінки через Page.Paragraphs().Add().

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/graph.hpp>
#include <aspose/pdf/circle.hpp>

using namespace Aspose::Pdf;

int main() {
    Document doc;
    Page page = doc.Pages().Add();

    auto graph = std::make_shared<Graph>();
    graph->Left(50.0);
    graph->Top(50.0);
    graph->Width(400.0);
    graph->Height(400.0);

    auto circle = std::make_unique<Circle>();
    circle->PosX(200.0);
    circle->PosY(200.0);
    circle->Radius(75.0);
    graph->Shapes().push_back(std::move(circle));

    page.Paragraphs().Add(graph);
    doc.Save("graph.pdf");
}

Малювання кіл та еліпсів

Circle і Ellipse кожен описують свою геометрію простими числовими властивостями, а не спільним типом точки чи прямокутника. Circle надає PosX(), PosY() та Radius(); Ellipse надає Left(), Bottom(), Width() і Height(), описуючи обмежувальний прямокутник у тому ж стилі, який використовується Graph для позиціонування. Обидва перевизначають CheckBounds(containerWidth, containerHeight), успадкований від Shape, який повідомляє, чи поточна геометрія форми вміщується у контейнер заданого розміру.

#include <aspose/pdf/circle.hpp>
#include <aspose/pdf/ellipse.hpp>

using namespace Aspose::Pdf;

Circle circle;
circle.PosX(150.0);
circle.PosY(150.0);
circle.Radius(50.0);
bool circleFits = circle.CheckBounds(400.0, 400.0);

Ellipse ellipse;
ellipse.Left(20.0);
ellipse.Bottom(20.0);
ellipse.Width(120.0);
ellipse.Height(60.0);
bool ellipseFits = ellipse.CheckBounds(400.0, 400.0);

Малювання ліній

Line зберігає свою геометрію інакше, ніж Circle і Ellipse: PositionArray() повертає плоский std::vector<float> координат — пару x, y для кожної точки, через яку проходить лінія — замість набору іменованих властивостей. Сегмент з двома точками задається чотирма значеннями: початкове x, початкове y, кінцеве x, кінцеве y. Як і інші форми, Line перевизначає CheckBounds(containerWidth, containerHeight) з Shape.

#include <aspose/pdf/line.hpp>

using namespace Aspose::Pdf;

Line line;
line.PositionArray({50.0f, 50.0f, 350.0f, 350.0f});
bool lineFits = line.CheckBounds(400.0, 400.0);

Стилізація форм за допомогою GraphInfo і BorderInfo

Контур та заливка кожної форми беруться з GraphInfo, читаються і встановлюються через Shape.GraphInfo() / GraphInfo(value). GraphInfo надає ширину контуру (LineWidth()), колір контуру та заливки (Color(), FillColor()), шаблон пунктирної лінії (DashArray(), DashPhase()), прапорець подвоєного контуру (IsDoubled()), а також властивості нахилу/масштабування/обертання (SkewAngleX()/SkewAngleY(), ScalingRateX()/ScalingRateY(), RotationAngle()). Контейнер Graph також містить BorderInfo, який задається через Border(), і містить по одному GraphInfo для кожного краю — Left(), Right(), Top(), Bottom() — а також RoundedBorderRadius() для округлення власного контуру контейнера.

#include <aspose/pdf/graph_info.hpp>
#include <aspose/pdf/border_info.hpp>
#include <aspose/pdf/color.hpp>

using namespace Aspose::Pdf;

GraphInfo stroke;
stroke.LineWidth(2.0f);
stroke.Color(Color::FromRgb(1.0, 0.0, 0.0));
stroke.FillColor(Color::FromRgb(1.0, 0.9, 0.9));
stroke.DashArray({4, 2});

BorderInfo border{BorderSide::All, 1.5f, Color::Black()};
border.RoundedBorderRadius(6.0);

Швидкий старт

Додайте бібліотеку як піддиректорію CMake і прив’яжіть її до цілі aspose_pdf_foss:

add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)

Створіть документ, додайте сторінку, намалюйте коло всередині контейнера Graph і збережіть результат:

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/graph.hpp>
#include <aspose/pdf/circle.hpp>

using namespace Aspose::Pdf;

int main() {
    Document doc;
    Page page = doc.Pages().Add();

    auto graph = std::make_shared<Graph>();
    graph->Left(50.0);
    graph->Top(50.0);
    graph->Width(300.0);
    graph->Height(300.0);

    auto circle = std::make_unique<Circle>();
    circle->PosX(150.0);
    circle->PosY(150.0);
    circle->Radius(100.0);
    graph->Shapes().push_back(std::move(circle));

    page.Paragraphs().Add(graph);
    doc.Save("circle.pdf");
}

Підтримувані формати

ФорматРозширенняЧитатиЗаписати
BMP.bmp
JPEG.jpg
TIFF.tiff
Text.txt
SVG.svg

Ці формати застосовуються до бібліотеки в цілому — растеризація сторінки (BMP, JPEG, TIFF), вилучення тексту (Text) та імпорт SVG — а не до конкретних класів векторної графіки. Graph, Shape, Circle, Ellipse та Line малюються безпосередньо у вмісті PDF-сторінки і не прив’язані до жодного власного формату файлу.


Відкритий код та ліцензування

Aspose.PDF FOSS для C++ розповсюджується під ліцензією MIT, повний вихідний код доступний за адресою github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. Ліцензія дозволяє комерційне використання, модифікацію та розповсюдження без окремої угоди.


Початок роботи

Пов’язані ресурси