Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reversing Strings in Right To Left (BiDirectional) Languages in 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).

like image 488
Zack Avatar asked Oct 12 '09 10:10

Zack


2 Answers

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;
like image 193
VahidN Avatar answered Sep 24 '22 02:09

VahidN


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.

like image 20
elcuco Avatar answered Sep 21 '22 02:09

elcuco