4

私は PdfSharp を使用していくつかの pdf ファイルを作成しています。Drawstring メソッドを使用して、右から左へ記述する言語 (ペルシア語など) でファイルにテキストを入力しようとした場合を除いて、すべて正常に動作します。XPdfFontOptions で Unicode エンコーディングと適切なフォント ファミリ ("B Nazanin" など) を選択しましたが、文字が個別に描画されます。

ここに私が得るもののイメージがあります。

ところで、pdf ファイルを作成するより良い方法はありますか?

4

3 に答える 3

3

iTextSharp は、RTL 言語に適しています。ここでチュートリアルを見つけることができます。

于 2012-07-04T05:36:25.670 に答える
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();
    }
}
于 2020-03-03T09:03:49.843 に答える
1

PDFsharp は (まだ) 右から左へ記述する言語をサポートしていません。

参照: http://www.pdfsharp.net/wiki/PDFsharpFAQ.ashx#Does_PDFsharp_support_for_Arabic_Hebrew_CJK_Chinese_Japanese_Korean_6

于 2012-07-04T05:37:27.360 に答える