Einleitung
Aspose.PDF FOSS für C++ enthält ein kleines Vektor-Grafik-API zum Erstellen von Freiform-Formen direkt auf einer PDF-Seite. Es ist von dem raster-Render-Pfad der Bibliothek getrennt — BmpDevice, JpegDevice und TiffDevice, die vorhandenen Seiteninhalt in Bildformate konvertieren — und ermöglicht stattdessen einem Programm, neue Geometrie (Kreise, Ellipsen und Linien) auf einer Seite zu erzeugen, während das Dokument generiert wird.
Das API konzentriert sich auf ein Graph, einen Container, der eine Menge von Shape-Objekten hält und über Page.Paragraphs() auf einer Seite platziert wird, genau wie anderer Seiteninhalt. Drei konkrete Formen leiten sich von der abstrakten Basisklasse Shape ab: Circle, Ellipse und Line, wobei jede ihre Geometrie über eine kleine Menge numerischer Eigenschaften statt eines gemeinsamen Punkt- oder Rechtecktyps ausdrückt. Strichstärke, Farbe, Füllung und Strichmuster werden pro Form über GraphInfo gesetzt, und der Graph-Container selbst trägt ein BorderInfo zur Umrahmung des gesamten Containers.
Dies ist ein eng begrenzter Bereich der Bibliothek – fünf Klassen, die Formgeometrie und Stil abdecken – und richtet sich an Programme, die einfachen geometrischen Inhalt (Rahmen, Markierungen, Verbindungslinien, Hervorhebungs-Kreise) auf einer Seite zeichnen müssen, ohne eine vollständige Vektorgrafik-Ebene aufzubauen oder auf Bild-Compositing zurückzugreifen.
Was enthalten ist
Der Graph Container und das Hinzufügen von Formen zu einer Seite
Graph enthält die auf einer Seite gezeichneten Formen. Seine eigenen Eigenschaften — Left(), Top(), Width(), Height() und IsChangePosition() — positionieren und dimensionieren den Container auf der Seite, und Shapes() gibt den Vektor der gehaltenen Shape-Zeiger zurück. Formen werden hinzugefügt, indem man sie erstellt, ihre Eigenschaften setzt und sie an diesen Vektor anhängt; der Graph selbst wird über Page.Paragraphs().Add() zur Seite hinzugefügt.
#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");
}
Kreise und Ellipsen zeichnen
Circle und Ellipse beschreiben jeweils ihre Geometrie mit einfachen numerischen Eigenschaften statt eines gemeinsamen Punkt- oder Rechtecktyps. Circle stellt PosX(), PosY() und Radius() bereit; Ellipse stellt Left(), Bottom(), Width() und Height() bereit und beschreibt damit ein Begrenzungs-Rechteck in derselben Art, wie Graph selbst für die Positionierung verwendet. Beide überschreiben CheckBounds(containerWidth, containerHeight), das von Shape geerbt wird und meldet, ob die aktuelle Geometrie der Form in einen Container der angegebenen Größe passt.
#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);
Linien zeichnen
Line speichert seine Geometrie anders als Circle und Ellipse: PositionArray() liefert einen flachen std::vector<float> von Koordinaten — ein x-y-Paar für jeden Punkt, den die Linie durchläuft — anstatt einer Menge benannter Eigenschaften. Ein Zweipunkt-Segment wird mit vier Werten gesetzt: Start-x, Start-y, End-x, End-y. Wie die anderen Formen überschreibt Line CheckBounds(containerWidth, containerHeight) von 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);
Gestaltung von Formen mit GraphInfo und BorderInfo
Der Strich und die Füllung jeder Form stammen aus einem GraphInfo, das über Shape.GraphInfo()/GraphInfo(value) gelesen und gesetzt wird. GraphInfo stellt die Strichbreite (LineWidth()), Strich- und Füllfarbe (Color(), FillColor()), ein Strichmuster (DashArray(), DashPhase()), ein Doppellinien-Flag (IsDoubled()) sowie Schräg-/Skalierungs-/Rotations-Eigenschaften (SkewAngleX()/SkewAngleY(), ScalingRateX()/ScalingRateY(), RotationAngle()) bereit. Der Graph-Container enthält zudem ein BorderInfo, das über Border() gesetzt wird und für jede Kante ein GraphInfo hält—Left(), Right(), Top(), Bottom()—sowie ein RoundedBorderRadius() zur Abrundung des eigenen Containers.
#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);
Schnellstart
Fügen Sie die Bibliothek als CMake-Unterverzeichnis hinzu und verlinken Sie gegen das Ziel aspose_pdf_foss:
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
Erstellen Sie ein Dokument, fügen Sie eine Seite hinzu, zeichnen Sie einen Kreis innerhalb eines Graph-Containers und speichern Sie das Ergebnis:
#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");
}
Unterstützte Formate
| Format | Erweiterung | Lesen | Schreiben |
|---|---|---|---|
| BMP | .bmp | — | ✓ |
| JPEG | .jpg | — | ✓ |
| TIFF | .tiff | — | ✓ |
| Text | .txt | — | ✓ |
| SVG | .svg | ✓ | — |
Diese Formate gelten für die Bibliothek als Ganzes — Seitenrasterisierung (BMP, JPEG, TIFF), Textextraktion (Text) und SVG-Import — eher als für die Vektor-Grafik-Klassen speziell. Graph, Shape, Circle, Ellipse und Line zeichnen direkt in den PDF-Seiteninhalt und sind nicht an ein eigenes Dateiformat gebunden.
Open Source & Lizenzierung
Aspose.PDF FOSS für C++ wird unter der MIT-Lizenz verteilt, der vollständige Quellcode ist verfügbar unter github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. Die Lizenz erlaubt kommerzielle Nutzung, Modifikation und Weiterverteilung ohne separate Vereinbarung.