کار با اسناد

کار با اسناد

Aspose.Words FOSS برای .NET هر فایل Word را به‌عنوان یک مدل شیء در حافظه که ریشه آن کلاس Document است، نمایش می‌دهد، به‌طوری که DocumentBuilder یک API سطح بالا و مبتنی بر مکان‌نما برای نوشتن محتوا فراهم می‌کند. این راهنما شامل ایجاد و بارگذاری اسناد، نوشتن با DocumentBuilder، ساختار بخش/بدنه، پیمایش درخت گره‌ها، ترکیب اسناد و حفاظت از آن‌ها است.


ایجاد و بارگذاری اسناد

یک سند خالی را با new Document() ایجاد کنید، یا با ارسال مسیر یا Stream به سازندهٔ Document(fileName) یا Document(stream) یک فایل موجود را باز کنید. نسخه‌های بارگذاری‌شده که آرگومان LoadOptions را می‌پذیرند، به شما امکان کنترل رفتار بارگذاری را می‌دهند، مانند ارائهٔ رمز عبور برای یک فایل رمزگذاری‌شده.

قبل از بارگذاری فایلی از منبع ناشناخته یا نامطمئن، FileFormatUtil.DetectFileFormat(fileName) (یا نسخهٔ بارگذاری Stream) یک FileFormatInfo برمی‌گرداند که LoadFormat شناسایی‌شده را توصیف می‌کند و اینکه آیا فایل IsEncrypted، HasDigitalSignature یا HasMacros است.


نوشتن با DocumentBuilder

DocumentBuilder یک Document را می‌پیچاند و یک مکان‌نما را نمایان می‌کند که هنگام درج محتوا، آن را در سند جابه‌جا می‌کنید. Write(text) و Writeln(text) متن را در مکان‌نما وارد می‌کنند؛ InsertParagraph() یک پاراگراف جدید را آغاز می‌کند. ویژگی‌های فرمت‌بندی در سازنده — Font، ParagraphFormat، ListFormat، PageSetup — بر روی هر چه بعداً نوشته می‌شود اعمال می‌شوند.

موقعیت‌نمای (cursor) را با MoveToDocumentStart()، MoveToDocumentEnd()، MoveToSection(sectionIndex)، MoveToBookmark(bookmarkName) یا MoveToParagraph(paragraphIndex, characterIndex) حرکت دهید. ویژگی‌های CurrentNode، CurrentParagraph و CurrentSection سازنده موقعیت فعلی آن را در درخت گزارش می‌دهند.


ساختار سند: بخش‌ها و بدنه

یک Document شامل یک SectionCollection (Document.Sections، به‌اضافه FirstSection / LastSection) است؛ هر Section یک Body دارد، یک مجموعه اختیاری سرصفحه/پاصفحه، و PageSetup خود را دارد. Section.AppendContent(sourceSection) و PrependContent(sourceSection) محتوا را بین بخش‌ها کپی می‌کنند، و ClearContent() یک بخش را بدون حذف آن از سند بازنشانی می‌کند.

در داخل یک Body، محتوا از طریق Body.Paragraphs (یک ParagraphCollection) و Body.Tables در دسترس است. یک Range — که از Document، Section، Paragraph و گره‌های دیگر قابل دسترسی است — نمایانگر یک ناحیه پیوسته از درخت است؛ Range.Text متن ساده آن را می‌خواند و Range.Replace(pattern, replacement) جستجو و جایگزینی را فقط بر روی آن ناحیه انجام می‌دهد.


پیمایش درخت گره‌ها با DocumentVisitor

هر بخش از یک سند — بخش‌ها، پاراگراف‌ها، run‌ها، جدول‌ها، فیلدها، شکل‌ها، نظرات، پانوشت‌ها — یک Node در یک درخت ترکیبی است که ریشه‌اش Document است. برای پردازش هر گره‌ای از نوع مشخص بدون نیاز به بازگشت دستی، کلاس فرزند از DocumentVisitor انتزاعی بسازید و فراخوانی‌های Visit*Start / Visit*End مورد نیاز خود را، مانند VisitParagraphStart(paragraph) یا VisitRun(run)، بازنویسی کنید، سپس document.Accept(visitor) را فراخوانی کنید. هر فراخوانی می‌تواند یک VisitorAction (Continue، SkipThisNode یا Stop) برگرداند تا نحوهٔ پیشرفت پیمایش را کنترل کند.


