I have gotten null reference exception from Aspose while inserting one document (source) into another (destination).
First of all I am removing the only one StructuredDocumentTag from source document. After that I am inserting it into destination document. For insertion I am using DocumentBuilder - InsertDocument.
Exception :
System.NullReferenceException was caught
HResult=-2147467261
Message=Object reference not set to an instance of an object.
Source=Aspose.Words
StackTrace:
at . (Document , ImportFormatMode , )
at . (Document , ImportFormatMode , )
at Aspose.Words.DocumentBuilder.InsertDocument(Document srcDoc, ImportFormatMode importFormatMode)
at Test.GenDoc.Foresters_Flexible_Purchase2() in d:\Programming\Test\Test\GenDoc.cs:line 810
at Test.Program.Main(String[] args) in d:\Programming\Test\Test\Program.cs:line 30
InnerException:
What I found as a clue is that in the source document the only one and also last one node is SDT that I am removing. Otherwise if I add one new row (translated to new paragraph) than I will not get this exception. Also if I remove SDT, than save document and than insert it into destination document I will not be faced with this exception. Looks like structure of the source document after SDT removal is problematic to add to destination document like this.
Also as an workaround is possible that before SDT removal I add at the document end, empty paragraph if next sibling is null.
Whatever, I find this is not expected behavior and looks like a bug. Could you please investigate ?
Code snippet :
public static void NullReferenceIssue()
{
Document destDoc = new Document();
Document sourceDoc = new Document("OneSDTDoc.docx");
StructuredDocumentTag sdt =
sourceDoc.FirstSection.Body.GetChildNodes(NodeType.StructuredDocumentTag, true).Cast().FirstOrDefault();
sdt.Remove();
DocumentBuilder builder = new DocumentBuilder(destDoc);
builder.MoveToDocumentEnd();
builder.InsertDocument(sourceDoc, ImportFormatMode.KeepSourceFormatting);
string documentName = Guid.NewGuid() + ".docx";
destDoc.Save(documentName, SaveFormat.Docx);
}