Jasper报表在部署时无法生成包含CJK字符的PDF。

huangapple 未分类评论47阅读模式
英文:

Jasper report can't generate PDF with CJK when is deployed

问题

当我在IntelliJ IDEA中运行Spring Framework应用程序时,一切正常,我可以生成带有中文文本的Jasper报表。但是,一旦我构建并部署WAR到Tomcat,我就无法生成报表,出现以下异常:

net.sf.jasperreports.engine.JRRuntimeException: 无法加载以下字体:
pdfFontName:Arial Unicode MS
pdfEncoding:Identity-H
isPdfEmbedded:false
	net.sf.jasperreports.engine.export.JRPdfExporter.getFont(JRPdfExporter.java:2757)
	net.sf.jasperreports.engine.export.JRPdfExporter.getChunk(JRPdfExporter.java:2540)
	net.sf.jasperreports.engine.export.JRPdfExporter.getPhrase(JRPdfExporter.java:2509)
	net.sf.jasperreports.engine.export.SimplePdfTextRenderer.renderParagraph(SimplePdfTextRenderer.java:149)
	net.sf.jasperreports.engine.export.AbstractTextRenderer.render(AbstractTextRenderer.java:373)
	net.sf.jasperreports.engine.export.SimplePdfTextRenderer.render(SimplePdfTextRenderer.java:111)
	net.sf.jasperreports.engine.export.JRPdfExporter.exportText(JRPdfExporter.java:2870)
	net.sf.jasperreports.engine.export.JRPdfExporter.exportElements(JRPdfExporter.java:1275)
	net.sf.jasperreports.engine.export.JRPdfExporter.exportFrame(JRPdfExporter.java:3951)
	net.sf.jasperreports.engine.export.JRPdfExporter.exportElements(JRPdfExporter.java:1280)
	net.sf.jasperreports.engine.export.JRPdfExporter.exportPage(JRPdfExporter.java:1204)

我已经按照以下方式将Arial Unicode MS 添加到了我的项目中:

jasperreports_extension.properties:

net.sf.jasperreports.extension.registry.factory.fonts=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.myfamily=report/fonts/fonts.xml

report/fonts/fonts.xml:

<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
    <fontFamily name="Arial Unicode MS">
        <normal><![CDATA[report/fonts/ARIALUNI.TTF]]></normal>
        <pdfEncoding>Identity-H</pdfEncoding>
        <pdfEmbedded><![CDATA[false]]></pdfEmbedded>
    </fontFamily>
</fontFamilies>

Jasper Report 依赖:

<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>6.12.2</version>
</dependency>

更新:
我已经将这个问题复制到Jasper Community

英文:

When I run Spring Framework Application from IntelliJ IDEA everything work fine and I'm able to generate Jasper Report with Chinese text. But as soon as I build and deploy WAR to Tomcat I can't generate report with following exception

net.sf.jasperreports.engine.JRRuntimeException: Could not load the following font: 
pdfFontName: Arial Unicode MS
pdfEncoding: Identity-H
isPdfEmbedded : false
	net.sf.jasperreports.engine.export.JRPdfExporter.getFont(JRPdfExporter.java:2757)
	net.sf.jasperreports.engine.export.JRPdfExporter.getChunk(JRPdfExporter.java:2540)
	net.sf.jasperreports.engine.export.JRPdfExporter.getPhrase(JRPdfExporter.java:2509)
	net.sf.jasperreports.engine.export.SimplePdfTextRenderer.renderParagraph(SimplePdfTextRenderer.java:149)
	net.sf.jasperreports.engine.export.AbstractTextRenderer.render(AbstractTextRenderer.java:373)
	net.sf.jasperreports.engine.export.SimplePdfTextRenderer.render(SimplePdfTextRenderer.java:111)
	net.sf.jasperreports.engine.export.JRPdfExporter.exportText(JRPdfExporter.java:2870)
	net.sf.jasperreports.engine.export.JRPdfExporter.exportElements(JRPdfExporter.java:1275)
	net.sf.jasperreports.engine.export.JRPdfExporter.exportFrame(JRPdfExporter.java:3951)
	net.sf.jasperreports.engine.export.JRPdfExporter.exportElements(JRPdfExporter.java:1280)
	net.sf.jasperreports.engine.export.JRPdfExporter.exportPage(JRPdfExporter.java:1204)

I have added Arial Unicode MS to my project in a following way:

Jasper报表在部署时无法生成包含CJK字符的PDF。

jasperreports_extension.properties:

net.sf.jasperreports.extension.registry.factory.fonts=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.myfamily=report/fonts/fonts.xml

report/fonts/fonts.xml:

<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
    <fontFamily name="Arial Unicode MS">
        <normal><![CDATA[report/fonts/ARIALUNI.TTF]]></normal>
        <pdfEncoding>Identity-H</pdfEncoding>
        <pdfEmbedded><![CDATA[false]]></pdfEmbedded>
    </fontFamily>
</fontFamilies>

Jasper Report dependecy:

<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>6.12.2</version>
</dependency>

UPDATE:
I have duplicated this question to Jasper Community

huangapple
  • 本文由 发表于 2020年7月26日 02:40:15
  • 转载请务必保留本文链接:https://java.coder-hub.com/63092148.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定