itextsharp中的阿拉伯语编码

时间:2013-03-04 08:01:56

标签: c# itextsharp

当我尝试使用C#在阿拉伯语中创建PDF时,生成的PDF文件包含离散字符。任何帮助,所以我不能得到连续的角色?

//Create our document object
Document Doc = new Document(PageSize.LETTER);

//Create our file stream
using (FileStream fs = new FileStream(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Test.pdf"), FileMode.Create, FileAccess.Write, FileShare.Read))
{
    //Bind PDF writer to document and stream
    PdfWriter writer = PdfWriter.GetInstance(Doc, fs);

    //Open document for writing
    Doc.Open();

    //Add a page
    Doc.NewPage();

    //Full path to the Unicode Arial file
    string ARIALUNI_TFF = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "arabtype.TTF");

    //Create a base font object making sure to specify IDENTITY-H
    BaseFont bf = BaseFont.CreateFont(ARIALUNI_TFF, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

    //Create a specific font object
    iTextSharp.text.Font f = new iTextSharp.text.Font(bf, 12, iTextSharp.text.Font.NORMAL);

    //Write some text, the last character is 0x0278 - LATIN SMALL LETTER PHI
    Doc.Add(new Phrase("This is a ميسو ɸ", f));

    //Write some more text, the last character is 0x0682 - ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE
    Doc.Add(new Phrase("Hello\u0682", f));

    //Close the PDF
    Doc.Close();
}

1 个答案:

答案 0 :(得分:3)

只有ColumnTextPdfPTable支持从右向左书写和阿拉伯语连字!

看看以下示例:

阅读这些例子的书,找出为什么不能在和平中正确呈现所有单词.pdf

http://tinyurl.com/itextsharpIIA2C11中搜索这些示例的相应C#版本。

在任何情况下,您都需要一种知道如何显示阿拉伯字形的字体:

BaseFont bf = BaseFont.CreateFont(ARIALUNI_TFF, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font f = new Font(bf, 12);

您现在可以在表格中添加阿拉伯文字:

PdfPCell cell = new PdfPCell();
cell.AddElement(new Phrase("Hello\u0682", f));
cell.RunDirection = PdfWriter.RUN_DIRECTION_RTL;