JasperReports не поддерживает шрифты при экспорте в pdf

Мое приложение Java создает файл PDF, заполняющий отчет JasperReports, но когда я открываю файл PDF, шрифты всегда «Arial», в отчете установлено значение «DejaVu Sans».

Когда я использую функции JasperReports для экспорта в файл PDF, все работает хорошо (после этого я импортировал файл .ttf DejaVu Sans). Проблема сохраняется только тогда, когда я использую приложение Java.

Вот начало одного из моих подотчетов.

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="sub_21" pageWidth="515" pageHeight="842" columnWidth="515" leftMargin="0" rightMargin="0" topMargin="30" bottomMargin="0" uuid="34ff3034-41c3-4268-b500-7252cbe01a14">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <parameter name="acp" class="acp.pdfengine.entities.PdfData"/>
    <detail>
        <band height="376" splitType="Stretch">
            <textField isBlankWhenNull="true">
                <reportElement positionType="Float" x="0" y="0" width="181" height="21" isRemoveLineWhenBlank="true" uuid="7b1fe94a-28dd-42d1-b6db-ee2dcc2d7020"/>
                <textElement>
                    <font fontName="DejaVu Sans" size="12" isBold="true"/>
                </textElement>
                <textFieldExpression><![CDATA[$P{acp}.getPdfWords().getRESULT_title()]]></textFieldExpression>
            </textField>

А вот кусок java-кода, который заполняет отчеты и создает pdf:

filledReport = JasperFillManager.fillReport(report, params, dataSource);
JasperExportManager.exportReportToPdfFile(filledReport, data.getPdfInfo().getResourcesPath() + data.getPdfInfo().getFileName());

Вот мой файл jasperreports-fonts.xml:

<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
    <fontFamily name="DejaVu Sans" visible="true">
      <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>
    </fontFamily>

    <fontFamily name="Pictonic" visible="false">
        <normal>
            <ttf>net/sf/jasperreports/fonts/pictonic/pictonic.ttf</ttf>
            <svg>net/sf/jasperreports/fonts/pictonic/pictonic.svg</svg>
            <eot>net/sf/jasperreports/fonts/pictonic/pictonic.eot</eot>
            <woff>net/sf/jasperreports/fonts/pictonic/pictonic.woff</woff>
        </normal>
        <pdfEncoding>Identity-H</pdfEncoding>
        <pdfEmbedded>true</pdfEmbedded>
    </fontFamily>
</fontFamilies>

У кого-нибудь есть такая же проблема?


person Erald    schedule 19.12.2016    source источник
comment
Вы используете расширения шрифтов?   -  person Alex K    schedule 19.12.2016
comment
Да! Но, возможно, я делаю некоторые ошибки... Я следовал этим инструкциям jasperreports.sourceforge. сеть/sample.reference/шрифты/   -  person Erald    schedule 19.12.2016
comment
Возможный дубликат Проблема с загрузкой шрифта с использованием JaspersReport   -  person Alex K    schedule 20.12.2016
comment
Ваша банка со шрифтом выглядит прекрасно. Jrxml также действителен. Я проверил аналогичную банку - мой pdf в порядке. Вы должны добавить jar (со шрифтами) в путь к классам. Вы можете отлаживать код с приложенным исходным кодом JasperReports. Вы можете установить точку останова в классе net.sf.jasperreports.engine.fonts.FontUtil, методе getFontInfo(String, Locale). Вы можете проверить families List после выполнения этой строки кода List<FontFamily> families = jasperReportsContext.getExtensions(FontFamily.class);. Ваши шрифты должны быть в этом списке, если вы правильно указали jar в пути к классам. Попробуйте не устанавливать Locale для отчета (если вы его установили)   -  person Alex K    schedule 20.12.2016
comment
Вы также можете попробовать использовать шрифты из jasperreports-fonts-6.x.jar, чтобы проверить правильность размещения jar в пути к классам. Вы можете найти эту банку в папке <Jaspersoft Studio>/configuration/org.eclipse.osgi/65/0/.cp/lib   -  person Alex K    schedule 20.12.2016
comment
Сегодня я заметил, что ошибка не вызвана этими настройками, если я запускаю свое java-приложение непосредственно в netbeans, оно работает хорошо (все символы в PDF правильные), проблема возникает, когда я преобразую его в исполняемый файл (сначала в файл .jar, включающий все библиотеки, а затем в файл .exe с помощью Launch4J), и я запускаю его с помощью другой программы. @АлексК   -  person Erald    schedule 09.01.2017


Ответы (1)


@Erald Посмотрите этот пример Spring Boot с отчетами в Jasper, в pom есть зависимости от jasperreports. https://github.com/karelp90/control_asp

см. ссылку на отчет

см. отчет

person karelp90    schedule 18.05.2017