2014-11-05 161 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