6

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

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

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

4

4 回答 4

8

正确使用 iTextSharp 显示 RTL 文本:

  • 您需要将字体的编码设置为BaseFont.IDENTITY_H
  • 然后你必须使用支持的容器元素RunDirection,例如PdfPCellColumnText等,现在你可以设置它们element.RunDirection = PdfWriter.RUN_DIRECTION_RTL;
于 2011-08-13T05:11:26.150 回答
1

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

PdfPCell cell1 = new PdfPCell(new Phrase("מספר",font));
cell1.HorizontalAlignment = 2; //0=Left, 1=Centre, 2=Right
于 2010-02-01T17:39:10.210 回答
1

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

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

于 2009-10-22T22:47:56.697 回答
1

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

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

如果您想更深入地研究从右到左的C#打印,请在调用中使用StringFormatFlags.DirectionRightToLeft字符串格式。Graphics.DrawString()

来自 a 的片段PrintPage Event Handler

lineFmt = new StringFormat(StringFormatFlags.DirectionRightToLeft);
e.Graphics.DrawString(textToPrint, font, Brushes.Black, startX, ypos, lineFmt);
于 2009-11-03T14:42:43.620 回答