【问题标题】:Aspose.Word MailMerge set font in paragraphAspose.Word MailMerge 在段落中设置字体
【发布时间】:2018-06-26 12:52:05
【问题描述】:

在 FieldMergingCallback.FieldMerging 中,我将字体设置为 Node 中的所有 Runs =>

 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 是:

为什么字体比第三个字小?

【问题讨论】:

  • 您的更改是否真的产生了差异?不设置字号会怎么样?
  • @Neil 1 - 是的,如果我评论 //run.Font.Size = 6;行中的所有文本都像两个第一个单词。
  • 我想知道是否还有一些其他设置可以覆盖字体大小?也许是一种段落样式使段落中的前 2 个单词具有特定大小?
  • 不,这是纯 Word 文档,有很多 MergeFields。

标签: c# aspose aspose.words


【解决方案1】:

在执行邮件合并之前,您可以使用以下代码将相同的格式应用于合并字段内的所有 Run 节点。

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 合作,担任开发人员宣传员。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 2012-12-21
    • 2012-02-27
    • 1970-01-01
    • 2015-06-13
    • 2011-08-14
    • 2016-03-17
    相关资源
    最近更新 更多