介绍

Aspose.PDF FOSS for C++ 包含一个小型矢量图形 API,用于直接在 PDF 页面上构建自由形状。它独立于库的光栅渲染路径——BmpDeviceJpegDeviceTiffDevice,后者将现有页面内容转换为图像格式——而是让程序在生成文档时在页面上构建新的几何体(圆、椭圆和直线)。

API 的核心是一个 Graph,它是一个容器,保存一组 Shape 对象,并通过 Page.Paragraphs() 以与其他页面内容相同的方式放置在页面上。三个具体形状继承自抽象的 Shape 基类:CircleEllipseLine,它们通过一小组数值属性而非共享的点或矩形类型来表达几何形状。描边宽度、颜色、填充和虚线模式通过 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");
}

绘制圆形和椭圆

CircleEllipse 均使用普通数值属性而非共享的点或矩形类型来描述几何形状。Circle 提供 PosX()PosY()Radius()Ellipse 提供 Left()Bottom()Width()Height(),以与 Graph 本身定位使用的相同方式描述边界框。两者都重写了从 Shape 继承的 CheckBounds(containerWidth, containerHeight),该方法报告形状当前的几何是否适合给定尺寸的容器。

#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 的几何存储方式不同于 CircleEllipsePositionArray() 返回一个扁平的 std::vector<float> 坐标数组——每个点的 x、y 对,而不是一组具名属性。两点线段使用四个数值设置:起始 x、起始 y、结束 x、结束 y。和其他形状一样,Line 重写了来自 ShapeCheckBounds(containerWidth, containerHeight)

#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() 设置,其中为每条边保存一个 GraphInfoLeft(), 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 导入——而不是专门针对矢量图形类。GraphShapeCircleEllipseLine 直接绘制到 PDF 页面内容中,并且不依赖于任何特定的文件格式。


开源与许可证

Aspose.PDF FOSS for C++ 在 MIT 许可证下发行,完整源代码可在 github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp 获取。该许可证允许商业使用、修改和再分发,无需单独协议。


快速入门

相关资源