使用iTextSharp在C#中使用阿拉伯语文本的问题

时间:2015-06-22 16:58:02

标签: c# pdf character-encoding itextsharp arabic

我的代码出现问题,导致用阿拉伯语写错误。

这是我的代码

Excel.Workbook MyBook = null;
Excel.Application MyApp = null;
Excel.Worksheet MySheet = null;

MyApp = new Excel.Application();
MyApp.Visible = false;
MyBook = MyApp.Workbooks.Open("C:/Users/ADmin/Desktop/TESTCSHARP.xlsx");
MySheet = (Excel.Worksheet)MyBook.Sheets[1]; // Explicit cast is not required here
int lastRow_A = MySheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell).Row;

iTextSharp.text.Rectangle REC = new iTextSharp.text.Rectangle(936, 454);
Document nouveauDocument = new Document(REC.Rotate());

try
{
    PdfWriter WRITER = PdfWriter.GetInstance(nouveauDocument, new FileStream("fichier_test.pdf", FileMode.Create));

    nouveauDocument.Open();

    try
    {
        PdfContentByte cb = WRITER.DirectContent;

        cb.BeginText();
        try
        {
            int XX = 15;
            cb.SetFontAndSize(BaseFont.CreateFont(), 10);
            float Y = (32 * (float)0.3937008) * 72;
            float X = (XX * (float)0.3937008) * 72;

            string arabname = "مرحبا العالم";

            string ARIALUNI_TFF = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "ARIALUNI.TTF");
            BaseFont bf = BaseFont.CreateFont(ARIALUNI_TFF, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            iTextSharp.text.Font f = new iTextSharp.text.Font(bf, 12, iTextSharp.text.Font.BOLD);

            cb.SetFontAndSize(f.BaseFont, 10);

            cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, arabname, (float)10.7 * (float)0.3937008 * 72, (float)6.8 * (float)0.3937008 * 72, -90);

            MyBook.Close();
        }

        finally
        {
            cb.EndText();
        }
    }

    finally
    {
        nouveauDocument.Close();

        WRITER.Close();
    }

}

catch (DocumentException de)
{
    Console.WriteLine("error " + de.Message);
}

catch (System.IO.IOException ioe)
{
    Console.WriteLine("error " + ioe.Message);
}

nouveauDocument.Close();
  

pdf中此代码的结果是:

     

رينمم

     

反转而不像阿拉伯语写作

当我尝试使用此代码反转字符串时

char[] charArray = arabname.ToCharArray();
                    Array.Reverse(charArray);
                    arabname=charArray.ToString();

我的结果相同。

虽然我需要将منير链接起来,以PDF格式显示

请帮助,谢谢。

2 个答案:

答案 0 :(得分:0)

尝试将字体设置为嵌入式,更改以下行:

BaseFont bf = BaseFont.CreateFont(ARIALUNI_TFF, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

您还必须将此文字写入tableRunDirection设置为PdfWriter.RUN_DIRECTION_RTL,以便将文字写入RTL。有关详细信息,请参阅Reversing Strings in Right To Left (BiDirectional) Languages in iTextSharp

答案 1 :(得分:0)

我将相同的代码放入Reversing Strings in Right To Left (BiDirectional) Languages in iTextSharp。 我没有预期的结果,最糟糕的是我有一个空页。

并且不知道是什么问题,