مدیریت اسناد PDF اصلی شامل عملیات‌هایی است که در تقریباً هر جریان کاری PDF ظاهر می‌شوند: باز کردن یا ایجاد یک سند، دسترسی به صفحات و محتوای آن‌ها، خواندن و نوشتن حاشیه‌نویسی‌ها، استخراج متن، و کار با اقدامات تعاملی. Aspose.PDF FOSS for .NET یک API .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 با استفاده از یک شاخص عدد صحیح ۱‑پایه دسترسی پیدا می‌کنند: doc.Pages[1] صفحهٔ اول را برمی‌گرداند، doc.Pages[doc.Pages.Count] آخرین صفحه را برمی‌گرداند. هر شیء Page شامل موارد زیر است:

  • AnnotationsAnnotationCollection برای آن صفحه، با پشتیبانی از 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 را در دسترس می‌گذارد (در ساخت FOSS true را برمی‌گرداند)، JavaScript (یک JavaScriptCollection برای اسکریپت‌های سطح سند) و DocumentActions برای رویدادهای چرخه حیات مانند BeforeClosing و BeforeSaving.

پکیج FOSS از طریق NuGet نصب می‌شود:

dotnet add package Aspose.Pdf.Foss --version 0.1.0-alpha

کلید مجوز لازم نیست. مجوز MIT اجازه استفاده در برنامه‌های تجاری را بدون نیاز به ذکر منبع، به جز حفظ اطلاعیه مجوز، می‌دهد.


شروع کار

منابع مرتبط