Giới thiệu

Aspose.PDF FOSS cho C++ bao gồm một API đồ họa vector nhỏ để xây dựng các hình dạng tự do trực tiếp trên trang PDF. Điều này tách biệt với đường raster-render của thư viện — BmpDevice, JpegDevice, và TiffDevice, chúng chuyển đổi nội dung trang hiện có sang các định dạng ảnh — và thay vào đó cho phép chương trình tạo ra hình học mới (hình tròn, hình bầu dục và đường thẳng) trên trang khi tài liệu được tạo.

API tập trung vào một Graph, một container chứa một tập hợp các đối tượng Shape và được đặt trên trang theo cùng cách với nội dung trang khác, thông qua Page.Paragraphs(). Ba hình dạng cụ thể kế thừa từ lớp trừu tượng Shape là: Circle, EllipseLine, mỗi hình mô tả hình học của mình bằng một bộ thuộc tính số ít thay vì một kiểu điểm hoặc hình chữ nhật chung. Độ rộng nét, màu sắc, màu nền và mẫu gạch được đặt cho từng hình qua GraphInfo, và container Graph tự nó mang một BorderInfo để khung bao toàn bộ container.

Đây là một khu vực hẹp của thư viện — năm lớp bao phủ hình học và kiểu dáng của hình dạng — được thiết kế cho các chương trình cần vẽ nội dung hình học đơn giản (đường viền, đánh dấu, các đường nối, vòng tròn làm nổi bật) trên một trang mà không cần xây dựng một lớp vẽ vector đầy đủ hoặc quay lại việc kết hợp hình ảnh.


Nội dung bao gồm

Container Đồ Thị và Thêm Hình Dạng vào Trang

Graph chứa các hình được vẽ trên một trang. Các thuộc tính riêng của nó — Left(), Top(), Width(), Height(), và IsChangePosition() — định vị và kích thước container trên trang, và Shapes() trả về vector các con trỏ Shape mà nó giữ. Các hình được thêm bằng cách khởi tạo chúng, thiết lập các thuộc tính, và nối chúng vào vector đó; chính Graph được thêm vào trang thông qua 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");
}

Vẽ Các Vòng Tròn và Elip

CircleEllipse mỗi cái mô tả hình học của mình bằng các thuộc tính số thuần túy thay vì một kiểu điểm hoặc hình chữ nhật chung. Circle cung cấp PosX(), PosY()Radius(); Ellipse cung cấp Left(), Bottom(), Width()Height(), mô tả một hộp bao trong cùng phong cách mà Graph sử dụng để định vị. Cả hai đều ghi đè CheckBounds(containerWidth, containerHeight), kế thừa từ Shape, để báo cáo liệu hình học hiện tại của hình có vừa trong một container có kích thước được chỉ định hay không.

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

Vẽ Đường

Line lưu trữ hình học của mình khác với CircleEllipse: PositionArray() trả về một std::vector<float> phẳng các tọa độ — một cặp x, y cho mỗi điểm mà đường đi qua — thay vì một tập hợp các thuộc tính có tên. Một đoạn hai điểm được thiết lập bằng bốn giá trị: x bắt đầu, y bắt đầu, x kết thúc, y kết thúc. Giống như các hình khác, Line ghi đè CheckBounds(containerWidth, containerHeight) từ 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);

Định Dạng Hình Với GraphInfo và BorderInfo

Mỗi đường viền và tô màu của hình được lấy từ một GraphInfo, được đọc và đặt thông qua Shape.GraphInfo() / GraphInfo(value). GraphInfo cung cấp độ rộng nét (LineWidth()), màu nét và màu tô (Color(), FillColor()), mẫu gạch ngang (DashArray(), DashPhase()), cờ đôi nét (IsDoubled()), và các thuộc tính nghiêng/tỷ lệ/độ quay (SkewAngleX()/SkewAngleY(), ScalingRateX()/ScalingRateY(), RotationAngle()). Bộ chứa Graph cũng mang một BorderInfo, được đặt qua Border(), chứa một GraphInfo cho mỗi cạnh — Left(), Right(), Top(), Bottom() — cộng với một RoundedBorderRadius() để làm tròn viền của chính bộ chứa.

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

Bắt Đầu Nhanh

Thêm thư viện như một thư mục con của CMake và liên kết với target aspose_pdf_foss:

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

Tạo một tài liệu, thêm một trang, vẽ một vòng tròn bên trong một container Graph, và lưu kết quả:

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

Định dạng được hỗ trợ

Định dạngPhần mở rộngĐọcGhi
BMP.bmp
JPEG.jpg
TIFF.tiff
Text.txt
SVG.svg

Các định dạng này áp dụng cho toàn bộ thư viện — raster hóa trang (BMP, JPEG, TIFF), trích xuất văn bản (Text), và nhập SVG — hơn là cho các lớp đồ họa vector cụ thể. Graph, Shape, Circle, Ellipse, và Line vẽ trực tiếp vào nội dung trang PDF và không gắn liền với bất kỳ định dạng tệp nào riêng.


Mã nguồn mở & Giấy phép

Aspose.PDF FOSS cho C++ được phân phối theo giấy phép MIT, với mã nguồn đầy đủ có sẵn tại github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. Giấy phép cho phép sử dụng thương mại, sửa đổi và phân phối lại mà không cần thỏa thuận riêng.


Bắt đầu

Tài nguyên liên quan