PdfSharp XGraphics.DrawString不适用于像波斯语这样的从右到左的语言

时间:2012-07-04 00:32:52

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

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

Here是我得到的图像。

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

3 个答案:

答案 0 :(得分:2)

您需要颠倒字母,然后颠倒整个字符串。 我自己需要它,因此它已经过测试并且可以正常工作:

   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();
    }
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)