كيفية العمل مع إدارة المستندات الأساسية في .NET
توفر Aspose.PDF FOSS for .NET الفئة Document كنقطة الدخول المركزية لجميع عمليات PDF. قم بتثبيت الحزمة باستخدام dotnet add package Aspose.Pdf.Foss --version 0.1.0-alpha واستخدم Document.Create()، Document.Open()، Document.Save()، وDocument.Merge() لإدارة مستندات PDF برمجيًا على .NET 8+.
دليل خطوة بخطوة
الخطوة 1: تثبيت الحزمة
أضف Aspose.PDF FOSS إلى مشروعك:
dotnet add package Aspose.Pdf.Foss --version 0.1.0-alphaتحقق من المرجع في .csproj الخاص بك:
<PackageReference Include="Aspose.Pdf.Foss" Version="0.1.0-alpha" />الخطوة 2: استيراد الفئات المطلوبة
أضف توجيهات using اللازمة في أعلى ملفك:
using Aspose.Pdf;
using Aspose.Pdf.Annotations;الخطوة 3: إنشاء مستند PDF جديد
استخدم Document.Create() لإنشاء مستند فارغ في الذاكرة:
using var doc = Document.Create();
// The document has no pages yet; add pages before saving
using var ms = new MemoryStream();
doc.Save(ms);
byte[] pdfBytes = ms.ToArray();الخطوة 4: فتح ملف PDF موجود
Document.Open يقبل مصفوفة بايت، مسار ملف، أو تدفق. استخدم using لضمان تحرير المستند بعد الاستخدام:
// From a file path
using var doc = Document.Open("input.pdf");
var page = doc.Pages[1];
// From a byte array loaded elsewhere
byte[] data = File.ReadAllBytes("input.pdf");
using var doc2 = Document.Open(data);الخطوة 5: الوصول إلى الصفحات
خاصية Document.Pages تُعيد PageCollection. الصفحات مُرقَّمة بدءًا من 1:
using var doc = Document.Open("input.pdf");
int pageCount = doc.Pages.Count;
var firstPage = doc.Pages[1];
double width = firstPage.Width;
double height = firstPage.Height;الخطوة 6: حفظ مستند
احفظ إلى تدفق باستخدام Document.Save()، أو سَلّس إلى مصفوفة بايت باستخدام Document.ToArray():
using var doc = Document.Open("input.pdf");
var page = doc.Pages[1];
var action = PdfAction.CreateUri("https://aspose.com/test");
page.Annotations.AddLinkAnnotation(new Rectangle(50, 700, 200, 720), action);
using var ms = new MemoryStream();
doc.Save(ms);
ms.Position = 0;
byte[] savedBytes = ms.ToArray();الخطوة 7: دمج مستندات متعددة
استخدم Document.Merge() لدمج عدة مثيلات Document في واحدة:
using var doc1 = Document.Open("part1.pdf");
using var doc2 = Document.Open("part2.pdf");
var merged = Document.Merge(new[] { doc1, doc2 });
merged.Save("combined.pdf");Document.MergeDocuments() هو نسخة متماثلة من التحميل الزائد تقبل مصفوفات مسارات الملفات مباشرةً.
المشكلات الشائعة والحلول
Pages collection is empty after Document.Create()Document.Create() تُعيد مستندًا بدون صفحات. يجب عليك إضافة صفحة صراحةً قبل الوصول إلى doc.Pages[1]. محاولة الوصول إلى فهرس غير موجود تُثير IndexOutOfRangeException.
InvalidOperationException عند استدعاء Document.Open على ملف تالف
إذا كان مصفوفة بايتات PDF أو الملف مقطوعًا أو غير صالح، سيُطلق Document.Open. تحقق من أن مصفوفة البايتات المصدر هي PDF كامل (يبدأ بـ %PDF-) قبل تمريره إلى Open.
المستند غير مُحرَّر — تسرب الذاكرة في سيناريوهات عالية الإنتاجية
دائمًا قم بلف استدعاءات Document.Open وDocument.Create داخل بيان using. الفئة Document تُنفّذ IDisposable؛ عدم تحريرها يؤدي إلى بقاء الدفق الأساسي وجدول الإحالات المتقاطع في الذاكرة.
Save(ms) بعد عدم إعادة تعيين ms.Position
عند القراءة مرة أخرى من MemoryStream بعد doc.Save(ms)، أعد تعيين ms.Position = 0 قبل القراءة. يؤدي إغفال هذه الخطوة إلى مواجهة القارئ ملف PDF فارغ أو جزئي.
الدمج ينتج مستندًا بعدد صفحات غير متوقع
تأكد من تحميل جميع المستندات المصدرية بالكامل قبل تمريرها إلى Document.Merge. قد يؤدي التخلص من مستند مصدر قبل استدعاء الدمج إلى شجرة صفحات غير مكتملة.
الأسئلة المتكررة
هل يمكنني فتح ملف PDF محمي بكلمة مرور؟
نعم. استخدم Document.Open(data, password) أو Document.Open(path, password) لتوفير كلمة مرور المالك أو المستخدم كالحجة الثانية.
هل يختلف Document.ToArray() عن الحفظ إلى MemoryStream؟
Document.ToArray() هي طريقة ملائمة تقوم داخليًا بحفظ إلى MemoryStream وتعيد مصفوفة البايت الناتجة. كلا المسارين ينتجان مخرجات PDF متطابقة.
ما هو نوع خاصية Pages؟
Document.Pages هو من النوع PageCollection. إنه مرقم من 1؛ doc.Pages[1] هي الصفحة الأولى.
هل يمكنني حفظ المستند عدة مرات؟
نعم. يمكنك استدعاء doc.Save() أو doc.ToArray() عدة مرات على نفس نسخة المستند. كل استدعاء يقوم بتسلسل الحالة الحالية للمستند.
كيف يمكنني التحقق مما إذا كان المستند مرخصًا؟
Document.IsLicensed تُرجع bool تُشير إلى حالة الترخيص الداخلية. بالنسبة لـ Aspose.PDF FOSS هذا مجرد معلومات — لا يلزم التفعيل.