我正在使用 iTextSharp(C# iText 端口)从 text/html 创建 pdf。我的大部分文字都是希伯来语,一种从右到左的语言。
我的问题是 PDF 会反向显示 RTL 语言,因此我需要以仅反转 RTL 文本而不反转任何数字或英文文本的方式反转我的字符串。据我了解,fribidi 允许在 linux 上执行此操作,但我找不到针对 Windows 的此问题的任何解决方案。
我欢迎任何建议,包括可以自动执行此操作的 iTextSharp 替代方案(如果存在)。
我正在使用 iTextSharp(C# iText 端口)从 text/html 创建 pdf。我的大部分文字都是希伯来语,一种从右到左的语言。
我的问题是 PDF 会反向显示 RTL 语言,因此我需要以仅反转 RTL 文本而不反转任何数字或英文文本的方式反转我的字符串。据我了解,fribidi 允许在 linux 上执行此操作,但我找不到针对 Windows 的此问题的任何解决方案。
我欢迎任何建议,包括可以自动执行此操作的 iTextSharp 替代方案(如果存在)。
正确使用 iTextSharp 显示 RTL 文本:
BaseFont.IDENTITY_H
RunDirection
,例如PdfPCell
,ColumnText
等,现在你可以设置它们element.RunDirection = PdfWriter.RUN_DIRECTION_RTL
;只需将字符串放在表格单元格中:
PdfPCell cell1 = new PdfPCell(new Phrase("מספר",font));
cell1.HorizontalAlignment = 2; //0=Left, 1=Centre, 2=Right
HTML 以逻辑模式显示希伯来语/阿拉伯语,而在 PDF 中您需要将其存储为可视模式。您需要做的是将逻辑模式转换为可视模式。有一些库可以做到这一点(google for minibidi,它是 BSD 许可的恕我直言,或 fribidi,它是 GPL 或 LGPL)。
我真正的建议是改变方向。在 Qt4 中编写一个非常小的应用程序,第一个参数是 URL,第二个参数是要编写的 PDF。由于 Qt4 具有 HTML 支持(通过 QtWebKit)可以选择打印到 PDF(post script 和 SVG),这应该比编写自己的 HTML-> PDF 解决方案更简单。
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);