المقدمة
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. تسمح الرخصة بالاستخدام التجاري، والتعديل، وإعادة التوزيع دون حاجة إلى اتفاقية منفصلة.