Индийская поддержка шрифтов в Apache FOP - PullRequest
0 голосов
/ 28 января 2019

При использовании Apache FOP 2.2 из моего Java-приложения для печати строк хинди в PDF с помощью mangal.ttf некоторые символы хинди отображаются неправильно.
Я использую JDK 1.8 и пружинный MVC.

Я пробовал lohit.ttf, devanagari.ttf, aparajita.ttf и kokila.ttf, но у всех одна и та же проблема.

case 1:

Когда fop-conf.xml установлен так, как показано ниже:

<font kerning="yes"    embed-url="classpath:/mangal.ttf"   >
<font-triplet name="Mangal" style="normal" weight="normal"></font-triplet>
</font>   

Результат: से отображается следующим образом स े, как показано на этом скриншоте

case1

case 2:

Когда для fop-conf.xml задано следующее:

<font kerning="yes"   metrics-url="classpath:/mangal.xml" embed-url="classpath:/mangal.ttf"   >
<font-triplet name="Mangal" style="normal" weight="normal"></font-triplet>
</font>

Результат: проблема, указанная в случае 1, решена, но я столкнулся с другой проблемой, прикрепленной, как показано на следующем снимке экрана

case2


Вы можете увидеть ожидаемый результат по ссылке https://www.fonts.com/font/microsoft-corporation/aparajita), используя этот образец текста:

से and ग्रामीण should be printed in pdf

OtherВот что я пробовал:

  • Я пытался PDFOne для создания PDF.И все же та же проблема.Однако Windows, кажется, показывает его правильно.
  • настройка комплексного сценария: <fop version="1.0"> <complex-scripts disabled="true"/> ... </fop>
  • с использованием атрибута script: <fo:block font-family="ARIALUNI" script="dev2" > देवी ग्रामीण</fo:block>

Есть ли какие-либо настройки конфигурации в FOP, которые мне не хватает?

1 Ответ

0 голосов
/ 01 февраля 2019

Короче, общий ответ:

Если шрифт настроен, но вывод неправильный, проблема может заключаться в том, что FOP неправильно определяет, какой режим сценария использовать.

Решение: явно задает свойство script в файле FO, используя standard или extended код сценария.
Обратите внимание, что Индийские сценарии имеют как стандартный код, так и расширенный (например, deva и dev2 для Деванагари), и в результате вывод отличается, поэтому вам может потребоватьсяпопробуйте оба варианта и выберите подходящий.

Более длинный ответ:

У меня нет доступных шрифтов, о которых вы упомянули, поэтому я протестировал с помощью Amiko Google OpenШрифт.
Что более важно, я ничего не знаю о скрипте деванагари, поэтому я действительно не могу сказать, является ли вывод правильным или неправильным , я могу сравнить его только с вашими изображениями.

Это полный входной файл , который я использовал, с предложением, скопированным из вашего вопроса:

<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <fo:layout-master-set>
    <fo:simple-page-master master-name="simpleA4" page-height="29.7cm" page-width="21cm" margin-top="2cm" margin-bottom="2cm" margin-left="2cm" margin-right="2cm">
      <fo:region-body/>
    </fo:simple-page-master>
  </fo:layout-master-set>
  <fo:page-sequence master-reference="simpleA4">
    <fo:flow flow-name="xsl-region-body">
      <fo:block font-family="Amiko" script="deva">deva: से and ग्रामीण should be printed in pdf</fo:block>
      <fo:block font-family="Amiko" script="dev2">dev2: से and ग्रामीण should be printed in pdf</fo:block>
    </fo:flow>
  </fo:page-sequence>
</fo:root>

Вот минимальная конфигурация :

<?xml version="1.0"?>
<fop version="1.0">
  <renderers>
    <renderer mime="application/pdf">
      <fonts>
        <font kerning="yes" embed-url="Amiko/Amiko-Regular.ttf">
          <font-triplet name="Amiko" style="normal" weight="normal"/>
        </font>
      </fonts>
    </renderer>
  </renderers>
</fop>

, который производит вывод :

output with complex script ON

Если я правильно понимаю, вы пытаетесь получить вывод с script="deva".


Обратите внимание, что атрибут metrics-url в вашей конфигурациине требуется.

Более того, добавление <complex-scripts disabled="true"/> в вашу конфигурацию приводит к отключению поддержки "сложного сценария", поэтому я ожидаю, что это приведет к неправильному вывод.

Эта конфигурация

<?xml version="1.0"?>
<fop version="1.0">
  <complex-scripts disabled="true"/>
  <renderers>
    <renderer mime="application/pdf">
      <fonts>
        <font kerning="yes" embed-url="Amiko/Amiko-Regular.ttf">
          <font-triplet name="Amiko" style="normal" weight="normal"/>
        </font>
      </fonts>
    </renderer>
  </renderers>
</fop>

производит следующие выходные данные :

enter image description here

...