2015-09-23 10 views
6

Ho un importatore nodo che va in questoCopia il numero dell'elenco puntato nel nuovo documento?

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

Io lo utilizzo per copiare childnode da un documento all'altro. Il mio nodo figlio è un elenco puntato.

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

Ma il mio problema è che alcune proprietà della childnode come ListLabel elenco puntato cioè numerazione non è sempre copiati

Secondo la vostra risposta che ho provato in seguito. Ma non funziona quando creo un nuovo documento per ogni nodo.

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"); 
      } 

Ogni doc uscita contiene indice elenco come 1.

risposta

2

seguente esempio di codice importa l'elemento di elenco dal documento di origine nel nuovo documento vuoto e mantenere valore dell'etichetta lista (numerata).

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"); 
    } 
} 

Se il problema persiste, si prega di segnalare il problema in Aspose.Words forum con ingresso e documenti di output attesi.

Lavoro con Aspose come evangelizzatore dello sviluppatore.

+0

E se sono disposto a copiare ogni nodo nel nuovo documento. In tal caso, l'indice di ogni documento inizierà da 1. Devo tenere traccia dell'indice della lista. – TBAG

+0

Ho aggiornato la mia domanda con il blocco di codice che ho provato. – TBAG

+0

Nota che Aspose.Words riproduce lo stesso comportamento di MS Word. Se copi una voce di elenco dal documento di Word e la incolli in un nuovo documento vuoto, otterrai lo stesso risultato. L'elemento dell'elenco inizia da 1. Per risolvere il problema, è possibile utilizzare l'esempio di codice aggiornato nella mia risposta. Spero che questo ti aiuti. –

Problemi correlati