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

时间:2009-10-12 10:12:12

标签: c# itextsharp bidi

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

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

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

4 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:1)

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

您可以将输入视为要打印的简单文本字符串,并且可以使用print的{​​{1}}菜单选项创建正确的PDF。

如果您想更深入地从右到左Notepad打印,请使用StringFormatFlags.DirectionRightToLeft字符串格式和Graphics.DrawString()来电。

来自C#

的摘录
PrintPage Event Handler

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

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