NodeImporter

NodeImporter class

Düğümlerin bir belgeden diğerine tekrar tekrar içe aktarılmasını verimli bir şekilde gerçekleştirmeye olanak tanır.

Daha fazla bilgi edinmek için şu adresi ziyaret edin:Aspose.Words Belge Nesne Modeli (DOM) belgeleme makalesi.

public class NodeImporter

yapıcılar

İsimTanım
NodeImporter(DocumentBaseDocumentBaseImportFormatMode)Yeni bir örneğini başlatırNodeImporter sınıf.
NodeImporter(DocumentBaseDocumentBaseImportFormatModeImportFormatOptions)Yeni bir örneğini başlatırNodeImporter sınıf.

yöntemler

İsimTanım
ImportNode(Node, bool)Bir düğümü bir belgeden diğerine aktarır.

Notlar

Aspose.Words, Microsoft Word belgeleri arasında fragments ‘yi kolayca kopyalama ve taşıma işlevi sağlar. Buna “node’ları içe aktarma” denir. Bir parçayı bir belgeden diğerine eklemeden önce, onu “içe aktarmanız” gerekir. İçe aktarma, orijinal düğümün derin bir klonunu oluşturur ve hedef belgeye eklenmeye hazır hale getirir.

Bir düğümü içe aktarmanın en basit yolu,ImportNode method tarafından sağlananDocumentBase nesne.

Ancak, düğümleri bir belgeden diğerine birden çok kez içe aktarmanız gerektiğinde, kullanmak daha iyidirNodeImporter sınıf.NodeImporter sınıfı hedef belgede oluşturulan stil ve liste sayısını en aza indirmeye olanak tanır.

Parçaları bir Microsoft Word belgesinden diğerine kopyalamak veya taşımak Aspose.Words için bir dizi teknik zorluk sunar. Bir Word belgesinde, stiller ve liste biçimlendirmesi belgenin metninden ayrı olarak merkezi olarak saklanır. paragraphs ve metin dizileri stilleri yalnızca dahili benzersiz tanımlayıcılarla referans alır.

Zorluklar, stillerin ve listelerin farklı belgelerde farklı olmasından kaynaklanır. Örneğin, Başlık 1 stiliyle biçimlendirilmiş bir paragrafı bir belgeden diğerine kopyalamak için, bir dizi şey dikkate alınmalıdır: Başlık 1 stilini kaynak belgeden hedef belgeye kopyalayıp kopyalamayacağınıza karar verin, paragrafı klonlayın, klonlanan paragrafı hedef belgede doğru Başlık 1 stiline başvuracak şekilde güncelleyin. Stilin kopyalanması gerekiyorsa, başvurduğu tüm stiller (style ve sonraki paragraf stiline göre) analiz edilmeli ve muhtemelen onlar da kopyalanmalıdır, vb. Madde işaretli veya numaralı paragrafları kopyalarken de benzer sorunlar yaşanır, çünkü Microsoft Word liste tanımlarını metinden ayrı olarak depolar.

TheNodeImportersınıf, içe aktarma sırasında “çeviri tablolarını” tutan bir bağlam gibidir. Kaynak ve hedef belgelerdeki stiller ve listeler arasında doğru bir şekilde çeviri yapar.

Örnekler

Bir belgenin içeriğinin başka bir belgedeki yer imine nasıl ekleneceğini gösterir.

public void InsertAtBookmark()
{
    Document doc = new Document();
    DocumentBuilder builder = new DocumentBuilder(doc);

    builder.StartBookmark("InsertionPoint");
    builder.Write("We will insert a document here: ");
    builder.EndBookmark("InsertionPoint");

    Document docToInsert = new Document();
    builder = new DocumentBuilder(docToInsert);

    builder.Write("Hello world!");

    docToInsert.Save(ArtifactsDir + "NodeImporter.InsertAtMergeField.docx");

    Bookmark bookmark = doc.Range.Bookmarks["InsertionPoint"];
    InsertDocument(bookmark.BookmarkStart.ParentNode, docToInsert);

    Assert.AreEqual("We will insert a document here: " +
                    "\rHello world!", doc.GetText().Trim());
}

/// <summary>
/// Belirtilen düğümden sonra belgenin içeriğini ekler.
/// </summary>
static void InsertDocument(Node insertionDestination, Document docToInsert)
{
    if (insertionDestination.NodeType == NodeType.Paragraph || insertionDestination.NodeType == NodeType.Table)
    {
        CompositeNode destinationParent = insertionDestination.ParentNode;

        NodeImporter importer =
            new NodeImporter(docToInsert, insertionDestination.Document, ImportFormatMode.KeepSourceFormatting);

        // Bölümün gövdesindeki tüm blok düzeyindeki düğümler arasında döngü kur,
        // daha sonra bölümün son boş paragrafı olmayan her düğümü klonla ve ekle.
        foreach (Section srcSection in docToInsert.Sections.OfType<Section>())
            foreach (Node srcNode in srcSection.Body)
            {
                if (srcNode.NodeType == NodeType.Paragraph)
                {
                    Paragraph para = (Paragraph)srcNode;
                    if (para.IsEndOfSection && !para.HasChildNodes)
                        continue;
                }

                Node newNode = importer.ImportNode(srcNode, true);

                destinationParent.InsertAfter(newNode, insertionDestination);
                insertionDestination = newNode;
            }
    }
    else
    {
        throw new ArgumentException("The destination node should be either a paragraph or table.");
    }
}

Ayrıca bakınız