Не работают шрифты при развертывании jasperreport в PDF из веб-приложения

У меня возникают проблемы со шрифтами при развертывании отчетов в моем веб-приложении. Шрифты, которые я хочу иметь в своих PDF-файлах результатов, - Arial, Calibri и Century Gothic.

Я выполнил все шаги, указанные здесь, но не смог заставить его работать.

Вот что я сделал:

Я изменил содержимое моих jasperreports_extension.properties следующим образом:

net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.dejavu=net/sf/jasperreports/fonts/fonts.xml
net.sf.jasperreports.extension.simple.font.families.arial=net/sf/jasperreports/fonts/fonts.xml
net.sf.jasperreports.extension.simple.font.families.calibri=net/sf/jasperreports/fonts/fonts.xml
net.sf.jasperreports.extension.simple.font.families.centurygothic=net/sf/jasperreports/fonts/fonts.xml

Затем в net\sf\jasperreports\fonts я поместил три папки для шрифтов, содержащие четыре стиля (обычный, полужирный, курсив и полужирный курсив) для каждого из ранее упомянутых шрифтов.

Кроме того, изменил файл fonts.xml в net/sf/jasperreports/fonts, и теперь он выглядит так:

<?xml version="1.0" encoding="UTF-8"?>

<fontFamilies>

    <fontFamily name="DejaVu Sans">
        <normal>net/sf/jasperreports/fonts/dejavu/DejaVuSans.ttf</normal>
        <bold>net/sf/jasperreports/fonts/dejavu/DejaVuSans-Bold.ttf</bold>
        <italic>net/sf/jasperreports/fonts/dejavu/DejaVuSans-Oblique.ttf</italic>
        <boldItalic>net/sf/jasperreports/fonts/dejavu/DejaVuSans-BoldOblique.ttf</boldItalic>
        <pdfEncoding>Identity-H</pdfEncoding>
        <pdfEmbedded>true</pdfEmbedded>
        <exportFonts>
            <export key="net.sf.jasperreports.html">'DejaVu Sans', Arial, Helvetica, sans-serif</export>
            <export key="net.sf.jasperreports.xhtml">'DejaVu Sans', Arial, Helvetica, sans-serif</export>
        </exportFonts>
        <!--
        <locales>
            <locale>en_US</locale>
            <locale>de_DE</locale>
        </locales>
        -->
    </fontFamily>

    <fontFamily name="DejaVu Serif">
        <normal>net/sf/jasperreports/fonts/dejavu/DejaVuSerif.ttf</normal>
        <bold>net/sf/jasperreports/fonts/dejavu/DejaVuSerif-Bold.ttf</bold>
        <italic>net/sf/jasperreports/fonts/dejavu/DejaVuSerif-Italic.ttf</italic>
        <boldItalic>net/sf/jasperreports/fonts/dejavu/DejaVuSerif-BoldItalic.ttf</boldItalic>
        <pdfEncoding>Identity-H</pdfEncoding>
        <pdfEmbedded>true</pdfEmbedded>
        <exportFonts>
            <export key="net.sf.jasperreports.html">'DejaVu Serif', 'Times New Roman', Times, serif</export>
            <export key="net.sf.jasperreports.xhtml">'DejaVu Serif', 'Times New Roman', Times, serif</export>
        </exportFonts>
    </fontFamily>

    <fontFamily name="DejaVu Sans Mono">
        <normal>net/sf/jasperreports/fonts/dejavu/DejaVuSansMono.ttf</normal>
        <bold>net/sf/jasperreports/fonts/dejavu/DejaVuSansMono-Bold.ttf</bold>
        <italic>net/sf/jasperreports/fonts/dejavu/DejaVuSansMono-Oblique.ttf</italic>
        <boldItalic>net/sf/jasperreports/fonts/dejavu/DejaVuSansMono-BoldOblique.ttf</boldItalic>
        <pdfEncoding>Identity-H</pdfEncoding>
        <pdfEmbedded>true</pdfEmbedded>
        <exportFonts>
            <export key="net.sf.jasperreports.html">'DejaVu Sans Mono', 'Courier New', Courier, monospace</export>
            <export key="net.sf.jasperreports.xhtml">'DejaVu Sans Mono', 'Courier New', Courier, monospace</export>
        </exportFonts>
    </fontFamily>

    <!--
        Mapping Java logical fonts, for the sake of HTML export only.
    -->

    <fontFamily name="SansSerif">
        <exportFonts>
            <export key="net.sf.jasperreports.html">'DejaVu Sans', Arial, Helvetica, sans-serif</export>
            <export key="net.sf.jasperreports.xhtml">'DejaVu Sans', Arial, Helvetica, sans-serif</export>
        </exportFonts>
    </fontFamily>
    <fontFamily name="Serif">
        <exportFonts>
            <export key="net.sf.jasperreports.html">'DejaVu Serif', 'Times New Roman', Times, serif</export>
            <export key="net.sf.jasperreports.xhtml">'DejaVu Serif', 'Times New Roman', Times, serif</export>
        </exportFonts>
    </fontFamily>
    <fontFamily name="Monospaced">
        <exportFonts>
            <export key="net.sf.jasperreports.html">'DejaVu Sans Mono', 'Courier New', Courier, monospace</export>
            <export key="net.sf.jasperreports.xhtml">'DejaVu Sans Mono', 'Courier New', Courier, monospace</export>
        </exportFonts>
    </fontFamily>

    <fontFamily name="Arial">
       <normal>net/sf/jasperreports/fonts/arial/arial.ttf</normal>
       <bold>net/sf/jasperreports/fonts/arial/ArialBold.ttf</bold>
       <italic>net/sf/jasperreports/fonts/arial/ArialItalic.ttf</italic>
       <boldItalic>net/sf/jasperreports/fonts/arial/ArialBoldItalic.ttf</boldItalic>
       <pdfEncoding>Identity-H</pdfEncoding>
       <pdfEmbedded>true</pdfEmbedded>
       <exportFonts>
           <export key="net.sf.jasperreports.html">'Arial'</export>
           <export key="net.sf.jasperreports.xhtml">'Arial'</export>
       </exportFonts>
    </fontFamily>

    <fontFamily name="Calibri">
       <normal>net/sf/jasperreports/fonts/calibri/calibri.ttf</normal>
       <bold>net/sf/jasperreports/fonts/calibri/calibri-bold.ttf</bold>
       <italic>net/sf/jasperreports/fonts/calibri/calibri-italic.ttf</italic>
       <boldItalic>net/sf/jasperreports/fonts/calibri/calibri-bold-italic.ttf</boldItalic>
       <pdfEncoding>Identity-H</pdfEncoding>
       <pdfEmbedded>true</pdfEmbedded>
       <exportFonts>
           <export key="net.sf.jasperreports.html">'Calibri'</export>
           <export key="net.sf.jasperreports.xhtml">'Calibri'</export>
       </exportFonts>
    </fontFamily>

    <fontFamily name="Century Gothic">
       <normal>net/sf/jasperreports/fonts/centurygothic/century-gothic.ttf</normal>
       <bold>net/sf/jasperreports/fonts/centurygothic/century-gothic-bold.ttf</bold>
       <italic>net/sf/jasperreports/fonts/centurygothic/century-gothic-italic.ttf</italic>
       <boldItalic>net/sf/jasperreports/fonts/centurygothic/century-gothic-bold-italic.ttf</boldItalic>
       <pdfEncoding>Identity-H</pdfEncoding>
       <pdfEmbedded>true</pdfEmbedded>
       <exportFonts>
           <export key="net.sf.jasperreports.html">'Century Gothic'</export>
           <export key="net.sf.jasperreports.xhtml">'Century Gothic'</export>
       </exportFonts>
    </fontFamily>   


