Мое приложение 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>
У кого-нибудь есть такая же проблема?
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.2016jasperreports-fonts-6.x.jar
, чтобы проверить правильность размещения jar в пути к классам. Вы можете найти эту банку в папке<Jaspersoft Studio>/configuration/org.eclipse.osgi/65/0/.cp/lib
- person Alex K   schedule 20.12.2016