إدارة مستندات PDF الأساسية تغطي العمليات التي تظهر في كل سير عمل PDF تقريبًا: فتح أو إنشاء مستند، الوصول إلى الصفحات ومحتواها، قراءة وكتابة التعليقات التوضيحية، استخراج النص، والعمل مع الإجراءات التفاعلية. Aspose.PDF FOSS for .NET يوفر واجهة برمجة تطبيقات .NET 8+ تتعامل مع جميع هذه المهام من خلال نموذج كائنات متسق يركز على نوعي Document وPage.
دورة حياة المستند: إنشاء، فتح، حفظ
يبدأ كل سير عمل إما بإنشاء مستند جديد أو بتحميل مستند موجود. Document.Create() تُعيد كائن Document جديد وفارغ. Document.Open(data) تقبل byte[] أو Stream وتقوم بتحليل بنية PDF:
using var doc = Document.Create();
doc.Pages.Add();
var page = doc.Pages[1];
var action = PdfAction.CreateUri("https://aspose.com");
page.Annotations.AddLinkAnnotation(new Rectangle(50, 700, 200, 720), action);
using var ms = new MemoryStream();
doc.Save(ms);
ms.Position = 0;
using var doc2 = Document.Open(ms.ToArray());
var annot = (LinkAnnotation)doc2.Pages[1].Annotations[1];
Console.WriteLine(annot.Uri); // https://aspose.com
يفتح هذا المقتطف ملف PDF بسيط، يضيف تعليقا رابطًا إلى الصفحة 1، يحفظ إلى MemoryStream، ويتحقق من أن التعليق محفوظ بعد إعادة التحميل. التحميل الزائد Document.Save(Stream) يكتب الهيكل المحدث بالكامل؛ Document.ToArray() يُعيد البايتات مباشرة.
الوصول إلى الصفحة ومجموعة الصفحات
يتم الوصول إلى الصفحات عبر الخاصية Pages باستخدام فهرس عدد صحيح يبدأ من 1: doc.Pages[1] تُعيد الصفحة الأولى، doc.Pages[doc.Pages.Count] تُعيد الأخيرة. كل كائن Page يُظهر:
Annotations— الـAnnotationCollectionلتلك الصفحة، يدعمAddLinkAnnotationوتعداد التعليقات التوضيحية الموجودة حسب النوع.- مشغلات تدفق المحتوى — وصول منخفض المستوى إلى أوامر رسم الصفحة عبر مجموعة
Operators.
المؤشر القائم على الواحد ثابت عبر جميع أجزاء الـ API: عمليات البحث عن التعليقات التوضيحية، مؤشرات صفحات وجهة إجراء GoTo، وجميع مراجع الصفحات الأخرى تستخدم نفس الاتفاقية.
استخراج النص باستخدام TextFragmentAbsorber
TextFragmentAbsorber هو نقطة الدخول القياسية لقراءة النص من صفحة PDF. استخدم المُنشئ بدون معلمات لاستخراج جميع القطع، أو مرّر عبارة بحث لتصفية النص المتطابق:
using var doc = Document.Open("path/to/document.pdf");
var absorber = new TextFragmentAbsorber("Hello");
absorber.Visit(doc.Pages[1]);
foreach (var fragment in absorber.TextFragments)
{
Console.WriteLine($"Found: {fragment.Text} size={fragment.FontSize}");
}
استدعِ absorber.Visit(page) لمعالجة صفحة واحدة. تحتوي مجموعة TextFragments الناتجة على كائنات TextFragment؛ كل منها يوفّر Text (محتوى السلسلة) وFontSize (حجم النقطة المعروض). التحميل الزائد الثاني TextFragmentAbsorber(searchPhrase, isRegex) يقبل علم التعبير النمطي للبحث القائم على النمط.
إجراءات تفاعلية
PdfAction هي فئة المصنع لجميع أنواع إجراءات PDF القياسية. تغطي أربع طرق مصنع ثابتة الحالات الأكثر شيوعًا:
PdfAction.CreateUri(uri)— يفتح عنوان URL في متصفح المستخدم.PdfAction.CreateGoTo(pageIndex, fitType)— ينتقل إلى صفحة محددة داخل المستند.PdfAction.CreateJavaScript(script)— ينفّذ سلسلة JavaScript في عارض PDF.PdfAction.CreateLaunch(filePath)— يطلق ملفًا خارجيًا أو تطبيقًا.
يتم إرفاق الإجراءات بالصفحات من خلال التعليقات التوضيحية. AnnotationCollection.AddLinkAnnotation(rectangle, action) يضع LinkAnnotation فوق المنطقة المستطيلة المحددة مع الإجراء المرفق:
using var doc = Document.Create();
doc.Pages.Add();
var page = doc.Pages[1];
var action = PdfAction.CreateUri("https://example.org");
var annot = page.Annotations.AddLinkAnnotation(new Rectangle(10, 10, 100, 30), action);
Console.WriteLine(page.Annotations.Count); // 1
Console.WriteLine(annot.AnnotationType); // Link
AnnotationType.Link يؤكد أن التعليق التوضيحي تم إنشاؤه كنوع رابط. يأخذ المُنشئ Rectangle إحداثيات اليسار، الأسفل، اليمين، والأعلى بوحدات مساحة المستخدم في PDF.
بيانات تعريف المستند والترخيص
تُعرّف فئة Document IsLicensed (تُعيد true في بناء FOSS)، JavaScript (JavaScriptCollection لسكربتات مستوى المستند)، وDocumentActions لأحداث دورة الحياة مثل BeforeClosing وBeforeSaving.
يتم تثبيت حزمة FOSS عبر NuGet:
dotnet add package Aspose.Pdf.Foss --version 0.1.0-alpha
لا يلزم مفتاح ترخيص. تسمح رخصة MIT بالاستخدام في التطبيقات التجارية دون متطلبات إسناد تتجاوز الحفاظ على إشعار الترخيص.