C# 在iTextSharp中以从右向左(双向)语言反转字符串

C# 在iTextSharp中以从右向左(双向)语言反转字符串,c#,itextsharp,bidi,C#,Itextsharp,Bidi,我正在使用iTextSharp(C#iText端口)从text/html创建PDF。我的大部分文本是希伯来语,一种从右到左的语言 我的问题是PDF以相反的方式显示RTL语言,所以我需要以一种只反转RTL文本而不反转任何数字或英文文本的方式反转字符串。 据我所知,fribidi允许在linux上这样做,但我无法为Windows找到任何解决此问题的方法 我欢迎您提出任何建议,包括一个自动执行此操作的iTextSharp替代方案(如果存在)。HTML以逻辑模式显示希伯来文/阿拉伯文,而PDF则需要以可

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

我的问题是PDF以相反的方式显示RTL语言,所以我需要以一种只反转RTL文本而不反转任何数字或英文文本的方式反转字符串。 据我所知,fribidi允许在linux上这样做,但我无法为Windows找到任何解决此问题的方法


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

HTML以逻辑模式显示希伯来文/阿拉伯文,而PDF则需要以可视模式存储。您需要做的是从逻辑模式转换为视觉模式。有一些库可以做到这一点(google for minibidi是BSD许可的IMHO,或者fribidi是GPL或LGPL)

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

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

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

如果您想更深入地了解从右到左
C#
打印,请在调用时使用字符串格式

来自
PrintPage事件处理程序的代码段

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

要正确使用iTextSharp显示RTL文本,请执行以下操作:

  • 您需要将字体的编码设置为
    BaseFont.IDENTITY\u H
  • 然后您必须使用支持
    RunDirection
    的容器元素,例如
    PdfPCell
    ColumnText
    ,现在您可以设置它们的
    element.RunDirection=PdfWriter.RUN\u-DIRECTION\u-RTL