</fontFamilies>

Обратите внимание, что я только что добавил последние три шрифта.

После этого я подготовил файл jar и поместил его в classpath своего приложения как обязательный. Пока что я только что экспортировал отчет с обычным шрифтом Sanserif...

Я не знаю, что я делаю не так, есть идеи?

Спасибо!

Краткая справка: я использую Jaspersoft Studio Community Edition (6.3.0), и мое приложение развернуто на сервере JBoss.

2 ответа

Решение

Я наконец узнал, что происходит в моем случае, и теперь это работает.

Когда я ввел шрифты (расширение.ttf) в Jaspersoft Studio Windows-> Preferences-> Fonts, я выбрал неправильное значение для комбинации выбора кодировки PDF. Сначала я выбрал CP1252 (западноевропейский ANSI или WinAnsi), который НЕПРАВИЛЬНО, если вы хотите экспортировать отчеты в PDF, затем я выбрал Identity-H (Unicode с горизонтальной записью) вместо этого, и он работал нормально.

Однако чего я до сих пор не понимаю: если в своем отчете я использую только шрифты Calibri и Century Gothic, почему на земле, когда я иду, чтобы увидеть шрифты, используемые в моем PDF (Файл-> Свойства-> Шрифты), я получить также Helvetica в списке используемых шрифтов?

  1. Экспорт шрифта из отчета Jasper как расширение (.jar) (инструмент / опция / шрифты).
  2. Добавьте экспортированный jar шрифтов в ваш проект.

    https://community.jaspersoft.com/wiki/how-fix-problem-custom-fonts-jasperreports-server

Включив нижеприведенную зависимость maven в ваш pom, жирный стиль будет показан в сгенерированном PDF

<dependency>
  <groupid>net.sf.jasperreports</groupid>
  <artifactid>jasperreports-fonts</artifactid>
  <version>6.0.0</version>
</dependency>
Другие вопросы по тегам