RDLC 报表的默认字体

7

在RDLC报表中是否可以设置默认字体? 我有一个报表,我想改变字体,但我不想在报表的每个元素中都更改它。

3个回答

5
有一种方法可以做到这一点。实际上非常简单。在开始之前备份rdl文件。这个答案需要编写一个简单的应用程序:
将rdl文件作为XML文档打开。 查找所有TextRun节点。 在每个节点中查找Style节点。 如果没有找到Style节点,则添加一个带有所需字体指定的FontFamily节点的节点。 如果找到Style节点,请查找FontFamily节点。如果找到,您可以保持不变或替换所需字体的值,具体取决于您的要求。如果没有FontFamily节点,请使用指定的字体添加它。
预计时间:我有代码,对我来说运行得非常好。请注意,这是破坏性的,即您的文件将被覆盖。
pivate static void AddFontsToRdlc(string fileName, string defaultFont)
{
  if (!File.Exists(fileName))
  {
    // Report file does not exist
    return;
  }
  XmlDocument document = new XmlDocument();
  document.Load(fileName);
  string documentNamespace = document.DocumentElement.NamespaceURI;
  XmlNodeList nodes = document.GetElementsByTagName("TextRun");
  bool foundStyle = false;
  bool foundFontFamily = false;
  foreach (XmlNode node in nodes)
  {
    foundStyle = false;
    foundFontFamily = false;
    foreach (XmlNode childNode in node.ChildNodes)
    {
      if (childNode.Name == "Style")
      {
        foundStyle = true;
        foreach (XmlNode styleNode in childNode.ChildNodes)
        {
          if (styleNode.Name == "FontFamily")
          {
            // Change the font here if changing all fonts to the default font
            // Alternatively, specify what font should change to what font with a switch
            foundFontFamily = true;
            break;
          }
        }
        if (!foundFontFamily)
        {
          XmlElement fontElement = document.CreateElement("FontFamily", documentNamespace);
          fontElement.InnerText = defaultFont;
          childNode.AppendChild(fontElement);
        }
        break;
      }
    }
    if (!foundStyle)
    {
      XmlNode styleElement = document.CreateElement("Style", documentNamespace);
      XmlElement fontElement = document.CreateElement("FontFamily", documentNamespace);
      fontElement.InnerText = defaultFont;
      styleElement.AppendChild(fontElement);
      node.AppendChild(styleElement);
    }
  }
  document.Save(fileName);
}

1
或者,您可以在Notepad++中打开rdlc文件,搜索文本框元素(如果只有一个或两个),并在样式子节点中输入字体系列的xml元素。+1 - Our Man in Bananas
太好了!我在这里提供了一个简单的解决方案:https://1drv.ms/f/s!AqgVrjYd-3PgixMJv5WqbOO5G7Zm - Matthias König

5

设计界面没有更改整个报告所使用字体的方法。但是,如果您想要用另一种字体替换某个字体,例如将Tahoma替换为Verdana,则可以打开代码视图(查看 > 代码),然后在那里执行查找和替换操作。

请注意,Arial是Reporting Services报告的默认字体,因此除了Arial之外的字体只在代码中定义。如果您需要从Arial更改为其他字体,则必须在设计程序中手动更改。


1
天啊,这可不是好消息。你可以做的(但需要定制)是编写一个正则表达式解析器来查找所有没有指定字体的文本框标签,并指定一个字体。或者使用 XML 在每个文本框节点中查找样式节点,并查找是否指定了字体系列节点。我将尝试后者。 - Marc K

-6

前往 工具 > 选项 > 环境 > 字体和颜色,然后将其更改为所需的字体。


3
这将设置Visual Studio环境中使用的字体。发帖者询问如何在报告内设置字体。 - Nathan Griffiths

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接