水晶报表's静态文本中无效字符

本文关键字:文本 无效 字符 静态 报表 水晶 | 更新日期: 2023-09-27 18:12:51

我有一个Crystal报告,它目前与Delphi 7应用程序一起使用,该应用程序现已服务多年,没有任何问题。处理完应用程序后,将报告导出为PDF。

最近,我用做了另一个应用程序。Net 3.5(不能超过,因为我们使用一些旧的自定义控件)。当我使用该应用程序使用相同的报告(导出为PDF)时,我在"静态标签"上获得了一些额外的字符。

示例:

报表静态文本-> Klant编号PDF -> Klanti数字(有一个额外的"i")

对于所有的文本标签报告已使用"Calibri"字体。后来我注意到,当我把字体类型改为"Arial"时,效果很好。

但是我不能这样做,因为这是一份官方发票,需要与所有应用程序采用相同的格式(字体)。

为什么它给出正确的输出从Delphi而不是在。net ?

水晶报表's静态文本中无效字符

我们可以用下面的方法通过编程改变报表的字体,同样可以解决这个问题。

private void updateReport(ReportDocument doc)
{
  Font ft;
  foreach (Section sec in doc.ReportDefinition.Sections)
  {
    foreach (ReportObject obj in sec.ReportObjects)
    {
      if (obj.Kind == ReportObjectKind.FieldHeadingObject)
      {
        FieldHeadingObject fobj = (FieldHeadingObject)obj;
        ft = new Font("Arial", fobj.Font.Size, fobj.Font.Style, fobj.Font.Unit, 
          fobj.Font.GdiCharSet, fobj.Font.GdiVerticalFont);
        fobj.ApplyFont(ft);
      }
      else if (obj.Kind == ReportObjectKind.FieldObject)
      {
        FieldObject fobj = (FieldObject)obj;
        ft = new Font("Arial", fobj.Font.Size, fobj.Font.Style, fobj.Font.Unit, 
          fobj.Font.GdiCharSet, fobj.Font.GdiVerticalFont);
        fobj.ApplyFont(ft);
      }
      else if (obj.Kind == ReportObjectKind.TextObject)
      {
        TextObject fobj = (TextObject)obj;
        ft = new Font("Arial", fobj.Font.Size, fobj.Font.Style, fobj.Font.Unit, 
          fobj.Font.GdiCharSet, fobj.Font.GdiVerticalFont);
        fobj.ApplyFont(ft);
      }
    }
  }
}