已解决:无法在 BIRT PDF 报告中显示印地语字符
Resolved: Unable to display Hindi characters in a BIRT PDF report
我在 BIRT 生成的 pdf 文件中看不到印地语字符。
我尝试完成此操作的方法如下:
- 我创建了一个 rptdesign 文件。您可以从 here 下载它。该文件仅包含 2 个标签 - name 和 class.
- 通过将翻译文件添加为资源将 rptdesign 文件与翻译文件相关联。翻译文件的名称是 translation_hi_IN.properties。翻译文件可以从 here 下载。
我使用了本地化功能,并使用此翻译文件将 'Name' 标签与印地语单词相关联。
我在代码中添加了以下几行,这样当我 运行 我在 Tomcat 上的 Web 应用程序时,它能够访问 rptdesign 文件和翻译文件。
EngineConfig config = new EngineConfig();
config.setResourcePath("D:/rptDesignFiles");
我创建了 fontsConfg_pdf.xml 以便为印地语脚本加载 Mangal 字体。可以从 here 下载。
我将这个 fontsConfg_pdf.xml 文件放在与 rptDesign 文件相同的文件夹中。
在代码中我添加了以下行
URL fontConfig = null;
try {
fontConfig = new URL("file:///D:/rptDesignFiles/fontsConfig_pdf.xml");
config.setFontConfig(fontConfig);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
当我生成报告时,我可以在日志中看到它首先加载 org.eclipse.birt.runtime-4.2.1a.jar 中存在的 fontsConfig.xml,然后加载我的自定义 fonsConfig_pdf.xml
但我在生成的 pdf 中看到的 'Name' 标签是空白的。
我浏览了很多论坛但无法找出错误。有人可以指导我哪里出错了。非常感谢!
我能够解决这个问题。所以我想我会 post 我的解决方案。
我所做的更改是:
我没有将我的 rptdesign 文件与 translation_hi_IN.properties 相关联,而是将我的 rptdesign 文件与 translation.properties 相关联。这是默认属性文件,其中包含我的默认语言(在我的例子中是英语)的密钥翻译。
类似于:
n1=Name
我创建了另一个翻译文件 translation_hi_IN.properties 并将其放在与 tanslation.properties 相同的文件夹中。这包含我的印地语翻译:
n1=\u0928\u093E\u092E
我可以根据所选语言在代码中设置语言环境,在默认语言和印地语之间切换:
PDFRenderOption pdfOptions = new PDFRenderOption(options);
// set this locale if you want to render in Hindi language. Set no locale if text needs to be rendered in default language.
pdfOptions.setOption(IPDFRenderOption.LOCALE, new Locale("hi", "IN"));
IRunAndRenderTask task = birtEngine.createRunAndRenderTask(runnable)
// set this locale if you want to render in Hindi language. Set no locale if text needs to be rendered in default language.
Locale locale = new Locale("hi", "IN");
task.setLocale(locale);
task.setRenderOption(pdfOptions);
还修改了fontsConfig_pdf.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<font>
<font-aliases>
<mapping name="serif" font-family="Times-Roman" />
<mapping name="sans-serif" font-family="Helvetica" />
<mapping name="monospace" font-family="Courier" />
</font-aliases>
<font-encodings>
<encoding font-family="Times-Roman" encoding="Cp1252" />
<encoding font-family="Helvetica" encoding="Cp1252" />
<encoding font-family="Courier" encoding="Cp1252" />
<encoding font-family="Zapfdingbats" encoding="Cp1252" />
<encoding font-family="Symbol" encoding="Cp1252" />
<encoding font-family="STSong-Light" encoding="UniGB-UCS2-H" />
<encoding font-family="STSongStd-Light" encoding="UniGB-UCS2-H" />
<encoding font-family="MHei-Medium" encoding="UniCNS-UCS2-H" />
<encoding font-family="MSung-Light" encoding="UniCNS-UCS2-H" />
<encoding font-family="MSungStd-Light" encoding="UniCNS-UCS2-H" />
<encoding font-family="HeiseiMin-W3" encoding="UniJIS-UCS2-H" />
<encoding font-family="HeiseiKakuGo-W5" encoding="UniJIS-UCS2-H" />
<encoding font-family="KozMinPro-Regular" encoding="UniJIS-UCS2-H" />
<encoding font-family="HYGoThic-Medium" encoding="UniKS-UCS2-H" />
<encoding font-family="HYSMyeongJo-Medium" encoding="UniKS-UCS2-H" />
<encoding font-family="HYSMyeongJoStd" encoding="UniKS-UCS2-H" />
</font-encodings>
<composite-font name="all-fonts">
<font font-family="Times-Roman" catalog="Western" />
<font font-family="STSong-Light" catalog="Chinese_S" />
<font font-family="MSung-Light" catalog="Chinese_T" />
<font font-family="HeiseiKakuGo-W5" catalog="Japanese" />
<font font-family="HYGoThic-Medium" catalog="Korean" />
<font font-family="Mangal"/> <!-- Added this line for Hindi -->
</composite-font>
</font>
进行这些修改后,它成功了!希望对您有所帮助。
我在 BIRT 生成的 pdf 文件中看不到印地语字符。 我尝试完成此操作的方法如下:
- 我创建了一个 rptdesign 文件。您可以从 here 下载它。该文件仅包含 2 个标签 - name 和 class.
- 通过将翻译文件添加为资源将 rptdesign 文件与翻译文件相关联。翻译文件的名称是 translation_hi_IN.properties。翻译文件可以从 here 下载。 我使用了本地化功能,并使用此翻译文件将 'Name' 标签与印地语单词相关联。
我在代码中添加了以下几行,这样当我 运行 我在 Tomcat 上的 Web 应用程序时,它能够访问 rptdesign 文件和翻译文件。
EngineConfig config = new EngineConfig(); config.setResourcePath("D:/rptDesignFiles");
我创建了 fontsConfg_pdf.xml 以便为印地语脚本加载 Mangal 字体。可以从 here 下载。 我将这个 fontsConfg_pdf.xml 文件放在与 rptDesign 文件相同的文件夹中。 在代码中我添加了以下行
URL fontConfig = null; try { fontConfig = new URL("file:///D:/rptDesignFiles/fontsConfig_pdf.xml"); config.setFontConfig(fontConfig); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); }
当我生成报告时,我可以在日志中看到它首先加载 org.eclipse.birt.runtime-4.2.1a.jar 中存在的 fontsConfig.xml,然后加载我的自定义 fonsConfig_pdf.xml
但我在生成的 pdf 中看到的 'Name' 标签是空白的。
我浏览了很多论坛但无法找出错误。有人可以指导我哪里出错了。非常感谢!
我能够解决这个问题。所以我想我会 post 我的解决方案。
我所做的更改是:
我没有将我的 rptdesign 文件与 translation_hi_IN.properties 相关联,而是将我的 rptdesign 文件与 translation.properties 相关联。这是默认属性文件,其中包含我的默认语言(在我的例子中是英语)的密钥翻译。 类似于:
n1=Name
我创建了另一个翻译文件 translation_hi_IN.properties 并将其放在与 tanslation.properties 相同的文件夹中。这包含我的印地语翻译:
n1=\u0928\u093E\u092E
我可以根据所选语言在代码中设置语言环境,在默认语言和印地语之间切换:
PDFRenderOption pdfOptions = new PDFRenderOption(options);
// set this locale if you want to render in Hindi language. Set no locale if text needs to be rendered in default language.
pdfOptions.setOption(IPDFRenderOption.LOCALE, new Locale("hi", "IN"));
IRunAndRenderTask task = birtEngine.createRunAndRenderTask(runnable)
// set this locale if you want to render in Hindi language. Set no locale if text needs to be rendered in default language.
Locale locale = new Locale("hi", "IN");
task.setLocale(locale);
task.setRenderOption(pdfOptions);
还修改了fontsConfig_pdf.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <font> <font-aliases> <mapping name="serif" font-family="Times-Roman" /> <mapping name="sans-serif" font-family="Helvetica" /> <mapping name="monospace" font-family="Courier" /> </font-aliases> <font-encodings> <encoding font-family="Times-Roman" encoding="Cp1252" /> <encoding font-family="Helvetica" encoding="Cp1252" /> <encoding font-family="Courier" encoding="Cp1252" /> <encoding font-family="Zapfdingbats" encoding="Cp1252" /> <encoding font-family="Symbol" encoding="Cp1252" /> <encoding font-family="STSong-Light" encoding="UniGB-UCS2-H" /> <encoding font-family="STSongStd-Light" encoding="UniGB-UCS2-H" /> <encoding font-family="MHei-Medium" encoding="UniCNS-UCS2-H" /> <encoding font-family="MSung-Light" encoding="UniCNS-UCS2-H" /> <encoding font-family="MSungStd-Light" encoding="UniCNS-UCS2-H" /> <encoding font-family="HeiseiMin-W3" encoding="UniJIS-UCS2-H" /> <encoding font-family="HeiseiKakuGo-W5" encoding="UniJIS-UCS2-H" /> <encoding font-family="KozMinPro-Regular" encoding="UniJIS-UCS2-H" /> <encoding font-family="HYGoThic-Medium" encoding="UniKS-UCS2-H" /> <encoding font-family="HYSMyeongJo-Medium" encoding="UniKS-UCS2-H" /> <encoding font-family="HYSMyeongJoStd" encoding="UniKS-UCS2-H" /> </font-encodings> <composite-font name="all-fonts"> <font font-family="Times-Roman" catalog="Western" /> <font font-family="STSong-Light" catalog="Chinese_S" /> <font font-family="MSung-Light" catalog="Chinese_T" /> <font font-family="HeiseiKakuGo-W5" catalog="Japanese" /> <font font-family="HYGoThic-Medium" catalog="Korean" /> <font font-family="Mangal"/> <!-- Added this line for Hindi --> </composite-font> </font>
进行这些修改后,它成功了!希望对您有所帮助。