在iTextSharp中反转从右到左(双向)语言的字符串

我正在使用iTextSharp(C#iText端口)从text / html创建pdf。 我的大部分文字都是希伯来语,一种从右到左的语言。

我的问题是PDF反向显示RTL语言,所以我需要以一种只能反转RTL文本的方式来反转我的字符串而不用英语反转任何数字或文本。 据我所知,fribidi允许在linux上执行此操作,但我无法找到针对此问题的任何解决方案。

我欢迎任何建议,包括iTextSharp的替代方案,它会自动执行此操作(如果存在)。

要正确使用iTextSharp显示RTL文本:

  • 您需要将字体的编码设置为BaseFont.IDENTITY_H
  • 然后你必须使用支持RunDirection容器元素,比如PdfPCellColumnText等,现在你可以设置它们的element.RunDirection = PdfWriter.RUN_DIRECTION_RTL ;

PDFCreator是一个免费工具,几乎可以从任何Windows应用程序创建PDF文件。 它安装为Windows打印机驱动程序,因此任何具有打印function的Windows程序都可以使用它。

您可以将输入视为要打印的简单文本字符串,也许使用Notepadprint菜单选项将创建正确的PDF。

如果你想深入了解从右到左的C#打印,请使用StringFormatFlags.DirectionRightToLeft字符串格式和Graphics.DrawString()调用。

PrintPage Event Handler片段:

 lineFmt = new StringFormat(StringFormatFlags.DirectionRightToLeft); e.Graphics.DrawString(textToPrint, font, Brushes.Black, startX, ypos, lineFmt); 

只需将字符串放在表格单元格中:

 PdfPCell cell1 = new PdfPCell(new Phrase("מספר",font)); cell1.HorizontalAlignment = 2; //0=Left, 1=Centre, 2=Right 

HTML以逻辑模式显示希伯来语/阿拉伯语,在PDF中,您需要将其存储为可视模式。 您需要做的是从逻辑模式转换为可视模式。 有一些图书馆这样做(google为minibidi是BSD许可的恕我直言,或fribidi是GPL或LGPL)。

我真正的建议是改变方向。 在Qt4中编写一个非常小的应用程序,它将URL作为第一个参数,第二个是要编写的PDF。 由于Qt4具有HTML支持(通过QtWebKit)可以选择打印到PDF(后脚本和SVG),这应该更简单,然后编写自己的HTML-> PDF解决方案。