Вопрос по api, jdk1.4, unicode, java, pdf-generation – Какой API для создания PDF (Java) поддерживает шрифт Gujarati?

14

Я пробовал iText, PDFBox & amp; Формы Oracle. И я также преуспел в случае с iText для создания PDF документа на гуджарати. Но, к сожалению, он не генерирует правильный шрифт на языке гуджарати (UTF-8).

У меня есть проект в JDK 1.4 & amp; это обязательно для использования. Итак, мне нужна более старая версия API, которая поддерживает шрифт гуджарати.

Пожалуйста, предложите, если какой-либо вариант доступен.

Sample Code:

<code>public void GeneratePDFusingiText(String lStrGujaratidata)
  {
    try
    {

      BaseFont bf = BaseFont.createFont("C:\\Windows\\Fonts\\Shruti.ttf",  BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
      Font font = new Font(bf, 12);
      Document document = new Document();
      PdfWriter.getInstance(document, new FileOutputStream("D:/GeneratePDFusingiText.pdf"));
      document.open();
      document.add(new Paragraph(lStrGujaratidata, font));
      document.close();
    }
    catch(Exception e)
    {
      System.out.println("Exception while generating PDF");
      e.printStackTrace();
    }
   } 
</code>

EDIT 1:

Возможно, изображение не отображается. Это загруженоВот.

EDIT 2:

image of font examples

Step-1) Я набираю гуджарати Строка Google Transliterate.

Step-2) Я конвертирую его в Unicode, используя BableMap Software, чтобы использовать его с помощью Resourse Bundle.

Issue: Дайте мне строку:બિલાડી (Biladi)

Это будет Unicode: \ u0AAC\u0ABF\ U0AB2 \ u0ABE \ u0AA1 \ u0AC0

Проверьте символ Bold Unicode выше. Вот где у меня проблема. Теперь, если я изменю этот юникод на\u0ABF\ u0AAC \ u0AB2 \ u0ABE \ u0AA1 \ u0AC0, он печатает правильный вывод в PDF.

В то же время он выводит неверный вывод в HTML, т.е.િબલાડી

Я должен управлять между ними.

Я пытался использовать & quot; gu & quot; & Амп; & Quot; gu.UTF-8 & Quot; & Амп; & Quot; UTF-8 & Quot ;. Но каждый раз я получаю один и тот же результат.

Привет Саранг, вы ограничены в использовании определенного инструмента отчетности. ?? Если нет, я использовал гуджарати-шрифты с отчетами о яшме, если вы можете использовать отчеты о яшме и вам нужна помощь, дайте мне знать. Anuj Patel
Я не программист на Java, но я бы посмотрел на локаль на вашем месте. Вы установили его на "gu" - Вы пробовали UTF-8? halfer
Я использую шрифт Shruti.ttf (гуджарати). Я редактирую вопрос для дальнейшей информации. Sarang
@indyaah: я видел инструмент Jasper Report. Но внутренне он использует сам iText. Sarang
Я здесь не эксперт, но я бы сказал, что наиболее важными будут шрифты - какие вы используете и в каком формате (TrueType и т. Д.)? Не могли бы вы привести пример снимка экрана, который вы сейчас получаете? halfer

Ваш Ответ

1   ответ
1

Updated Answer

После вашего комментария я понял, что был неправ, то есть диакритический знакshould появляются вторым в последовательности байтов, хотя это должно бытьrendered слева от главного героя.

Таким образом, оказывается, что iText не поддерживает этот тип рендеринга в наборах символов Indic. Грубо говоря, iText использует AWTGraphics2D отображать нелатинские символы Юникода, один за другим, как изображения в PDF. (Я полагаю, это потому, что соответствующие шрифты не обязательно должны быть установлены на каждом компьютере). Эта особенность не принимает во внимание этот особый порядок.

iText поддерживает похожее поведение для арабского языка, используя класс, предоставленный другим разработчиком. Увидетьcom.itextpdf.text.pdf.ArabicLigaturizer, Возможно, вы могли бы создать подобный себе? (!)

Похоже, что до этого дошло:

http://thread.gmane.org/gmane.comp.java.lib.itext.general/56702/focus=59552 http://itext-general.2136553.n4.nabble.com/patch-for-complex-scripts-indic-rendering-td2167588.html

Original Answer

Кем Чхо,

Я полагаю, что iText отображает правильные символы, но первые 2 символа вашего ввода были «перевернуты». прежде чем вы перевели строку в точки Unicode. Итак, проблема возникла еще до того, как данные попали в iText.

Основная проблема заключается в том, что «первый» персонаж является «предварительным основанием»; характер, который является типомдиакритика, Это немного похоже на «акцент»; в европейских текстах, поскольку он не может существовать сам по себе, и его цель состоит в том, чтобы украсить другого персонажа. В этом случае получается «Ba». (& # xAAC;) в 'Bi'.

Вы увидите в кодовой странице Unicode, что первый символ (& # xABF;) действительно является кодовой точкой \ u0ABF, а второй (& # xAAC;) - \ u0AAC:http://en.wikipedia.org/wiki/Gujar%C4%81ti_script#Unicode

Таким образом, где-то между Google Transliterate и вашим представлением кода эти символы перевернулись. Итак, вам нужно пересмотреть, как вы сделали этот перевод.

How did you convert these characters into codepoints?

По-видимому, некоторые переводчики помещают «предварительное основание». после основной согласной, а не перед ней:

Note that when you paste those characters into a (Linux) terminal, the first 2 characters come out back-to-front. I believe something similar happened for you too. You'll also notice that when you try editing this word in Google Transliterate, you can't place the cursor between the first 2 characters, and when you hit backspace, the left character is deleted before the right.

Так что, если вы можете понять, где это «переворачивание» произошло, то, надеюсь, ваше решение представится.

Надеюсь это поможет

Хорошо, сейчас я понимаю. Смотрите мое редактирование. Удачи!!
Используя BableMap согласно редактированию в Вопросе. Sarang
Этот символ, конечно, переворачивается ... Но с HTML & amp; не в порядке с PDF. Вот почему я должен управлять между ними :) Sarang

Похожие вопросы