Jasper 报告国际化不显示西里尔字符(例如俄语)

Jasper report internationalization don't show cyrillic characters (russian for example)

我正在尝试使用 jasper 报告生成多语言 PDF,我为不同的语言创建了属性文件,并使用资源包检索了标签,但生成的 PDF 无法正确显示俄语字符 对于 Jrxml 文件,我使用编码 UTF-8 这是我将包传递给报告的代码:

  ResourceBundle bundle = ResourceBundle.getBundle("labels/russia/labels", new Locale("ru", "RU"));

  paramMap.put("REPORT_RESOURCE_BUNDLE", bundle);
  principalJsonDataSource = new JsonDataSource(inputAsStream);

  principalReport = JasperCompileManager
      .compileReport(context.getResource("classpath:jasper/russia/" + "russia" + ".jrxml").getInputStream());
  principalReport.setWhenNoDataType(WhenNoDataTypeEnum.ALL_SECTIONS_NO_DETAIL);
  principalReport.setProperty(MaxPagesGovernor.PROPERTY_MAX_PAGES_ENABLED, Boolean.TRUE.toString());
  principalReport.setProperty(MaxPagesGovernor.PROPERTY_MAX_PAGES, String.valueOf(50));
  principalReport.setProperty("net.sf.jasperreports.default.pdf.encoding", "UTF-8");

  principalReportPrinter = JasperFillManager.fillReport(principalReport, paramMap, principalJsonDataSource);

这是我的 jrxml 文件:

  <?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="justName" pageWidth="842" pageHeight="1170" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="bf7f4e53-0f98-4a11-a8e2-91b1629156e5">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<property name="com.jaspersoft.studio.unit" value="pixel"/>
<import value="org.apache.commons.lang.StringUtils"/>

<style name="Base" isDefault="true" fontSize="8" pdfFontName="Courier" pdfEncoding="UTF-8" isPdfEmbedded="false"/>

<queryString language="JSON">
    <![CDATA[]]>
</queryString>
<background>
    <band splitType="Stretch"/>
</background>

<detail>
    <band height="201" splitType="Stretch">
        <property name="com.jaspersoft.studio.unit.height" value="px"/>
        <textField>
            <reportElement style="Base" positionType="Float" x="5" y="26" width="210" height="17" isRemoveLineWhenBlank="true" uuid="4e3fb833-2a8a-4178-89df-b0c229c6bc8f"/>


            <textElement>
                <font isBold="true"/>
            </textElement>
            <textFieldExpression><![CDATA[$R{message}]]></textFieldExpression>

...

使用支持所需字符的字体,可能会在 PDF 中嵌入字体。

您可以尝试从 Courier 字体切换到 Courier New 字体。根据 https://docs.microsoft.com/en-us/typography/font-list/courier-new,它支持西里尔字符。