2014-11-05 158 views
-1

我使用iTextSharp在Unity3d中生成PDF。Unity3d iTextSharp阿拉伯语文本格式化

编辑

下面是代码,但我得到一个空的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(); 
    } 

回答

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添加到Document,因为你不能设置一个Paragraph的运行方向。您只能设置单元格或列的运行方向。

如果你没有设置你的跑步方向,阿拉伯文本将从左到右书写,并且不会进行连字,导致这是不正确的阿拉伯语。

与StackOverflow的规则相反,原来的问题发生了变化,导致我的答案不再是新问题的答案。这与大雁到当前问题的更新:

随着我的回答的第一部分中创建的BaseFont,创建一个Font:适合

Font font = new Font(bf, 20); 

现在创建一个ColumnText对象,并提供坐标您的页面:

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

如果这些坐标不适合你页面,你的内容将被添加到该文件,但你会不发因为内容是页面可见区域外的

对于阿拉伯文字,您设定的运行方向是很重要的(我不知道你这样做的任何地方):

column.RunDirection = PdfWriter.RUN_DIRECTION_RTL; 

现在添加内容:

column.AddElement(new Paragraph(GameObject.Find("TextPlay").GetComponent<TextMesh>().text)); 
column.Go(); 

该作品对我来说,看到Java examplecorresponding C# example,导致这个文件:ligatures_2.pdf

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

+0

“ArialUni.tff”出现同样的错误。 – filipst 2014-11-05 12:32:06

+0

你确定你正在使用正确的路径吗? – 2014-11-05 12:35:34

+0

其实我不确定。字体在Assets/Fonts文件夹中,我尝试了'/ Assets/Fonts/ArialUni.tff','Assets/Fonts/ArialUni.tff','/ Fonts/ArialUni.tff','Fonts/ArialUni.tff ' – filipst 2014-11-05 12:40:45