在 Delphi 2009 的 Rave Reports 中显示 unicode 文本

Posted

技术标签:

【中文标题】在 Delphi 2009 的 Rave Reports 中显示 unicode 文本【英文标题】:Displaying unicode text in Rave Reports on Delphi 2009 【发布时间】:2009-02-09 06:41:04 【问题描述】:

我正在将 Delphi 2006 应用程序移植到 Delphi 2009。对 unicode 的开箱即用支持很容易 - 几乎不需要任何工作。大多数第 3 方控件已经提供了 Delphi 2009 更新。

Rave Reports(最新版本 7.6.1,可用 here)也已更新,但我似乎无法正确显示包含日文字符的 RTF 文本。在 Delphi 2006 中,我通过使用流从屏幕控件 (TLMDRichEdit) 读取 RTF,然后执行 CustomConnection.WriteBlobData,将 RTF 加载到 RVCustomConnection 的 OnGetRow 事件中的 DataMemo 组件。

在报告输出中,任何 RTF 文本现在都显示为一系列矩形和 % 符号。没有可读的文本。所有其他文本(使用 Text 和 DataText 组件显示)正确显示。

有没有人知道如何让包含 unicode 的 RTF 正确显示?它甚至支持吗?

【问题讨论】:

【参考方案1】:

我用过这个...它似乎可以与 Dephi XE 内置的 RAVE 包一起使用...

Procedure TfrmMain.RaveCustomConnectionGetRow                  (         Connection: TRvCustomConnection);
Var
  MemoString : String;
  Index      : Integer;
  Size       : Integer;
  Buffer     : PAnsiChar;

Begin


   Init MemoString 
  MemoString := '';

  For Index := 0 To DataList.Count - 1 Do Begin
    MemoString := MemoString + DataList.Strings [Index] + #13#10;
  End;  For 

   Set the Size (Unicode) and Buffer 
  Size := Length (MemoString) * 2;
  Buffer := PAnsiChar (MemoString);

   Send the data over as a Blob object to RAVE 
  Connection.WriteBlobData (Buffer^, Size);

End;  RaveCustomConnectionGetRow Procedure 

【讨论】:

感谢您的更新 - 我很久以前就遇到过这个问题。我记得当时环顾四周,没有其他人真正有解决方案(无论是在这里还是在其他网站上)。您的代码示例无疑会帮助某人。谢谢!【参考方案2】:

除非来自 Nevrona 的人愿意发表评论,否则我的结论是(还)不可能。

【讨论】:

【参考方案3】:

即使没有 unicode,Rave 报告中的 RTF 打印也会损坏(在行尾添加矩形)。新版本 7.6.2 还没有修复这个,,,

F&^%ing 来自 Codegear(或者现在叫什么)和 Nevrona 的可怜...

【讨论】:

我最终使用了 FastReports。切换到它既快速又轻松,而且它是 Unicode 友好的。

以上是关于在 Delphi 2009 的 Rave Reports 中显示 unicode 文本的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Delphi 2010 ( UniSynEdit Package ) 中安装 Delphi 2009 组件包?

在 Delphi 2009 中显示 PDF 文件的最佳方法是啥[关闭]

Delphi 2009 - 在自定义 Delphi 组件中设置默认属性值

如何获得dos输出。在delphi2009与vista

在 Delphi 2009 中将字符串转换为 PAnsiChar

在 Delphi 2009 中将字符串转换为 PAnsiChar