Introdução

Aspose.PDF FOSS para C++ inclui um pequeno API de gráficos vetoriais para criar formas livres diretamente em uma página PDF. Isso é separado do caminho de renderização raster da biblioteca — BmpDevice, JpegDevice e TiffDevice, que convertem o conteúdo existente da página em formatos de imagem — e em vez disso permite que um programa construa nova geometria (círculos, elipses e linhas) em uma página enquanto o documento é gerado.

O API centra-se em um Graph, um contêiner que contém um conjunto de objetos Shape e é colocado em uma página da mesma forma que o restante do conteúdo da página, através de Page.Paragraphs(). Três formas concretas derivam da classe base abstrata Shape: Circle, Ellipse e Line, cada uma expressando sua geometria por meio de um pequeno conjunto de propriedades numéricas em vez de um tipo compartilhado de ponto ou retângulo. Largura do traço, cor, preenchimento e padrão de traçado são definidos por forma através de GraphInfo, e o próprio contêiner Graph possui um BorderInfo para enquadrar todo o contêiner.

Esta é uma área restrita da biblioteca — cinco classes que cobrem geometria e estilo de formas — destinada a programas que precisam desenhar conteúdo geométrico simples (bordas, marcadores, linhas de conexão, círculos de destaque) em uma página sem construir uma camada completa de desenho vetorial ou recorrer à composição de imagens.


O que está incluído

O Contêiner de Gráfico e Adicionando Formas a uma Página

Graph contém as formas desenhadas em uma página. Suas próprias propriedades — Left(), Top(), Width(), Height() e IsChangePosition() — posicionam e dimensionam o contêiner na página, e Shapes() retorna o vetor de ponteiros Shape que ele contém. As formas são adicionadas construindo-as, definindo suas propriedades e anexando-as a esse vetor; o próprio Graph é adicionado à página através de 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");
}

Desenhando Círculos e Elipses

Circle e Ellipse descrevem sua geometria com propriedades numéricas simples em vez de um tipo compartilhado de ponto ou retângulo. Circle expõe PosX(), PosY() e Radius(); Ellipse expõe Left(), Bottom(), Width() e Height(), descrevendo uma caixa delimitadora no mesmo estilo que o próprio Graph usa para posicionamento. Ambas substituem CheckBounds(containerWidth, containerHeight), herdado de Shape, que indica se a geometria atual da forma cabe dentro de um contêiner do tamanho especificado.

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

Desenhando Linhas

Line armazena sua geometria de forma diferente de Circle e Ellipse: PositionArray() retorna um std::vector<float> plano de coordenadas — um par x, y para cada ponto que a linha atravessa — em vez de um conjunto de propriedades nomeadas. Um segmento de dois pontos é definido com quatro valores: x inicial, y inicial, x final, y final. Como as demais formas, Line substitui CheckBounds(containerWidth, containerHeight) de 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);

Estilizando Formas com GraphInfo e BorderInfo

Cada traço e preenchimento de forma vem de um GraphInfo, lido e definido através de Shape.GraphInfo() / GraphInfo(value). GraphInfo expõe a largura do traço (LineWidth()), a cor do traço e do preenchimento (Color(), FillColor()), um padrão de traço pontilhado (DashArray(), DashPhase()), uma bandeira de linha dupla (IsDoubled()), e propriedades de inclinação/escala/rotação (SkewAngleX()/SkewAngleY(), ScalingRateX()/ScalingRateY(), RotationAngle()). O contêiner Graph também contém um BorderInfo, definido através de Border(), que possui um GraphInfo por borda — Left(), Right(), Top(), Bottom() — além de um RoundedBorderRadius() para arredondar a própria borda do contêiner.

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

Início Rápido

Adicione a biblioteca como um subdiretório CMake e vincule ao alvo aspose_pdf_foss:

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

Crie um documento, adicione uma página, desenhe um círculo dentro de um contêiner Graph e salve o resultado:

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

Formatos Compatíveis

FormatoExtensãoLerEscrever
BMP.bmp
JPEG.jpg
TIFF.tiff
Text.txt
SVG.svg

Esses formatos se aplicam à biblioteca como um todo — rasterização de página (BMP, JPEG, TIFF), extração de texto (Text) e importação de SVG — e não especificamente às classes de gráficos vetoriais. Graph, Shape, Circle, Ellipse e Line desenham diretamente no conteúdo da página PDF e não estão vinculados a um formato de arquivo próprio.


Código Aberto e Licenciamento

Aspose.PDF FOSS para C++ é distribuído sob a licença MIT, com o código-fonte completo disponível em github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. A licença permite uso comercial, modificação e redistribuição sem um acordo separado.


Começando

Recursos Relacionados