کلون‌سازی، وارد کردن و افزودن محتوا

Document.Clone() یک نسخهٔ عمیق از تمام سند تولید می‌کند. برای جابجایی محتوا بین دو نمونهٔ متفاوت Document، ImportNode(srcNode, isImportChildren) را روی سند مقصد فراخوانی کنید تا گره‌ای از درخت خارجی وارد شود، یا Document.AppendDocument(srcDoc, importFormatMode) را فراخوانی کنید تا بخش‌های یک سند را با استفاده از یک ImportFormatMode انتخابی — KeepSourceFormatting، UseDestinationStyles یا KeepDifferentStyles — به سند دیگری الحاق کنید. DocumentBuilder.InsertDocument(srcDoc, importFormatMode) محتویات سند منبع را در موقعیت‌نمای سازنده به‌جای انتهای مقصد وارد می‌کند.


محافظت از اسناد

Document.Protect(type, password) ویرایش را بر اساس مقدار ProtectionType محدود می‌کند — ReadOnly، AllowOnlyComments، AllowOnlyRevisions، AllowOnlyFormFields یا NoProtection برای حذف حفاظت. Unprotect() (با یا بدون رمز عبور) آن را معکوس می‌کند. این یک محدودیت ویرایشی است که توسط Word اعمال می‌شود و جدا از رمزنگاری رمز عبوری OOXML که OoxmlSaveOptions.Password هنگام ذخیره‌سازی فایل اعمال می‌کند.


نکات و بهترین شیوه‌ها

  • برای ساخت محتوای جدید، از DocumentBuilder استفاده کنید؛ وقتی به کنترل دقیق بر روی درخت موجود نیاز دارید، به دست‌کاری مستقیم گره‌ها (AppendChild، InsertAfter، Clone) روی آورید.
  • قبل از بارگذاری فایلی از منبع نامطمئن یا کاربر، FileFormatUtil.DetectFileFormat را فراخوانی کنید تا بتوانید LoadFormat را بررسی کرده و ورودی‌های پشتیبانی‌نشده یا رمزنگاری‌شده را زودتر رد کنید.
  • هنگام ترکیب اسناد با AppendDocument یا InsertDocument، ImportFormatMode را به‌صورت عمدی انتخاب کنید — KeepSourceFormatting ظاهر منبع را حفظ می‌کند، UseDestinationStyles سبک مجموعه سند هدف را منطبق می‌سازد.
  • به جای پیمایش دستی بازگشتی درخت، وقتی نیاز به پردازش مستمر تمام نمونه‌های یک نوع گره دارید، از زیرکلاس DocumentVisitor استفاده کنید.
  • Document.Protect یک محدودیت ویرایشی است، نه رمزنگاری — اگر فایل ذخیره‌شده نیاز به رمز عبور برای باز شدن داشته باشد، آن را با OoxmlSaveOptions.Password ترکیب کنید.

مشکلات رایج

مشکلدلیلراه‌حل
Document(fileName) برای فایلی که در Word به‌درستی باز می‌شود استثنا می‌اندازدقالب فایل یکی از قالب‌هایی که این نسخه برای بارگذاری پشتیبانی می‌کند نیستابتدا FileFormatUtil.DetectFileFormat را فراخوانی کنید و قبل از بارگذاری، مقدار بازگشتی LoadFormat را بررسی کنید
محتوای اضافه‌شده قلم‌ها یا سبک‌های نادرست را برمی‌گیردImportFormatMode عدم تطابق بین مجموعه‌های سبک منبع و مقصدبه‌جای تکیه بر مقدار پیش‌فرض، KeepSourceFormatting یا UseDestinationStyles را به‌صورت صریح پاس دهید
گردش DocumentVisitor زود متوقف می‌شود یا محتوا را نادیده می‌گیردیک بازنویسی Visit*Start / Visit*End به‌صورت ناخواسته SkipThisNode یا Stop را برمی‌گردانداز هر بازنویسی، VisitorAction.Continue را برگردانید مگر اینکه به‌طور خاص قصد عبور یا توقف داشته باشید
Unprotect() تأثیری نداردسند با رمز عبور محافظت نشده بود، یا رمز عبور نادرستی ارائه شداگر Protect بدون رمز عبور فراخوانی شده باشد، Unprotect() را بدون آرگومان صدا بزنید؛ در غیر این صورت، رمز عبور منطبق را پاس دهید

