我想在C#中创建一个包含阿拉伯文本内容的PDF文件.我正在使用iTextSharp来创建它.我按照http://geekswithblogs.net/JaydPage/archive/2011/11/02/using-itextsharp-to-correctly-display-hebrew--arabic-text-right.aspx中的说明进行操作.我想在pdf中插入以下阿拉伯语句子.
تمإبرامهذاالعقدفيههااليوم[●]مالموافق[●]منقبلوبين.
[●]需要用动态英语单词替换.我尝试使用ARIALUNI.TTF实现这一点[本教程链接建议].代码如下.
public void WriteDocument() { //Declare a itextSharp document Document document = new Document(PageSize.A4); //Create our file stream and bind the writer to the document and the stream PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(@"D:\Test.Pdf", FileMode.Create)); //Open the document for writing document.Open(); //Add a new page document.NewPage(); //Reference a Unicode font to be sure that the symbols are present. BaseFont bfArialUniCode = BaseFont.CreateFont(@"D:\ARIALUNI.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); //Create a font from the base font Font font = new Font(bfArialUniCode, 12); //Use a table so that we can set the text direction PdfPTable table = new PdfPTable(1); //Ensure that wrapping is on, otherwise Right to Left text will not display table.DefaultCell.NoWrap = false; //Create a regex expression to detect hebrew or arabic code points const string regex_match_arabic_hebrew = @"[\u0600-\u06FF,\u0590-\u05FF]+"; if (Regex.IsMatch("? ???????", regex_match_arabic_hebrew, RegexOptions.IgnoreCase)) { table.RunDirection = PdfWriter.RUN_DIRECTION_RTL; } //Create a cell and add text to it PdfPCell text = new PdfPCell(new Phrase(" : "+"?? ??? ????" + " 2007 " + "? ???????" + " dsdsdsdsds " + "?? ????? ??? ????? ?? ??? ????? ", font)); //Ensure that wrapping is on, otherwise Right to Left text will not display text.NoWrap = false; //Add the cell to the table table.AddCell(text); //Add the table to the document document.Add(table); //Close the document document.Close(); //Launch the document if you have a file association set for PDF's Process AcrobatReader = new Process(); AcrobatReader.StartInfo.FileName = @"D:\Test.Pdf"; AcrobatReader.Start(); }
在调用此函数时,我得到了一个带有一些Unicode的PDF,如下所示.
اذهيفدقعلااذهماربإمتdsdsdsdsdsقفاوملام2007نيبولبقنممويلا
它与我们的硬编码阿拉伯语句子不匹配.这是字体问题吗?请帮助我或建议我实施相同的任何其他方法.
@csharpcoder有正确的想法,但他的执行是关闭的.他没有将单元格添加到表格中,并且表格不会在文档中结束.
void Go() { Document doc = new Document(PageSize.LETTER); string yourPath = "foo/bar/baz.pdf"; using (FileStream os = new FileStream(yourPath, FileMode.Create)) { PdfWriter.GetInstance(doc, os); // you don't need the return value doc.Open(); string fontLoc = @"c:\windows\fonts\arialuni.ttf"; // make sure to have the correct path to the font file BaseFont bf = BaseFont.CreateFont(fontLoc, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); Font f = new Font(bf, 12); PdfPTable table = new PdfPTable(1); // a table with 1 cell Phrase text = new Phrase("?????", f); PdfPCell cell = new PdfPCell(text); table.RunDirection = PdfWriter.RUN_DIRECTION_RTL; // can also be set on the cell table.AddCell(cell); doc.Add(table); doc.Close(); } }
你可能想要摆脱细胞边界等,但这些信息可以在SO或iText网站的其他地方找到.iText应该能够处理包含RTL和LTR字符的文本.
我认为源问题实际上是在Visual Studio和Firefox(我的浏览器)中如何呈现阿拉伯语文本,或者是如何连接字符串.我对阿拉伯语文本编辑器不太熟悉,但如果我们这样做,文本似乎正确:
仅供参考我必须截取屏幕截图,因为从VS复制粘贴到浏览器中(反之亦然)会混淆文本部分的顺序.