Bevezetés

Aspose.PDF FOSS a C++-hez egy kis vektorgrafikus API biztosít, amely lehetővé teszi szabad formájú alakzatok építését közvetlenül egy PDF oldalon. Ez különálló a könyvtár raster-megjelenítési útjától — BmpDevice, JpegDevice és TiffDevice, amelyek a meglévő oldal tartalmat képfájlformátumokká alakítják —, és ehelyett lehetővé teszi, hogy egy program új geometriát (körök, ellipszisek és vonalak) hozzon létre az oldalon a dokumentum generálása közben.

A API a Graph köré épül, egy olyan tároló, amely Shape objektumok halmazát tartalmazza, és az oldalon ugyanúgy helyeződik el, mint a többi oldal tartalom, a Page.Paragraphs() segítségével. Három konkrét alakzat származik az absztrakt Shape alaposztályból: Circle, Ellipse és Line, amelyek mindegyike a geometriáját egy kis számérték-készlettel fejezik ki, nem egy közös pont vagy téglalap típus használatával. A vonal vastagsága, színe, kitöltése és szaggatott mintázata alakzatonként a GraphInfo-n keresztül állítható be, a Graph tároló maga pedig egy BorderInfo-t hordoz a teljes tároló keretezéséhez.

Ez a könyvtár egy szűk területe – öt osztály, amely az alakzatgeometriát és -stílusokat fedi le – olyan programok számára, amelyeknek egyszerű geometriai tartalmat (keretek, jelölők, összekötő vonalak, kiemelő körök) kell rajzolniuk egy oldalon, anélkül, hogy teljes vektorgrafikus réteget építenének vagy képosztályozásra támaszkodnának.


Mi szerepel benne

A Grafikon Tároló és Alakzatok Hozzáadása az Oldalhoz

A Graph tárolja az oldalon megrajzolt alakzatokat. Saját tulajdonságai — Left(), Top(), Width(), Height() és IsChangePosition() — határozzák meg a tároló helyzetét és méretét az oldalon, a Shapes() pedig visszaadja a tárolt Shape mutatók vektorát. Az alakzatokat úgy adjuk hozzá, hogy létrehozzuk őket, beállítjuk a tulajdonságaikat, és a vektorhoz fűzzük; a Graph magát pedig a Page.Paragraphs().Add() segítségével helyezzük az oldalra.

#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");
}

Körök és ellipszisek rajzolása

A Circle és az Ellipse egyaránt a geometrájukat egyszerű numerikus tulajdonságokkal írja le, nem egy közös pont vagy téglalap típus használatával. A Circle a PosX(), PosY() és Radius() metódusokat teszi elérhetővé; az Ellipse a Left(), Bottom(), Width() és Height() metódusokat, egy határoló dobozt leírva ugyanabban a stílusban, ahogyan a Graph maga a pozícionáláshoz használja. Mindkettő felülírja a Shape-től örökölt CheckBounds(containerWidth, containerHeight) metódust, amely azt jelzi, hogy az alakzat aktuális geometriája illeszkedik-e a megadott méretű tárolóba.

#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);

Vonalak rajzolása

A Line a geometriai adatait másként tárolja, mint a Circle és az Ellipse: a PositionArray() egy lapos std::vector<float> koordinátákat ad vissza — minden egyes ponthoz egy x, y párral, amelyen a vonal áthalad — a nevesített tulajdonságok halmaza helyett. Egy kétpontú szegmenst négy értékkel állítunk be: kezdő x, kezdő y, vég x, vég y. A többi alakzathoz hasonlóan a Line felülírja a Shape-től örökölt CheckBounds(containerWidth, containerHeight) metódust.

#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);

Alakzatok stílusozása a GraphInfo és BorderInfo segítségével

Minden alakzat vonala és kitöltése egy GraphInfo-ból származik, amelyet a Shape.GraphInfo() / GraphInfo(value) segítségével olvasunk és állítunk be. A GraphInfo megadja a vonalvastagságot (LineWidth()), a vonal- és kitöltőszínt (Color(), FillColor()), egy szaggatott mintát (DashArray(), DashPhase()), egy dupla vonal jelzőt (IsDoubled()), valamint a ferde/nyújtás/forgatás tulajdonságokat (SkewAngleX()/SkewAngleY(), ScalingRateX()/ScalingRateY(), RotationAngle()). A Graph tároló továbbá egy BorderInfo-t tartalmaz, amelyet a Border()-on keresztül állítunk be, és amely minden élhez egy GraphInfo-t tárol – Left(), Right(), Top(), Bottom() – valamint egy RoundedBorderRadius()-t a tároló saját szegélyének lekerekítéséhez.

#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);

Gyors kezdés

Add hozzá a könyvtárat CMake alkönyvtárként, és linkeld a aspose_pdf_foss célhoz:

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

Hozz létre egy dokumentumot, adj hozzá egy oldalt, rajzolj egy kört egy Graph tárolóban, majd mentsd el az eredményt:

#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");
}

Támogatott formátumok

FormátumKiterjesztésOlvasásÍrás
BMP.bmp
JPEG.jpg
TIFF.tiff
Text.txt
SVG.svg

Ezek a formátumok a teljes könyvtárra vonatkoznak — oldalraszterizálás (BMP, JPEG, TIFF), szövegszerzés (Text), és SVG import — nem pedig kifejezetten a vektoros grafika osztályokra. Graph, Shape, Circle, Ellipse, és Line közvetlenül a PDF oldal tartalmába rajzol, és nincs saját fájlformátumuk.


Nyílt forráskód és licencelés

Aspose.PDF FOSS for C++ az MIT licenc alatt kerül terjesztésre, a teljes forrás elérhető itt: github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. A licenc megengedi a kereskedelmi felhasználást, módosítást és újraelosztást külön megállapodás nélkül.


Első lépések

Kapcsolódó források