Як працювати з документами в .NET

Як працювати з документами в .NET

Цей посібник показує, як працювати з об’єктною моделлю Document у Aspose.Words FOSS для .NET: створення порожнього документа, безпечне завантаження існуючого, обход структури розділів/тіла, об’єднання документів та застосування обмеження редагування. Aspose.Words FOSS для .NET доступний через NuGet або шляхом збірки з вихідних кодів.

Покроковий посібник

Крок 1: Отримати бібліотеку

Клонувати репозиторій і збирати Aspose.Words.sln у конфігурації Release, потім додайте посилання на проект до Aspose.Words.csproj з вашого власного .NET проекту. Повні команди клонування та збірки знаходяться в Посібнику з інсталяції. Після того як посилання буде додано, додайте using Aspose.Words; на початку будь-якого файлу, який працює з документами.


Крок 2: Створити або завантажити документ

Викличте new Document() для створення порожнього документа, або передайте шлях до файлу чи Stream конструктору Document(fileName)/Document(stream), щоб відкрити існуючий. Перевантаження, яке приймає аргумент LoadOptions, дозволяє вказати пароль для зашифрованого файлу. Перед завантаженням файлу, формат якого ви ще не довіряєте, викличте FileFormatUtil.DetectFileFormat(fileName) — він повертає FileFormatInfo, що повідомляє про виявлений LoadFormat та чи файл IsEncrypted, HasDigitalSignature чи HasMacros, тож ви можете відхилити неочікуваний вхід до того, як Document спробує його розпарсити.


Крок 3: Створюйте вміст за допомогою DocumentBuilder

DocumentBuilder обгортає Document курсором, яким ви переміщуєтеся по дереву під час вставки вмісту. Write(text) і Writeln(text) вставляють текст у курсор, а InsertParagraph() починає новий абзац. Форматування, встановлене у властивостях Font, ParagraphFormat, ListFormat і PageSetup будівельника, застосовується до всього, що ви пишете далі. Перемістіть курсор за допомогою MoveToDocumentStart(), MoveToDocumentEnd(), MoveToSection(sectionIndex), MoveToBookmark(bookmarkName) або MoveToParagraph(paragraphIndex, characterIndex), і прочитайте CurrentNode / CurrentParagraph / CurrentSection, щоб підтвердити, де розташований будівельник.


Крок 4: Перевірте структуру розділу та тіла

Document відкриває SectionCollection через Document.Sections (плюс FirstSection / LastSection). Кожен Section має рівно один Body, основний вміст якого доступний через Body.Paragraphs (це ParagraphCollection) і Body.Tables. Щоб читати або шукати текст без ручного проходу по вузлах, використовуйте Range, доступний у Document, Section, Paragraph та інших вузлах — Range.Text повертає його простий текст, а Range.Replace(pattern, replacement) виконує пошук-заміну, обмежену лише цим діапазоном.


Крок 5: Об’єднайте два документи

Щоб скопіювати весь документ, викличте Document.Clone(). Щоб перенести конкретний вміст з одного екземпляра Document в інший, викличте ImportNode(srcNode, isImportChildren) у документі-приймачі, або викличте Document.AppendDocument(srcDoc, importFormatMode), щоб додати кожен розділ вихідного документа в кінець поточного. DocumentBuilder.InsertDocument(srcDoc, importFormatMode) робить те ж саме, але вставляє в курсор будівельника, а не в кінець. У всіх трьох випадках свідомо вибирайте значення ImportFormatMode — KeepSourceFormatting, UseDestinationStyles або KeepDifferentStyles — оскільки воно визначає, чиї стилі документа переважають, коли вони конфліктують.


Крок 6: Застосуйте обмеження редагування

Викличте Document.Protect(type, password) зі значенням ProtectionType — ReadOnly, AllowOnlyComments, AllowOnlyRevisions або AllowOnlyFormFields — щоб обмежити, які правки Word приймає для документа. Unprotect() (з паролем або без нього) знімає обмеження. Це впливає лише на редагування в Word; файл не шифрується. Щоб вимагати пароль лише для відкриття файлу, встановіть OoxmlSaveOptions.Password під час збереження.

Типові проблеми та виправлення

Document(fileName) викидає виключення для файлу, який відкривається без проблем у Word. Формат файлу не підтримується завантажувачами цієї редакції. Викличте FileFormatUtil.DetectFileFormat(fileName) спочатку і перевірте повернене LoadFormat перед спробою завантажити.

Вміст, скопійований між документами, набирає неправильні шрифти або стилі. The ImportFormatMode передано до AppendDocument or InsertDocument не відповідає тому, що ви очікували. Передайте KeepSourceFormatting or UseDestinationStyles явно, а не покладаючись на типове значення.

Unprotect() здається, не має жодного ефекту. Або документ не був захищений паролем (виклич Unprotect() без аргументів), або наданий пароль не відповідає тому, який Protect() був викликаний з ним.

Форматування, застосоване через DocumentBuilder не відображається там, де очікувалося. Форматування рівня Builder (Font, ParagraphFormat) застосовується лише до контенту, написаного after коли воно встановлено. Перемістіть курсор і встановіть форматування перед викликом Write/Writeln, не після.

Поширені запитання

Як створити новий порожній документ Word?

Викличте new Document(). Обгорніть його DocumentBuilder, щоб негайно почати вставляти вміст.

У чому різниця між Document.Clone() та ImportNode?

Clone() копіює весь документ у новий екземпляр Document. ImportNode(srcNode, isImportChildren) переносить один вузол — і за потреби його дочірні елементи — з дерева одного документа в інший, що використовується для комбінування конкретного вмісту, а не цілого документа.

Як безпечно перевірити формат файлу перед його завантаженням?

Викличте FileFormatUtil.DetectFileFormat(fileName) (або перевантаження Stream) і перевірте властивості LoadFormat, IsEncrypted, HasDigitalSignature та HasMacros поверненого FileFormatInfo перед передачею файлу до Document.

Як прочитати лише абзаци всередині тіла документа?

Використовуйте колекцію Body.Paragraphs у Body розділу, або Body.GetChildNodes(nodeType, isDeep) для інших типів вузлів.

Чи шифрує Document.Protect збережений файл?

Ні — це обмеження редагування, яке Word застосовує, коли файл відкривається. Щоб вимагати пароль для відкриття самого файлу, встановіть OoxmlSaveOptions.Password під час виклику Document.Save.

Дивіться також

 Українська