FAQ

تفاوت Document.Clone() و ImportNode چیست؟

Clone() یک سند کامل را به یک نمونه جدید از Document کپی می‌کند. ImportNode(srcNode, isImportChildren) یک گرهٔ واحد (به‌طور اختیاری همراه فرزندانش) را از درخت یک سند به سند دیگری می‌آورد، که هنگام ترکیب محتوای خاص به‌جای سندهای کامل از آن استفاده می‌کنید.

Document(fileName) می‌تواند کدام فرمت‌های فایل را بارگذاری کند؟

Document(fileName) فرمت‌های DOCX، DOCM، DOTX، DOTM، Flat OPC (به‌همراه انواع ماکرو فعال و قالب آن)، Markdown و متن ساده را بارگذاری می‌کند. فرمت‌های قدیمی پردازش کلمه و وب در بارگذارهای این نسخه گنجانده نشده‌اند.

چگونه می‌توانم مکان فعلی یک DocumentBuilder را پیدا کنم؟

در نمونهٔ سازنده، CurrentNode، CurrentParagraph یا CurrentSection را بخوانید.

آیا Document.Protect فایل ذخیره‌شده را رمزنگاری می‌کند؟

نه — این یک محدودیت ویرایشی است که توسط Word هنگام باز کردن فایل اعمال می‌شود. برای اینکه فقط برای باز کردن فایل نیاز به رمز عبور باشد، هنگام ذخیره‌سازی OoxmlSaveOptions.Password را تنظیم کنید.

چگونه فقط پاراگراف‌های موجود در بدنه سند را بخوانم؟

از مجموعه Body.Paragraphs استفاده کنید، یا برای انواع دیگر گره‌ها Body.GetChildNodes(nodeType, isDeep) را به کار ببرید.


API Reference خلاصه

کلاس/متدتوضیح
Documentریشهٔ مدل شیء سند؛ سازنده‌ها از یک فایل یا جریان بارگذاری می‌کنند یا یک سند خالی ایجاد می‌نمایند.
Document.Saveسند را در یک فایل، جریان، یا پاسخ HTTP به فرمت انتخابی می‌نویسد.
Document.Clone()یک کپی عمیق از کل سند تولید می‌کند.
Document.Protect(type, password) / Unprotect()یک محدودیت ویرایشی را اعمال یا حذف می‌کند.
Document.AppendDocument(srcDoc, importFormatMode)بخش‌های سند دیگری را به این سند اضافه می‌کند.
DocumentBuilderمبنی بر مکان‌نما API برای نوشتن متن و وارد کردن محتوا به یک سند.
DocumentBuilder.InsertDocument(srcDoc, importFormatMode)محتوای سند منبع را در مکان‌نما وارد می‌کند.
Section / SectionCollectionیک بخش منفرد از سند، و مجموعهٔ همه بخش‌ها.
Bodyمحفظه‌ای برای متن اصلی (پاراگراف‌ها و جداول) یک بخش.
Rangeیک ناحیهٔ پیوسته از درخت سند؛ از Text و Replace پشتیبانی می‌کند.
DocumentVisitorکلاس پایهٔ انتزاعی برای پیمایش هر گره در درخت سند.
ProtectionTypeEnum محدودیت‌های ویرایشی در سطح سند.
FileFormatUtil.DetectFileFormatفرمت یک فایل یا جریان را پیش از بارگذاری شناسایی می‌کند.

همچنین ببینید:

 فارسی