【问题标题】:PdfSharp XGraphics.DrawString not working for Right-To-Left Languages like PersianPdfSharp XGraphics.DrawString 不适用于波斯语等从右到左的语言
【发布时间】:2012-07-04 00:32:51
【问题描述】:

我正在使用 PdfSharp 创建一些 pdf 文件。一切正常,除非我尝试使用 Drawstring 方法以从右到左的语言(例如波斯语)将一些文本放入文件中。虽然我在 XPdfFontOptions 中选择了 Unicode 编码和合适的字体系列(例如“B Nazanin”),但它会离散地绘制字母。

Here 是我得到的图像。

B.T.W,有没有更好的方法来创建 pdf 文件?

【问题讨论】:

    标签: c# pdfsharp drawstring right-to-left persian


    【解决方案1】:

    iTextSharp 是 RTL 语言的更好选择。您可以找到有关它的教程here

    【讨论】:

    • 感谢 Vahid,我自己编写了课程,但我会检查一下。
    • ABCpdf.NET 是另一个支持 RTL 语言的组件。
    • @Mojingo 你在 PDFSharp 上写了一个类来处理这个问题吗?
    【解决方案2】:

    【讨论】:

    • 我应该检查一下,谢谢。
    【解决方案3】:

    您需要反转字母,然后反转整个字符串。 我自己需要它,所以它经过测试和工作:

       public static string ReverseString(this string str)
    {
        StringBuilder sb = new StringBuilder();
        foreach (char c in str.Reverse())
        {
            sb.Append(c);
        }
    
        return sb.ToString();
    }
    
     public static string RightToLeft(this string str)
    {
        List<string> output = str.Split(' ').Select(s => s.Any(c => c >= 1424 && c <= 1535) ? s.ReverseString() : s).ToList();
        output.Reverse();
        return string.Join(" ", output.ToArray());
    }
    
     private void DrawStringBoxRightToLeft(XGraphics gfx, string text, XFont font, XBrush brush, XRect rect)
    {
        List<string> words = text.Split(' ').ToList();
        List<string> sentences = new List<string>();
    
        while (words.Any())
        {
            while (gfx.MeasureString(string.Join(" ", sentences), font).Width < rect.Width && words.Any())
            {
                string s = words[0];
                sentences.Add(s);
                words.RemoveAt(0);
            }
    
            gfx.DrawString(string.Join(" ", sentences).RightToLeft(), font, brush, rect, XStringFormats.TopRight);
            rect.Y += font.Height;
            sentences.Clear();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 1970-01-01
      • 2013-03-29
      相关资源
      最近更新 更多