如何使用 vb.net 动态更改 Crystal 报告字体

How to change Crystal Report font Dynamically using vb.net

我正在使用 Visual Studio 2013 和 crystal 报告 13.0.12.1494。在我的项目中,我有一个 Crystal 报告,其中包含来自数据库的字段(SQL 服务器作为数据库)。我在项目设置中存储对字体的引用,并希望根据项目设置中的用户偏好替换字体 例如crystal 使用 arial 字体构建的报告,10pt,用户在运行时选择 times new roman,12pt,然后报告应以 times new roman,12pt 显示。

我试过关注没有成功

Dim myparam As New ParameterField
Dim myDiscreteValue As New ParameterDiscreteValue
myparam.ParameterFieldName = "My Parameter"
myDiscreteValue.Value = My.Settings.MyFont.Name

提前致谢

这是我用来动态更改对象字体的 C#。

文本对象可以是TextObject(简单文本)或FieldObject(来自数据库)

 public static void ApplyFontAllText(ReportDocument rapport, Font style)
    {

        foreach (ReportObject obj in rapport.ReportDefinition.ReportObjects)
        {
            if (obj.GetType().Name.Equals("TextObject"))
            {

              ((TextObject)obj).ApplyFont(style);

            }
            else if (obj.GetType().Name.Equals("FieldObject"))
            {
                ((FieldObject)obj).ApplyFont(style);
            }
        }
    }

两个 class 都有一个 ApplyFont 方法。 您可以解析您的字体,然后使用 ApplyFont.

VB版本:

Dim templatefont As Font

'scan all report objects in the crystal report _reportDoc
For Each x As ReportObject In _reportDoc.ReportDefinition.ReportObjects
  'just change the font family. Keep styling (e.g. bold) same
  If x.GetType.Name.Equals("TextObject") Then
     templatefont = DirectCast(x, TextObject).Font
     DirectCast(x, TextObject).ApplyFont(New Font("Arial Unicode MS", templatefont.Size, templatefont.Style, templatefont.Unit))
  End If

  If x.GetType.Name.Equals("FieldObject") Then
     templatefont = DirectCast(x, FieldObject).Font
     DirectCast(x, FieldObject).ApplyFont(New Font("Arial Unicode MS", templatefont.Size, templatefont.Style, templatefont.Unit))         
  End If
Next