2015-09-23 11 views
6

Ich habe einen Knoten Importeur, wie dieseBullet-List-Nummer in neues Dokument kopieren?

Dim nodeImporter As New Aspose.Words.NodeImporter(_wordDocument, documentComponentDocument, 
Aspose.Words.ImportFormatMode.UseDestinationStyles) 

geht ich bin mit childNode von einem Dokument zum anderen zu kopieren. Mein Kindknoten ist eine Aufzählungsliste.

documentComponentSection.Body.AppendChild(nodeImporter.ImportNode(childNode, True)) 

Aber mein Problem ist, dass einige Eigenschaften von childNode wie ListLabel heißt Aufzählungsliste Nummerierung ist nicht

Wie pro Ihre Antwort kopiert zu werden folgende ich versuchte. Aber es funktioniert nicht, wenn ich für jeden Knoten ein neues Dokument erstelle.

Aspose.Words.Document srcDoc = new Aspose.Words.Document(Mydir + "input.docx"); 

      Aspose.Words.Document dstDoc = new Aspose.Words.Document(); 
      var ctr = 0; 
      int listid = 0; 
      Aspose.Words.Lists.List dstList = null; 
      foreach (Aspose.Words.Paragraph paragraph in srcDoc.GetChildNodes(Aspose.Words.NodeType.Paragraph, true)) 
      { 
       Aspose.Words.NodeImporter imp = new Aspose.Words.NodeImporter(srcDoc, dstDoc, Aspose.Words.ImportFormatMode.KeepSourceFormatting); 
       Aspose.Words.Node impNode = imp.ImportNode(paragraph, true); 
       if (((Aspose.Words.Paragraph)impNode).IsListItem) 
       { 
        ((Aspose.Words.Paragraph)impNode).ListFormat.ListLevel.StartAt = paragraph.ListFormat.List.ListId; 
        if (listid != paragraph.ListFormat.List.ListId) 
        { 
         listid = paragraph.ListFormat.List.ListId; 
         dstList = dstDoc.Lists.AddCopy(paragraph.ListFormat.List); 
        } 


        ((Aspose.Words.Paragraph)impNode).ListFormat.List = dstList; 
       } 
       dstDoc.FirstSection.Body.RemoveAllChildren(); 
       dstDoc.FirstSection.Body.AppendChild(impNode); 
       var index = ctr++; 
       dstDoc.Save(MyDir + index.ToString() + ".docx"); 
      } 

Jeder Ausgang enthält doc Listenindex als 1.

Antwort

2

folgendes Codebeispiel importiert das Listenelement aus Quelldokument in neues leeres Dokument und halten die Liste Etikett (nummerierte) Wert.

Aspose.Words.Document srcDoc = new Aspose.Words.Document(MyDir + "input.docx"); 
DocumentBuilder builder = new DocumentBuilder(srcDoc); 
srcDoc.UpdateListLabels(); 

Aspose.Words.Document dstDoc = new Aspose.Words.Document(); 
int ctr = 0; 
Aspose.Words.NodeImporter imp = new Aspose.Words.NodeImporter(srcDoc, dstDoc, Aspose.Words.ImportFormatMode.KeepSourceFormatting); 

foreach (Aspose.Words.Paragraph paragraph in srcDoc.GetChildNodes(Aspose.Words.NodeType.Paragraph, true)) 
{ 
    if (paragraph.IsListItem) 
    { 
     ListLabel label = paragraph.ListLabel; 
     builder.MoveTo(paragraph); 
     builder.StartBookmark("bookmark_" + label.LabelValue); 
     builder.EndBookmark("bookmark_" + label.LabelValue); 

     Aspose.Words.Node impNode = imp.ImportNode(paragraph, true); 

     dstDoc.FirstSection.Body.RemoveAllChildren(); 
     dstDoc.FirstSection.Body.AppendChild(impNode); 

     foreach (Bookmark bookmark in ((Aspose.Words.Paragraph)impNode).Range.Bookmarks) 
     { 
      if (!bookmark.Name.StartsWith("bookmark_")) 
       continue; 

      String listLabel = bookmark.Name.Replace("bookmark_", ""); 

      try 
      { 
       ((Aspose.Words.Paragraph)impNode).ListFormat.ListLevel.StartAt = Convert.ToInt32(listLabel); 
       break; 
      } 
      catch (Exception ex) 
      { 
      } 
     } 

     ctr++; 
     dstDoc.Range.Bookmarks.Clear(); 
     dstDoc.Save(MyDir + ctr.ToString() + ".docx"); 
    } 
} 

Wenn das Problem weiterhin bleibt, bitte, das Problem in Aspose.Words forum mit Eingang und erwarteten Ausgabedokumenten berichten.

Ich arbeite mit Aspose als Entwickler Evangelist.

+0

Was ist, wenn ich bereit bin, jeden Knoten in einem neuen Dokument zu kopieren. In diesem Fall beginnt der Index jedes Dokuments bei 1. Ich muss den Listenindex im Auge behalten. – TBAG

+0

Ich habe meine Frage mit Codeblock aktualisiert, den ich versucht habe. – TBAG

+0

Beachten Sie, dass Aspose.Words das gleiche Verhalten wie MS Word nachahmt. Wenn Sie ein Listenelement aus einem Word-Dokument kopieren und in ein neues leeres Dokument einfügen, erhalten Sie die gleiche Ausgabe. Das Listenelement beginnt bei 1. Um dieses Problem zu umgehen, können Sie das aktualisierte Codebeispiel in meiner Antwort verwenden. Hoffe das hilft dir. –