Apsose .Net - Заменить все текстовые поля в моем документе RTF с таблицами - PullRequest
0 голосов
/ 24 июня 2018

Я хочу заменить все текстовые поля в моем документе 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");

Я столкнулся со следующими проблемами с вышеупомянутым подходом:

  1. Таблицы не добавляются в позициисоответствующие текстовые поля.Хотя я звоню builder.MoveTo(), значение left новой таблицы не совпадает с текстовым полем.

  2. Высота некоторых таблиц не совпадает свысота соответствующая shape(TextBox.Ширина сохраняется правильно.

  3. Строка, возвращаемая методом shape.GetText(), не сохраняет форматирование.Например, даже если текст внутри текстового поля выделен жирным шрифтом или курсивом, метод shape.GetText() возвращает неформатированный текст.Как сохранить форматирование перед вставкой в ​​таблицу?

Пожалуйста, дайте мне знать, как я могу решить эту проблему.Любая помощь будет высоко оценена.

Спасибо,

1 Ответ

0 голосов
/ 03 июля 2018

Вы можете использовать следующий код для замены форм TextBox в документе 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 в качестве разработчика Evangelist.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...