RDLC报告的默认字体

Mic*_*elT 7 c# rdlc reporting-services

是否可以在RDLC报告中设置默认字体?我有报告我想要更改字体,我不想在报告的每个元素中更改它.

Nat*_*ths 5

没有办法使用设计界面更改整个报表使用的字体.但是,如果您尝试将一种字体替换为另一种字体,例如Tahoma和Verdana,那么您可以打开代码视图(View> Code)并在那里进行查找和替换.

请注意,Arial是Reporting Services报告的默认字体,因此字体仅在Arial 以外的字体的代码中定义.如果您需要从Arial更改为另一种字体,则必须在设计器中手动执行此操作.


Mar*_*c K 5

有一种方法可以做到这一点。实际上很简单。开始之前,请备份rdl文件。这个答案需要编写一个简单的应用程序:

打开rdl作为XML文档。查找所有TextRun节点。在每个中查找一个“样式”节点。如果找不到“样式”节点,则在其中添加一个带有FontFamily节点并指定了所需字体的节点。如果找到“样式”节点,则查找“ FontFamily”节点。如果找到它,则可以根据需要将其保留,也可以将其替换为所需的字体。如果没有FontFamily节点,请使用指定的字体添加它。

ETA:我有代码,对我来说效果很好。请注意,这是破坏性的。您的文件将被覆盖。

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);
}
Run Code Online (Sandbox Code Playgroud)