Hi
I find that if a IF Field contents contain tables, then after I remove the IF Field, the tables are kept there.
For example:
{ IF 1 > 2 "Table1" "Table2" }
(I also uploaded the document)
What I need is to convert the “IF Field” to the table of Table2, but actually, I get three tables, one is Table1 and the other two are Table2.
Is this the bug?
My codes are:
class Program
{
static void Main(string[] args)
{
License license = new Aspose.Words.License();
license.SetLicense("Aspose.Words.lic");
Document doc = new Aspose.Words.Document(@"testdoc2.doc");
doc.UpdateFields();
RemoveIFFields ifRem = new RemoveIFFields();
doc.Accept(ifRem);
doc.Save("results.doc");
}
}
public class RemoveIFFields : DocumentVisitor
{
private bool _delete = false;
public override VisitorAction VisitFieldStart(Aspose.Words.Fields.FieldStart fieldStart)
{
if (fieldStart.FieldType == Aspose.Words.Fields.FieldType.FieldIf)
{
_delete = true;
fieldStart.Remove();
}
return VisitorAction.Continue;
}
public override VisitorAction VisitFieldSeparator(Aspose.Words.Fields.FieldSeparator fieldSeparator)
{
if (fieldSeparator.FieldType == Aspose.Words.Fields.FieldType.FieldIf)
{
_delete = false;
fieldSeparator.Remove();
}
return VisitorAction.Continue;
}
public override VisitorAction VisitFieldEnd(Aspose.Words.Fields.FieldEnd fieldEnd)
{
if (fieldEnd.FieldType == Aspose.Words.Fields.FieldType.FieldIf)
{
_delete = false;
fieldEnd.Remove();
}
return VisitorAction.Continue;
}
public override VisitorAction VisitRun(Run run)
{
if (_delete)
run.Remove();
return VisitorAction.Continue;
}
}