在 iTextSharp 中从右到左(双向)语言反转字符串
我正在使用 iTextSharp(C# iText 端口)从文本/html 创建 pdf。我的大部分文字都是希伯来语,一种从右到左的语言。
我的问题是 PDF 以相反的方式显示 RTL 语言,因此我需要以一种仅反转 RTL 文本而不反转任何英文数字或文本的方式反转字符串。 据我了解,fribidi 允许在 Linux 上执行此操作,但我找不到针对 Windows 的此问题的任何解决方案。
我欢迎任何建议,包括 iTextSharp 的替代方案,它可以自动执行此操作(如果存在)。
I'm using iTextSharp( C# iText port) to create pdfs from text/html. Most of my text is in Hebrew, a Right-To-Left language.
My problem is that PDFs show RTL langauge in reverse, so I need to reverse my strings in a way that would only reverse the RTL text without reversing any numbers or text in English.
It is my understanding that fribidi allows doing that on linux, but I couldn't find any solutions for this problem for Windows.
I would welcome any suggestions, including an alternative to iTextSharp that would do this automatically (if one exists).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
要正确使用 iTextSharp 显示 RTL 文本:
BaseFont.IDENTITY_H
RunDirection
的容器元素,例如PdfPCell
、ColumnText
等,现在您可以设置它们的element.RunDirection = PdfWriter.RUN_DIRECTION_RTL
;To show RTL texts by using iTextSharp correctly:
BaseFont.IDENTITY_H
RunDirection
, such asPdfPCell
,ColumnText
, etc. and now you can set theirelement.RunDirection = PdfWriter.RUN_DIRECTION_RTL
;HTML 以逻辑模式显示希伯来语/阿拉伯语,而在 PDF 中,您需要将其存储为可视模式。您需要做的是将逻辑模式转换为视觉模式。有一些库可以做到这一点(谷歌搜索 minibidi,恕我直言,它是 BSD 许可的,或者 fribidi 是 GPL 或 LGPL)。
我真正的建议是改变方向。在 Qt4 中编写一个非常小的应用程序,其第一个参数是 URL,第二个参数是要写入的 PDF。由于 Qt4 有 HTML 支持(通过 QtWebKit),可以选择打印到 PDF(还有后脚本和 SVG),这应该比编写自己的 HTML->PDF 解决方案更简单。
HTML displays Hebrew/Arabic in Logical mode, and in PDF you need to store it Visual mode. What you need to do is convert from Logical to Visual mode. There are some libraries which do this (google for minibidi which is BSD licensed IMHO, or fribidi which is GPL or LGPL).
My real suggestion would be to change direction. Write a very small application in Qt4 which takes as first argument the URL, and the second the PDF to write. Since Qt4 has HTML support (via QtWebKit) has has the option to print to PDF (post script and SVG as well) this should be simpler then writing your own HTML->PDF solution.
PDFCreator 是一款免费工具,几乎可以从任何 Windows 应用程序创建 PDF 文件。
它作为 Windows 打印机驱动程序安装,因此任何具有打印功能的 Windows 程序都可以使用它。
您可以将输入视为要打印的简单文本字符串,并且也许使用
Notepad
的print
菜单选项将创建正确的 PDF。如果您想更深入地了解从右到左的
C#
打印,请使用StringFormatFlags.DirectionRightToLeft
字符串格式,具有Graphics.DrawString()
调用。来自
PrintPage 事件处理程序
的片段:PDFCreator is a free tool to create PDF files from nearly any Windows application.
It installs as a Windows printer driver, such that it can be used by any Windows program that has a print functionality.
You can treat your input as simple text strings to be printed, and maybe using the
print
menu option ofNotepad
will create the correct PDF.If you want to dive a little deeper into right to left
C#
printing, useStringFormatFlags.DirectionRightToLeft
string format withGraphics.DrawString()
calls.A snippet from a
PrintPage Event Handler
:只需将字符串放入表格单元格中即可:
Just put the string in table cell: