Unity3d iTextSharp阿拉伯文PDF报告

时间:2014-11-06 12:39:15

标签: pdf unity3d itextsharp monodevelop arabic

我正在使用iTextSharp生成Unity3d的报告,

问题是显示阿拉伯字符。有一个XML文件,我正在解析一些阿拉伯语文本,当我把它放在PDF中时,它显示得很好。但是当我在MonoDevelop中放入普通字符串并尝试以PDF格式显示它时,它会显示一些奇怪的字符。

这是我的代码:

Document doc = new Document(iTextSharp.text.PageSize.A4, 10, 10, 20, 20);
        PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream("TestPDF.pdf", FileMode.Create));
        doc.Open();
        string fontPath =  Application.dataPath + "\\Fonts\\Arial.ttf";
//      string fontPath =  Application.dataPath + "\\Fonts\\arabtype.ttf";
        BaseFont basefont = BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        string tt = GameObject.Find("TextPlay").GetComponent<TextMesh>().text; //parsed text
        iTextSharp.text.Font normalFont = new iTextSharp.text.Font(basefont, 35, iTextSharp.text.Font.NORMAL, BaseColor.BLACK);

        PdfPTable tableUnit = new PdfPTable(2);
        tableUnit.DefaultCell.NoWrap = false;
        tableUnit.RunDirection = PdfWriter.RUN_DIRECTION_RTL;
        tableUnit.DefaultCell.Border = Rectangle.NO_BORDER;
        tableUnit.SpacingBefore = 30f;
        tableUnit.KeepTogether = true;

        PdfPCell questionOneCell = new PdfPCell(new Phrase("نتائجك", normalFont));
        questionOneCell.NoWrap = false;
        questionOneCell.BorderWidth = 0;
        questionOneCell.BackgroundColor = nColor;
        questionOneCell.HorizontalAlignment = Element.ALIGN_CENTER;
        questionOneCell.VerticalAlignment = Element.ALIGN_CENTER;
        tableUnit.AddCell(questionOneCell);

        doc.Add(tableUnit);
        doc.Close();

我确实尝试了几种字体,但没有任何改变。

1 个答案:

答案 0 :(得分:1)

请查看我对以下问题的回答的第一部分:Can't get Czech characters while generating a PDF

允许我复制/粘贴该部分以回答您的问题:

您正在编写包含特殊字符的代码:

"Testing of letters Č,Ć,Š,Ž,Đ"

这是一种不好的做法。代码文件以纯文本格式存储,可以使用不同的编码进行保存。意外切换编码(例如:将其上传到使用不同编码的版本控制系统)会严重损坏文件内容。

您应该编写不包含特殊字符但使用其他符号的代码。例如:

"Testing of letters \u010c,\u0106,\u0160,\u017d,\u0110"

这也将确保在使用需要不同编码的编译器编译代码时,内容不会被更改。

您遇到了同样的问题:

在源代码中使用"نتائجك"是错误的编程习惯。您应该始终使用unicode表示法将文字字符串放在代码中。如果您不这样做,并且使用错误的编码保存文件(例如,将其上传到版本控制系统),或者使用错误的编码编译文件,或者如果您在使用错误的环境中执行文件编码,然后你遇到问题。

更好:

切勿在源代码中存储硬编码值。请改用属性文件和文本文件。确保文件存储并以UTF-8格式读取。