如何动态更改字体名称?

时间:2017-10-20 11:37:26

标签: java dynamic fonts jasper-reports

我正在使用Jasper jar来生成我的J2EE项目的报告。我能够成功生成PDF而没有任何问题。但是我希望根据我们在一个地方配置的设置动态更改所有PDF的字体名称。

我开始了解有条件的风格,这对完成此任务很有帮助。但是我确实有数百种字体在每个地方都无法有条件地设置样式。这将使报告更糟糕。

我正在寻找一个合适的解决方案,帮助我动态更改jasper PDF上的字体。

2 个答案:

答案 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