Delphi 尝试使用SynPDF将带有unicode文本的报表导出为pdf,会导致文本混淆

Delphi 尝试使用SynPDF将带有unicode文本的报表导出为pdf,会导致文本混淆,delphi,pdf-generation,hebrew,quickreports,uniscribe,Delphi,Pdf Generation,Hebrew,Quickreports,Uniscribe,SynPDF已经修复了一些unicode问题,但并非所有问题都得到了解决。 以下是使用Syny SynPDF将快速报告导出为PDF的streight forward代码: procedure TForm1.CreatePdf(QuickRep: TCustomQuickRep; const aFileName: TFileName); var Pdf: TPdfDocument; aMeta: TMetaFile; i: integer; begin Pdf := TPdfDocument.

SynPDF已经修复了一些unicode问题,但并非所有问题都得到了解决。 以下是使用Syny SynPDF将快速报告导出为PDF的streight forward代码:

procedure TForm1.CreatePdf(QuickRep: TCustomQuickRep; const aFileName: TFileName);
var
Pdf: TPdfDocument;
aMeta: TMetaFile;
i: integer;
begin
  Pdf := TPdfDocument.Create;
  Pdf.UseUniscribe := True;
  try
      Pdf.DefaultPaperSize := psA4;
      QuickRep.Prepare; 
      for i := 1 to QuickRep.QRPrinter.PageCount do begin
        Pdf.AddPage;
        aMeta := QuickRep.QRPrinter.GetPage(i);
        try
          // draw the page content
          Pdf.Canvas.RenderMetaFile(aMeta,1,0,0);
        finally
          aMeta.Free;
        end;
      end;
      Pdf.SaveToFile(aFileName);
  finally
    Pdf.free;
  end;
end;
这是一个带有标签的报表设计器的屏幕截图, 有希伯来语字符串,可以翻译为:

电话:03-555

这在运行时按原样显示,并打印相同的内容。 然而,使用SynPDF,结果如下:

有人知道对此可以做些什么吗

我之所以使用SynPDF是因为它是免费的

因为它会呈现图元文件中的文本

与其只是拍照

这意味着我可以通过我的pdf文件获得高质量的文本

但我不会排除其他组件,因为它们

我有办法解决这个问题


谢谢。

您使用的是来自的最新版本吗?
TPdfEnum.TextOut
方法(第9682行)中定义的
Canvas.RightToLeftText
属性值是什么?我使用的是我认为最新的版本,即1.18或1.7(我不清楚)。几天前,我从源网站下载了它,尽管这行代码显示了一些完全不同的东西。当我将这一行添加到我的代码:Pdf.Canvas.RightToLeftText:=True;,它什么也没做。好的,只是再次更新。第9682行显示了正确的code.Canvas.RightToLeftText:=(R.emrtext.fooptions和ETO_RTLREADING)0;我需要换吗?我仍然以错误的顺序获取文本。请尝试强制Canvas.RightToLeftText:=true或false