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,它支持西里尔字符。
我正在尝试使用 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,它支持西里尔字符。