Импорт узлов с помощью NodeImporter
Импорт узлов с помощью NodeImporter
Это руководство показывает, как перемещать контент между двумя разными Document экземплярами в Aspose.Words FOSS для .NET с использованием выделенного NodeImporter класса и мелкозернистого ImportFormatOptions, для сценариев, когда необходимо эффективно импортировать множество узлов или управлять поведением импорта за пределами базового ImportFormatMode выбора. Для более простых Document.ImportNode, Document.AppendDocument, и DocumentBuilder.InsertDocument удобных методов, см. Работа с документами руководство.
NodeImporter: Повторные импорты без повторной настройки
NodeImporter разработан для повторного импорта узлов из одного документа в другой, избегая затрат на настройку при каждом вызове одноразового импорта. Создайте один с помощью new NodeImporter(srcDoc, dstDoc, importFormatMode) — или перегрузкой new NodeImporter(srcDoc, dstDoc, importFormatMode, importFormatOptions) для более тонкого контроля — один раз, а затем вызывайте ImportNode(srcNode, isImportChildren) на том же экземпляре для каждого узла, который нужно перенести. Повторное использование одного экземпляра NodeImporter в многочисленных вызовах избавляет от затрат на настройку, которые каждый раз накладывает удобный импорт при вызове.
Тонкая настройка импорта с ImportFormatOptions
ImportFormatOptions дополняет базовый выбор ImportFormatMode (UseDestinationStyles, KeepSourceFormatting, KeepDifferentStyles) более тонкими переключателями: SmartStyleBehavior (bool) управляет тем, как импортируются стили с одинаковыми именами в источнике и назначении. KeepSourceNumbering (bool) управляет тем, как импортируется нумерация при конфликте между источником и назначением. IgnoreTextBoxes и IgnoreHeaderFooter (bool) подавляют форматирование источника для содержимого текстовых полей и колонтитулов, специально когда действует KeepSourceFormatting. MergePastedLists (bool) объединяет вставленные списки с окружающими списками вместо их разделения. ForceCopyStyles (bool) копирует конфликтующие стили вместо повторного использования версии назначения, в режиме KeepSourceFormatting. AdjustSentenceAndWordSpacing (bool) автоматически регулирует интервалы. AppendDocumentWithNewPage (bool) принуждает тип первой импортированной секции быть NewPage.
Советы и лучшие практики
- Создайте один экземпляр
NodeImporterи переиспользуйте его в цикле вызововImportNodeпри импорте множества узлов — создание нового импортера для каждого узла повторно выполняет настройку без необходимости. - Передайте экземпляр
ImportFormatOptionsв перегруженный конструкторNodeImporter, когда простого выбораImportFormatModeнедостаточно точно — например, чтобы сохранить нумерацию исходного списка с помощьюKeepSourceNumbering, одновременно используяKeepSourceFormattingв целом. - Установите
IgnoreTextBoxesилиIgnoreHeaderFooter, когдаKeepSourceFormattingподтягивает больше стилей источника, чем требуется для указанных типов контента. NodeImporter.ImportNode(srcNode, isImportChildren)зеркально повторяет сигнатуру и поведение вызова импорта на уровне документа; различие заключается в эффективности переиспользования, а не в семантике импорта.
Распространённые проблемы
| Проблема | Причина | Исправление |
|---|---|---|
| Повторные импорты большого количества узлов выполняются медленно | Вызов удобного импорта используется для каждого узла вместо одного переиспользуемого NodeImporter | Создайте один NodeImporter и вызывайте ImportNode на нём для каждого узла |
| Нумерация списка неожиданно сбрасывается после импорта | ImportFormatOptions.KeepSourceNumbering не был установлен | Создайте NodeImporter с помощью экземпляра ImportFormatOptions, который при необходимости задаёт KeepSourceNumbering |
| Содержимое текстового поля или верхнего/нижнего колонтитула наследует нежелательное форматирование источника | Режим KeepSourceFormatting по умолчанию широко применяет стили источника | Установите IgnoreTextBoxes или IgnoreHeaderFooter в ImportFormatOptions, передаваемый в NodeImporter |
FAQ
Когда следует использовать NodeImporter вместо отдельного вызова импорта?
При импорте множества узлов в цикле — создайте один NodeImporter заранее и вызывайте ImportNode многократно, вместо того чтобы платить за настройку при каждом вызове.
Что добавляет ImportFormatOptions по сравнению с ImportFormatMode?
Более тонкие переключатели, такие как SmartStyleBehavior, KeepSourceNumbering, IgnoreTextBoxes, IgnoreHeaderFooter, MergePastedLists, ForceCopyStyles, AdjustSentenceAndWordSpacing и AppendDocumentWithNewPage, наложенные поверх базового выбора ImportFormatMode.
Отличается ли NodeImporter.ImportNode от импорта на уровне документа?
Нет — оба принимают исходный узел и флаг isImportChildren и импортируют его в целевой документ; NodeImporter существует, чтобы настройка выполнялась один раз и переиспользовалась во множестве вызовов.
Как сохранить нумерацию списка исходного документа неизменной при импорте?
Создайте NodeImporter с помощью ImportFormatOptions, где KeepSourceNumbering равно true.
API Reference Сводка
| Класс/Метод | Описание: |
|---|---|
NodeImporter | Выполняет повторный импорт узлов из одного документа в другой, переиспользуя настройку между вызовами |
NodeImporter(srcDoc, dstDoc, importFormatMode) | Конструктор для базовых импортов в режиме только формата импорта |
NodeImporter(srcDoc, dstDoc, importFormatMode, importFormatOptions) | Конструктор, принимающий тонко настроенный ImportFormatOptions |
NodeImporter.ImportNode(srcNode, isImportChildren) | Импортирует узел из исходного документа в целевой документ |
ImportFormatOptions | Тонко настроенные параметры импорта, наложенные поверх ImportFormatMode |
ImportFormatOptions.SmartStyleBehavior | Как импортируются стили с одинаковыми названиями |
ImportFormatOptions.KeepSourceNumbering | Как импортируется конфликтующая нумерация |
ImportFormatOptions.IgnoreTextBoxes / IgnoreHeaderFooter | Подавляет исходное форматирование для текстовых полей / заголовков и нижних колонтитулов в KeepSourceFormatting |
ImportFormatOptions.MergePastedLists | Объединяет вставленные списки с окружающими списками |
ImportFormatOptions.ForceCopyStyles | Копирует конфликтующие стили вместо повторного использования версии назначения |
ImportFormatOptions.AppendDocumentWithNewPage | Принудительно задает тип первой импортированной секции в NewPage |