我正在使用Jasper jar来生成我的J2EE项目的报告。我能够成功生成PDF而没有任何问题。但是我希望根据我们在一个地方配置的设置动态更改所有PDF的字体名称。
我开始了解有条件的风格,这对完成此任务很有帮助。但是我确实有数百种字体在每个地方都无法有条件地设置样式。这将使报告更糟糕。
我正在寻找一个合适的解决方案,帮助我动态更改jasper PDF上的字体。
答案 0 :(得分:4)
我能想到的最简单的方法是在报告中使用默认样式,并在填写报告之前通过java更改其字体名称。
示例强>
在jrxml中设置一个样式(我将使用默认样式),因为这样我不需要将它分配给textField
,而且从JasperReport
对象获取它更快
<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="reputation" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="a88bd694-4f90-41fc-84d0-002b90b2d73e">
.....
<style name="myStyle" isDefault="true" fontName="DejaVu Sans"/>
....
</jasperReport>
在java中加载你的报告(jrxml),更改默认样式字体名称,然后填写报告
JasperReport report = JasperCompileManager.compileReport("jmyReport.jrxml");
report.getDefaultStyle().setFontName("NewFontName");
JasperPrint jasperPrint = JasperFillManager.fillReport(report, paramMap,datasource);
Hower记住,如果您希望确保在客户端计算机上的pdf导出中正确呈现它们,则需要在http://ricardolovelace.com/creating-bitmap-images-with-c-on-windows.html中添加所有字体。
您还可以使用非默认样式,在这种情况下,您需要将其指定给textField
并通过Font Extensions!
JRStyle[] styles = report.getStyles();
中找到它
答案 1 :(得分:0)
report.getDefaultStyle().setFontName("NewFontName");
如果使用jasperreports-fonts-6.10.0.jar
,"NewFontName"
是jasperreports_extension.properties
中声明的家庭字体名称(例如:sans-serif),不是吗?
例如:
net.sf.jasperreports.extension.simple.font.families.sans-serif=fonts/sans-serif.xml