我在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();
}
答案 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以获取有关如何执行此操作的替代示例。
请注意,阿拉伯语连字仅适用于PdfPCell
和ColumnText
个对象的上下文,但它们无法在添加到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 example或corresponding C# example,生成此文件:ligatures_2.pdf
该文件三次显示阿拉伯文字“لورانسالعرب”。第一次,字符的顺序不正确。第二次,字符顺序正确,但没有连字。第三次,它显示正确。