Реверсирование строк на языках справа налево (двунаправленный) в iTextSharp - PullRequest
5 голосов
/ 12 октября 2009

Я использую iTextSharp (порт C # iText) для создания PDF-файлов из текста / HTML. Большая часть моего текста написана на иврите, справа налево.

Моя проблема в том, что в PDF-файлах отображается язык RTL в обратном порядке, поэтому мне нужно повернуть строки таким образом, чтобы только текст RTL был полностью изменен без изменения чисел или текста на английском языке. Насколько я понимаю, fribidi позволяет делать это на Linux, но я не смог найти решения этой проблемы для Windows.

Буду рад любым предложениям, в том числе альтернативе iTextSharp, которая сделает это автоматически (если таковой существует).

Ответы [ 4 ]

8 голосов
/ 13 августа 2011

Для правильного отображения текстов RTL с помощью iTextSharp:

  • Вам необходимо установить кодировку шрифта на BaseFont.IDENTITY_H
  • Затем вы должны использовать элементы контейнера, которые поддерживают RunDirection, такие как PdfPCell, ColumnText и т. Д., И теперь вы можете установить их element.RunDirection = PdfWriter.RUN_DIRECTION_RTL;
1 голос
/ 03 ноября 2009

PDFCreator - это бесплатный инструмент для создания файлов PDF практически из любого приложения Windows. Он устанавливается как драйвер принтера Windows, так что он может использоваться любой программой Windows, которая имеет функцию печати. ​​

Вы можете воспринимать ввод как простые текстовые строки для печати, и, возможно, с помощью опции меню print Notepad создаст правильный PDF.

Если вы хотите глубже погрузиться в печать справа налево C#, используйте строковый формат StringFormatFlags.DirectionRightToLeft с вызовами Graphics.DrawString().

Фрагмент из PrintPage Event Handler:

lineFmt = new StringFormat(StringFormatFlags.DirectionRightToLeft);
e.Graphics.DrawString(textToPrint, font, Brushes.Black, startX, ypos, lineFmt);
1 голос
/ 01 февраля 2010

Просто поместите строку в ячейку таблицы:

PdfPCell cell1 = new PdfPCell(new Phrase("מספר",font));
cell1.HorizontalAlignment = 2; //0=Left, 1=Centre, 2=Right
0 голосов
/ 23 октября 2009

HTML отображает иврит / арабский в логическом режиме, а в PDF вам нужно сохранить его в визуальном режиме. Что вам нужно сделать, это конвертировать из логического в визуальный режим. Есть некоторые библиотеки, которые делают это (Google для MiniBidi, который является лицензией BSD IMHO, или Fribidi, который является GPL или LGPL).

Мое настоящее предложение - изменить направление. Напишите очень маленькое приложение в Qt4, которое в качестве первого аргумента принимает URL-адрес, а второй - PDF-файл для записи. Так как Qt4 имеет поддержку HTML (через QtWebKit), имеет возможность печатать в PDF (также пост-скрипт и SVG), это должно быть проще, чем написание собственного HTML-> PDF-решения.

...