Не удалось получить символ индийских рупий для отображения в PDF, созданном с помощью Flying Saucer - PullRequest
0 голосов
/ 02 января 2019

Я пробую несколько разных способов, но я не могу получить PDF-файл, созданный с помощью Flying Saucer (из HTML-файла), чтобы показать символ юникода для индийских рупий - "₹"

Вот что у меня сейчас:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

    <style>
      body {
        font-family: Arial Unicode MS, Lucida Sans Unicode, Arial, verdana, arial, helvetica, sans-serif;
      }      

      @font-face {
        font-family: 'Arial Unicode MS';
        src: url(arialunicodems.ttf);
        -fs-pdf-font-embed: embed;
        -fs-pdf-font-encoding: UTF-8;
        -fs-pdf-font-encoding: Identity-H;
        font-weight: normal;
      }

    </style>

  </head>
  <body>

    <p>We want to see a Indian Rupees symbol between the asterisks on one or more of these lines, in the PDF (if any of the symbols make it through to the PDF then we're good):</p>
    <p>Using the glyph itself in the markup: * ₹ *</p>
    <p>Using &amp;#x20B9; in the markup: * &#x20B9; *</p>
    <p>Using &amp;#8377; in the markup: * &#8377; *</p>

  </body>
</html>

, который представляет множество различных экспериментов, ни один из которых не работал. Файл шрифта, на который он ссылается, находится рядом с версией html-файла выше.

Кажется, что сам шрифт загружается, так как текст в файле PDF выглядит как Arial. Просто отсутствует символ рупий. Я не знаю, что еще делать - я вытаскиваю шрифт Unicode, и сам HTML-файл выглядит хорошо, когда просматривается в браузере. Когда я печатаю его из хрома, он тоже выглядит нормально, так что проблема определенно с летающей тарелкой, я думаю.

Я использую Летающую тарелку следующим образом:

/usr/bin/java -Djava.awt.headless=true -cp .:$FS_PATH/acts_as_flying_saucer/lib/java/bin:$FS_PATH/acts_as_flying_saucer/lib/java/jar/minium.jar:$FS_PATH/acts_as_flying_saucer/lib/java/jar/itext-paulo-155.jar:$FS_PATH/acts_as_flying_saucer/lib/java/jar/core-renderer.jar:$FS_PATH/acts_as_flying_saucer/lib/java/jar/java-getopt-1.0.13.jar Xhtml2Pdf /home/max/font_test.html /home/max/font_test.pdf

Кто-нибудь может увидеть, что я делаю что-то не так?

1 Ответ

0 голосов
/ 02 января 2019

Я отвечаю на свой вопрос здесь на случай, если кто-то еще совершит ту же ошибку.Ответ оказался очень простым - дело не в шрифте!Оказывается, что символ «₹» был изобретен только в 2010 году, и поэтому его нет во многих файлах шрифтов Unicode, включая тот, который я использовал.

Он работал в браузере, потому что браузер (Chrome) автоматически искал его в других наборах символов (без моего явного запроса), и нашел его в Deja Vu Sans, как это происходит (запасной вариант для LinuxХром).

Я изменил свой код, чтобы использовать более старый (но все еще приемлемый) символ "₨", но более правильным было бы включить шрифт, который на самом деле имеет современный символ рупий.

...