贾斯珀(Jasper)报告的国际化未显示西里尔字母(例如俄语)

时间:2018-07-10 10:23:07

标签: java jasper-reports resourcebundle

我正在尝试使用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>

...

1 个答案:

答案 0 :(得分:0)

使用支持所需字符的字体,可能将该字体嵌入PDF。

您可以尝试从Courier切换为Courier New字体。根据{{​​3}},它支持西里尔字母。