当前位置:  开发笔记 > 编程语言 > 正文

在c#中使用iTextSharp的pdf阿拉伯语

如何解决《在c#中使用iTextSharp的pdf阿拉伯语》经验,为你挑选了1个好方法。

我想在C#中创建一个包含阿拉伯文本内容的PDF文件.我正在使用iTextSharp来创建它.我按照http://geekswithblogs.net/JaydPage/archive/2011/11/02/using-itextsharp-to-correctly-display-hebrew--arabic-text-right.aspx中的说明进行操作.我想在pdf中插入以下阿拉伯语句子.

تمإبرامهذاالعقدفيههااليوم[●]مالموافق[●]منقبلوبين.

[●]需要用动态英语单词替换.我尝试使用ARIALUNI.TTF实现这一点[本教程链接建议].代码如下.

public void WriteDocument()
{
    //Declare a itextSharp document 
    Document document = new Document(PageSize.A4);

    //Create our file stream and bind the writer to the document and the stream 
    PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(@"D:\Test.Pdf", FileMode.Create));

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

    //Add a new page 
    document.NewPage();

    //Reference a Unicode font to be sure that the symbols are present. 
    BaseFont bfArialUniCode = BaseFont.CreateFont(@"D:\ARIALUNI.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
    //Create a font from the base font 
    Font font = new Font(bfArialUniCode, 12);

    //Use a table so that we can set the text direction 
    PdfPTable table = new PdfPTable(1);
    //Ensure that wrapping is on, otherwise Right to Left text will not display 
    table.DefaultCell.NoWrap = false;

    //Create a regex expression to detect hebrew or arabic code points 
    const string regex_match_arabic_hebrew = @"[\u0600-\u06FF,\u0590-\u05FF]+";
    if (Regex.IsMatch("? ???????", regex_match_arabic_hebrew, RegexOptions.IgnoreCase))
    {
        table.RunDirection = PdfWriter.RUN_DIRECTION_RTL;
    }

    //Create a cell and add text to it 
    PdfPCell text = new PdfPCell(new Phrase(" : "+"?? ??? ????" + " 2007 " + "? ???????" + " dsdsdsdsds " + "?? ????? ??? ????? ?? ??? ????? ", font));
    //Ensure that wrapping is on, otherwise Right to Left text will not display 
    text.NoWrap = false;

    //Add the cell to the table 
    table.AddCell(text);

    //Add the table to the document 
    document.Add(table);

    //Close the document 
    document.Close();

    //Launch the document if you have a file association set for PDF's 
    Process AcrobatReader = new Process();
    AcrobatReader.StartInfo.FileName = @"D:\Test.Pdf";
    AcrobatReader.Start();
}

在调用此函数时,我得到了一个带有一些Unicode的PDF,如下所示.

اذهيفدقعلااذهماربإمتdsdsdsdsdsقفاوملام2007نيبولبقنممويلا

它与我们的硬编码阿拉伯语句子不匹配.这是字体问题吗?请帮助我或建议我实施相同的任何其他方法.



1> blagae..:

@csharpcoder有正确的想法,但他的执行是关闭的.他没有将单元格添加到表格中,并且表格不会在文档中结束.

void Go()
{
    Document doc = new Document(PageSize.LETTER);
    string yourPath = "foo/bar/baz.pdf";
    using (FileStream os = new FileStream(yourPath, FileMode.Create))
    {
        PdfWriter.GetInstance(doc, os); // you don't need the return value

        doc.Open();

        string fontLoc = @"c:\windows\fonts\arialuni.ttf"; // make sure to have the correct path to the font file
        BaseFont bf = BaseFont.CreateFont(fontLoc, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        Font f = new Font(bf, 12);

        PdfPTable table = new PdfPTable(1); // a table with 1 cell
        Phrase text = new Phrase("?????", f);
        PdfPCell cell = new PdfPCell(text);
        table.RunDirection = PdfWriter.RUN_DIRECTION_RTL; // can also be set on the cell
        table.AddCell(cell);
        doc.Add(table);
        doc.Close();
    }
}

你可能想要摆脱细胞边界等,但这些信息可以在SO或iText网站的其他地方找到.iText应该能够处理包含RTL和LTR字符的文本.

编辑

我认为源问题实际上是在Visual Studio和Firefox(我的浏览器)中如何呈现阿拉伯语文本,或者是如何连接字符串.我对阿拉伯语文本编辑器不太熟悉,但如果我们这样做,文本似乎正确:

Visual Studio中的阿拉伯文本

仅供参考我必须截取屏幕截图,因为从VS复制粘贴到浏览器中(反之亦然)会混淆文本部分的顺序.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有