Wprowadzenie
Aspose.PDF FOSS dla C++ zawiera małą bibliotekę grafiki wektorowej API umożliwiającą tworzenie kształtów dowolnej formy bezpośrednio na stronie PDF. Jest to oddzielne od ścieżki renderowania rastrowego biblioteki — BmpDevice, JpegDevice i TiffDevice, które konwertują istniejącą zawartość strony do formatów obrazów — i zamiast tego pozwala programowi konstruować nową geometrię (koła, elipsy i linie) na stronie podczas generowania dokumentu.
W centrum API znajduje się Graph, kontener, który przechowuje zestaw obiektów Shape i jest umieszczany na stronie w taki sam sposób jak pozostała zawartość strony, za pomocą Page.Paragraphs(). Trzy konkretne kształty dziedziczą po abstrakcyjnej bazie Shape: Circle, Ellipse i Line, przy czym każdy opisuje swoją geometrię przy użyciu niewielkiego zestawu właściwości numerycznych zamiast wspólnego typu punktu lub prostokąta. Szerokość kreski, kolor, wypełnienie i wzór kreskowania są ustawiane dla każdego kształtu poprzez GraphInfo, a sam kontener Graph zawiera BorderInfo służący do oprawienia całego kontenera.
Jest to wąska część biblioteki — pięć klas obejmujących geometrię i stylizację kształtów — przeznaczona dla programów, które muszą rysować prostą treść geometryczną (obramowania, znaczniki, linie łączące, podświetlające koła) na stronie bez budowania pełnej warstwy rysowania wektorowego lub cofania się do kompozycji obrazów.
Co jest zawarte
Kontener wykresu i dodawanie kształtów do strony
Graph przechowuje kształty narysowane na stronie. Jego własne właściwości — Left(), Top(), Width(), Height() i IsChangePosition() — określają pozycję i rozmiar kontenera na stronie, a Shapes() zwraca wektor wskaźników Shape, które zawiera. Kształty są dodawane poprzez ich tworzenie, ustawianie właściwości i dołączanie do tego wektora; sam Graph jest dodawany do strony za pomocą 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");
}
Rysowanie kół i elips
Circle i Ellipse opisują swoją geometrię za pomocą zwykłych właściwości liczbowych zamiast wspólnego typu punktu lub prostokąta. Circle udostępnia PosX(), PosY() i Radius(); Ellipse udostępnia Left(), Bottom(), Width() i Height(), opisując prostokąt ograniczający w tym samym stylu, w jakim Graph używa go do pozycjonowania. Oba nadpisują metodę CheckBounds(containerWidth, containerHeight), odziedziczoną po Shape, która informuje, czy bieżąca geometria kształtu mieści się w kontenerze o podanym rozmiarze.
#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);
Rysowanie linii
Line przechowuje swoją geometrię inaczej niż Circle i Ellipse: PositionArray() zwraca płaski std::vector<float> współrzędnych — parę x, y dla każdego punktu, przez który przechodzi linia — zamiast zestawu nazwanych właściwości. Segment dwupunktowy jest ustawiany za pomocą czterech wartości: start x, start y, end x, end y. Podobnie jak pozostałe kształty, Line nadpisuje metodę CheckBounds(containerWidth, containerHeight) z klasy 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);
Stylowanie kształtów przy użyciu GraphInfo i BorderInfo
Każdy kontur i wypełnienie kształtu pochodzą z GraphInfo, odczytywane i ustawiane za pomocą Shape.GraphInfo() / GraphInfo(value). GraphInfo udostępnia szerokość linii (LineWidth()), kolor konturu i wypełnienia (Color(), FillColor()), wzorzec przerywania (DashArray(), DashPhase()), flagę podwójnej linii (IsDoubled()), oraz właściwości pochylenia/skali/obracania (SkewAngleX()/SkewAngleY(), ScalingRateX()/ScalingRateY(), RotationAngle()). Kontener Graph zawiera również BorderInfo, ustawiany przez Border(), który przechowuje po jednym GraphInfo dla każdej krawędzi — Left(), Right(), Top(), Bottom() — oraz RoundedBorderRadius() służący do zaokrąglania własnej ramki kontenera.
#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);
Szybki start
Dodaj bibliotekę jako podkatalog CMake i połącz z celem aspose_pdf_foss:
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
Utwórz dokument, dodaj stronę, narysuj okrąg wewnątrz kontenera Graph i zapisz wynik:
#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");
}
Obsługiwane formaty
| Format | Rozszerzenie | Odczyt | Zapis |
|---|---|---|---|
| BMP | .bmp | — | ✓ |
| JPEG | .jpg | — | ✓ |
| TIFF | .tiff | — | ✓ |
| Text | .txt | — | ✓ |
| SVG | .svg | ✓ | — |
Te formaty dotyczą całej biblioteki — rasteryzacji stron (BMP, JPEG, TIFF), ekstrakcji tekstu (Text) i importu SVG — a nie konkretnych klas grafiki wektorowej. Graph, Shape, Circle, Ellipse i Line rysują bezpośrednio do zawartości strony PDF i nie są powiązane z własnym formatem pliku.
Open Source i licencjonowanie
Aspose.PDF FOSS dla C++ jest dystrybuowane na licencji MIT, a pełne źródło dostępne jest pod adresem github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. Licencja zezwala na komercyjne użycie, modyfikację i redystrybucję bez osobnej umowy.