我想用表格替换rtf文档中的所有文本框。使用MS Word插入文本框。我已经在C#中尝试了以下代码:
Document rtfFile = new Document(@"C:\Tools\docwithTextBox.rtf");
DocumentBuilder builder = new DocumentBuilder(rtfFile);
var nodes = rtfFile.GetChildNodes(NodeType.Shape, true);
foreach (Shape shape in nodes)
{
if (shape.ShapeType == ShapeType.TextBox)
{
var width = shape.Width;
var height = shape.Height;
string text = shape.GetText();
builder.MoveTo(shape);
shape.Remove();
Aspose.Words.Tables.Table table = builder.StartTable();
Cell cell = builder.InsertCell();
builder.Write(text);
builder.RowFormat.Height = height;
builder.RowFormat.HeightRule = HeightRule.Exactly;
table.PreferredWidth = PreferredWidth.FromPoints(width);
builder.EndRow();
builder.EndTable();
}
}
rtfFile.Save(@"C:\Tools\docwithTextBox.rtf");
以上方法使我面临以下问题:
未将表添加到相应文本框的位置。尽管我正在调用builder.MoveTo()
,但新表的left
值与文本框的值不匹配。
某些表格的高度与相应的shape(TextBox
的高度不匹配。宽度已正确保留。
shape.GetText()
方法返回的字符串不保留格式。例如,即使文本框中的文本为粗体或斜体,shape.GetText()
方法也会返回未格式化的文本。在插入表之前,我们如何保留格式?
请让我知道如何解决此问题。任何帮助将不胜感激。
谢谢
答案 0 :(得分:0)
您可以使用以下代码将Word文档中的文本框形状替换为表格:
Document doc = new Document("D:\\Temp\\files\\Files\\1\\nonNestedTexBox.rtf");
DocumentBuilder builder = new DocumentBuilder(doc);
ArrayList list = new ArrayList();
foreach (Shape shape in doc.GetChildNodes(NodeType.Shape, true))
{
builder.MoveTo(shape.GetAncestor(NodeType.Paragraph));
Table tab = builder.StartTable();
Cell cell = builder.InsertCell();
cell.EnsureMinimum();
foreach (Node node in shape.ChildNodes)
{
cell.AppendChild(node);
}
cell.FirstParagraph.Remove();
builder.EndRow();
builder.EndTable();
tab.TextWrapping = TextWrapping.Around;
tab.LeftIndent = shape.Left + 10;
tab.FirstRow.FirstCell.CellFormat.Width = shape.Width;
tab.FirstRow.RowFormat.Height = shape.Height;
tab.AutoFit(AutoFitBehavior.FixedColumnWidths);
list.Add(shape);
}
foreach (Shape s in list)
{
s.Remove();
}
doc.Save("D:\\Temp\\files\\Files\\1\\18.6.docx");
我与Aspose一起担任开发人员推广人员。