مقدمه
Aspose.PDF FOSS برای C++ شامل یک API گرافیک برداری کوچک برای ساخت اشکال آزادانه مستقیماً روی صفحه PDF است. این جدا از مسیر رندرینگ رستر کتابخانه — BmpDevice، JpegDevice و TiffDevice که محتوای موجود صفحه را به فرمتهای تصویر تبدیل میکنند — میباشد و بهجای آن به برنامه اجازه میدهد هندسه جدید (دایرهها، بیضیها و خطوط) را روی صفحه هنگام تولید سند بسازد.
API بر محور یک Graph متمرکز است، که یک محفظه است که مجموعهای از اشیاء Shape را نگه میدارد و از طریق Page.Paragraphs() به همان شیوه محتویات دیگر صفحه روی صفحه قرار میگیرد. سه شکل واقعی از پایهٔ انتزاعی Shape مشتق میشوند: Circle، Ellipse و Line، که هر یک هندسه خود را از طریق مجموعهٔ کوچکی از ویژگیهای عددی بیان میکنند نه از طریق یک نقطه یا نوع مستطیل مشترک. ضخامت خط، رنگ، پر کردن و الگوی خطچین برای هر شکل از طریق 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");
}
رسم دایرهها و بیضیها
Circle و Ellipse هر کدام هندسهٔ خود را با ویژگیهای عددی ساده توصیف میکنند نه با یک نقطه یا نوع مستطیل مشترک. Circle متدهای PosX(), PosY() و Radius() را در دسترس میگذارد؛ Ellipse متدهای Left(), Bottom(), Width() و Height() را در دسترس میگذارد که یک جعبهٔ محاطی را به همان شیوهای که Graph برای موقعیتیابی استفاده میکند توصیف میکند. هر دو CheckBounds(containerWidth, containerHeight) را که از Shape به ارث بردهاند بازنویسی میکنند و گزارش میدهند آیا هندسهٔ فعلی شکل درون محفظهای با اندازهٔ دادهشده جا میگیرد یا خیر.
#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 هندسهٔ خود را متفاوت از Circle و Ellipse ذخیره میکند: PositionArray() یک std::vector<float> صاف از مختصات را برمیگرداند — یک جفت x، y برای هر نقطهای که خط از آن عبور میکند — نه یک مجموعهٔ ویژگیهای نامگذاریشده. یک بخش دو نقطهای با چهار مقدار تنظیم میشود: x شروع، y شروع، x پایان، y پایان. مشابه سایر شکلها، Line متد CheckBounds(containerWidth, containerHeight) را از 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);
استایلگذاری اشکال با GraphInfo و BorderInfo
خط و پر هر شکل از یک GraphInfo میآید که از طریق Shape.GraphInfo() / GraphInfo(value) خوانده و تنظیم میشود. GraphInfo عرض خط (LineWidth())، رنگ خط و پر (Color()، FillColor())، الگوی خط تیره (DashArray()، DashPhase())، پرچم خط دوگانه (IsDoubled())، و ویژگیهای کجکردن/مقیاس/چرخش (SkewAngleX()/SkewAngleY()، ScalingRateX()/ScalingRateY()، RotationAngle()) را در اختیار میگذارد. محفظه Graph همچنین یک BorderInfo دارد که از طریق Border() تنظیم میشود و برای هر لبه یک GraphInfo نگه میدارد — Left()، 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 — نه اینکه بهطور خاص به کلاسهای گرافیک برداری مرتبط باشند. Graph، Shape، Circle، Ellipse و Line مستقیماً در محتوای صفحه PDF رسم میشوند و به هیچ قالب فایل خاصی وابسته نیستند.
منبع باز و مجوزدهی
Aspose.PDF FOSS برای C++ تحت مجوز MIT توزیع میشود، و کد منبع کامل در github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp موجود است. این مجوز استفاده تجاری، اصلاح و توزیع مجدد را بدون نیاز به توافق جداگانه اجازه میدهد.