Unity3d iTextSharp阿拉伯语文本格式

时间:2014-11-05 11:51:47

标签: c# pdf unity3d itextsharp arabic

我在Unity3d中使用iTextSharp进行PDF生成。

修改

这是代码,但我得到一个空的PDF文档:

    void createPDF()
    {
        Document doc = new Document(iTextSharp.text.PageSize.A1, 5, 5, 5, 5);
        PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream("TestPDF.pdf", FileMode.Create));
        doc.Open();
        string fontPath =  "C:\\windows\\Fonts\\arialuni.ttf";
        BaseFont basefont = BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        iTextSharp.text.Font tahomaFont = new iTextSharp.text.Font(basefont, 10, iTextSharp.text.Font.NORMAL, BaseColor.RED);
        PdfContentByte cb = wri.DirectContent;
        ColumnText ct = new ColumnText(cb);
        Phrase myText = new Phrase(GameObject.Find("TextPlay").GetComponent<TextMesh>().text);
        ct.SetSimpleColumn(myText, 34, 750, 580, 317, 15, Element.ALIGN_LEFT);
        ct.Go();

        doc.Close();
    }

1 个答案:

答案 0 :(得分:3)

错误消息告诉您字体ArialJezici.ttf不能与编码Identity_H一起使用,因此您必须将该字体替换为另一种字体,例如ArialUni.ttf

实际上,这应该有效:

BaseFont bf = iTextSharp.text.pdf.BaseFont.CreateFont("C:\\WINDOWS\\Fonts\\ARIALUNI.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

请注意,您需要提供正确的路径。我不认为你在你的例子中这样做。

如果上述代码段不起作用,请参阅itextsharp ARIALUNI.TTF copy on hosting server以获取有关如何执行此操作的替代示例。

请注意,阿拉伯语连字仅适用于PdfPCellColumnText个对象的上下文,但它们无法在添加到Paragraph的{​​{1}}中使用,因为您无法设置Document的跑步方向。您只能设置单元格或列的运行方向。

如果您没有设置跑步方向,阿拉伯文本将从左向右书写,不会出现任何连字,导致阿拉伯语不正确。

与StackOverflow上的规则相反,原始问题已更改,导致我的答案不再是新版本问题的答案。这是针对当前问题的更新:

在我的答案的第一部分中创建Paragraph,创建一个BaseFont

Font

现在创建一个Font font = new Font(bf, 20); 对象并提供适合您页面的坐标:

ColumnText

如果这些坐标不适合您的页面,您的内容将被添加到文件中,但您将看不到任何内容,因为内容位于页面的可见区域之外< / em>的

对于阿拉伯语文本,设置运行方向很重要(我不认为你在任何地方都这样做):

ColumnText column = new ColumnText(writer.DirectContent);
column.SetSimpleColumn(36, 730, 569, 36);

现在添加内容:

column.RunDirection = PdfWriter.RUN_DIRECTION_RTL;

这对我有用,请参阅Java examplecorresponding C# example,生成此文件:ligatures_2.pdf

该文件三次显示阿拉伯文字“لورانسالعرب”。第一次,字符的顺序不正确。第二次,字符顺序正确,但没有连字。第三次,它显示正确。