Aspose.Word MailMerge установить шрифт в абзаце

В FieldMergingCallback.FieldMerging и я установил шрифт для всех запусков в узле =>

 public void FieldMerging(FieldMergingArgs args)
    {
        if (args.FieldValue.ToString().Length > 100)
        {
            var node = args.Field.Start.ParentNode.ParentNode;
            if (node is Shape)
            {
                var runlist = node.GetChildNodes(NodeType.Run, true);
                foreach (Run run in runlist)
                {
                    run.Font.Size = 6;
                }
            }
        }
    }

Но в результате pdf: введите здесь описание изображения

Почему шрифт меньше третьего слова?


person Krystian    schedule 26.06.2018    source источник
comment
Ваши изменения действительно изменили ситуацию? Как это будет выглядеть, если вы не установите размер шрифта?   -  person Neil    schedule 26.06.2018
comment
@Neil 1 - да, если я прокомментирую //run.Font.Size = 6; весь текст в строке похож на два первых слова.   -  person Krystian    schedule 26.06.2018
comment
Интересно, есть ли какие-то другие настройки, которые переопределяют размер шрифта? Может быть, стиль абзаца, который делает первые 2 слова в абзаце определенного размера?   -  person Neil    schedule 26.06.2018
comment
Нет, это чистый документ Word с множеством полей слияния.   -  person Krystian    schedule 26.06.2018


Ответы (1)


Перед выполнением слияния вы можете использовать следующий код, чтобы применить одинаковое форматирование ко всем узлам выполнения внутри поля слияния.

Document doc = new Document("D:\\temp\\input.docx");

foreach (Field field in doc.Range.Fields)
{
    if (field.Type.Equals(Aspose.Words.Fields.FieldType.FieldMergeField))
    {
        Node currentNode = field.Start;
        bool isContinue = true;
        while (currentNode != null && isContinue)
        {
            if (currentNode.NodeType.Equals(NodeType.FieldEnd))
            {
                FieldEnd end = (FieldEnd)currentNode;
                if (end == field.End)
                    isContinue = false;
            }

            if (currentNode.NodeType.Equals(NodeType.Run))
            {
                Run run = ((Run)currentNode);
                run.Font.Size = 6;
            }

            Node nextNode = currentNode.NextPreOrder(currentNode.Document);
            currentNode = nextNode;
        }
    }
}

doc.Save("D:\\Temp\\18.6.docx");

Надеюсь это поможет. Я работаю с Aspose в качестве разработчика-евангелиста.

person Awais Hafeez    schedule 27.06.2018