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

发布于 2024-08-07 16:16:39 字数 265 浏览 6 评论 0原文

我正在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

情绪失控 2024-08-14 16:16:39

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

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

To show RTL texts by using iTextSharp correctly:

  • You need to set the font's encoding to BaseFont.IDENTITY_H
  • Then you have to use container elements which support RunDirection, such as PdfPCell, ColumnText, etc. and now you can set their element.RunDirection = PdfWriter.RUN_DIRECTION_RTL;
清浅ˋ旧时光 2024-08-14 16:16:39

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.

如日中天 2024-08-14 16:16:39

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

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

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

来自 PrintPage 事件处理程序 的片段:

lineFmt = new StringFormat(StringFormatFlags.DirectionRightToLeft);
e.Graphics.DrawString(textToPrint, font, Brushes.Black, startX, ypos, lineFmt);

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 of Notepad will create the correct PDF.

If you want to dive a little deeper into right to left C# printing, use StringFormatFlags.DirectionRightToLeft string format with Graphics.DrawString() calls.

A snippet from a PrintPage Event Handler:

lineFmt = new StringFormat(StringFormatFlags.DirectionRightToLeft);
e.Graphics.DrawString(textToPrint, font, Brushes.Black, startX, ypos, lineFmt);
梦途 2024-08-14 16:16:39

只需将字符串放入表格单元格中即可:

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

Just put the string in table cell:

PdfPCell cell1 = new PdfPCell(new Phrase("מספר",font));
cell1.HorizontalAlignment = 2; //0=Left, 1=Centre, 2=Right
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文