JasperReports 报表字体Font
报表包含文本元素,每个元素都可以有自己的字体设置。可以使用<textElement> 标记中可用的 <font> 标记指定这些设置。一个报表可以定义多种字体。定义后,它们可以用作整个报表中其他字体定义的默认或基本字体设置。
1 JasperReports 报表字体
报表字体是在报表级别声明的字体设置的集合。设置文本元素的字体属性时,可以在整个报告模板中重复使用报告字体。
报表字体现已弃用。不要使用在文档本身中声明的 <reportFont/> 元素。请改用 <style/> 元素。
2 JasperReports 字体属性
下表总结了 <font> 元素的主要属性:
属性名 | 描述 |
---|---|
fontName | 字体名称,可以是物理字体的名称、逻辑字体的名称或已注册的 JasperReports 字体扩展中的字体系列的名称。 |
size | 以磅为单位测量的字体大小。默认为 10。 |
isBold | 指定是否需要粗体的标志。它默认为false。 |
isItalic | 指定是否需要斜体的标志。它默认为false。 |
isUnderline | 指定是否需要下划线文本修饰的标志。它默认为false。 |
isStrikeThrough | 指定是否需要删除线文本修饰的标志。它默认为false。 |
pdfFontName | 将文档导出为 PDF 格式时 iText 库所需的等效 PDF 字体的名称。 |
pdfEncoding | iText 库也需要等效的 PDF 字符编码。 |
isPdfEmbedded | 指定是否应将字体嵌入到文档本身的标志。它默认为false。如果设置为 true,则有助于毫无问题地查看 PDF 文档。 |
3 JasperReports 字体类型
在 JasperReports 中,字体可以归类为 :
-
逻辑字体: 自 1.0 版以来 Java 平台已识别的五种字体类型称为逻辑字体。它们是 - Serif、SansSerif、Monospaced、Dialog 和 DialogInput。这些逻辑字体不是安装在系统任何地方的实际字体库。它们只是 Java 运行时识别的字体类型名称。这些必须映射到系统上安装的某些物理字体。
-
物理字体: 这些字体是实际的字体库,例如由 TrueType 或 PostScript Type 1 字体组成。物理字体可以是 Arial、Time、Helvetica、Courier 或任意数量的其他字体,包括国际字体。
-
字体扩展: JasperReports 库可以利用在运行时即时注册的字体,通过其内置的字体扩展支持。可以使用字体扩展名向 JasperReports 提供字体系列列表。它们由外观相似的字体组成并支持特定的语言环境。
如上表所述,我们需要在属性fontName 中指定物理字体的名称、逻辑字体的名称或已注册的 JasperReports 字体扩展中的字体系列的名称。
4 JasperReports PDF字体名称
JasperReports 库在将报表导出为 PDF(可移植文档格式)时使用 iText 库。PDF 文件可以在各种平台上查看,并且看起来总是一样的。这部分是因为在这种格式中,有一种特殊的字体处理方式。导出为 PDF 时,fontName属性没有用。属性pdfFontName存在我们需要指定字体设置的地方。
iText 库知道如何处理内置字体和 TTF 文件并识别以下内置字体名称 :
- Courier
- Courier-Bold
- Courier-BoldOblique
- Courier-Oblique
- Helvetica
- Helvetica-Bold
- Helvetica-BoldOblique
- Helvetica-Oblique
- Symbol
- Times-Roman
- Times-Bold
- Times-BoldItalic
- Times-Italic
- ZapfDingbats
根据 iText 库的先决条件,要使用字体,我们需要指定以下之一作为字体名称 :
-
上面列表中的内置字体名称。
-
可以在磁盘上找到的 TTF(True Type Font)文件的名称。
-
字体的真实名称,前提是包含该字体的 TTF 文件先前已在 iText 中注册,或者在注册字体时定义了别名。
基于上述先决条件,pdfFontName属性可以包含以下值之一 :
-
上面列表中内置 PDF 字体的名称。
-
导出为 PDF 时可在运行时位于磁盘上的 TTF 文件的名称。
-
注册字体的真实名称。
-
使用 iText 注册为字体文件的字体的键后缀(net.sf.jasperreports.export.pdf.font之后的部分)。
5 JasperReports 默认字体和继承
每个文本元素从其父元素继承字体和样式属性,而父元素又从其父元素继承这些属性。如果没有为元素定义样式and/or字体,则将应用 <jasperReport/> 根元素中声明的默认样式(and/or字体 - 但现在已弃用)。
在 JasperReports 中定义默认样式或字体不是强制性的。如果没有为给定元素定义字体,引擎会查找继承的字体属性,或者,如果通过这种方式没有找到属性,它会在/ 中查找net.sf.jasperreports.default.font.name属性src/default.jasperreports.properties文件。当没有为文本元素明确定义字体属性或从其父元素继承字体属性时,它的值定义要使用的字体系列的名称。
/src/default.jasperreports.properties文件中定义的主要默认字体属性及其值如下表所示
属性 | 描述 |
---|---|
net.sf.jasperreports.default.font.name=SansSerif | 默认字体名称。 |
net.sf.jasperreports.default.font.size=10 | 默认字体大小。 |
net.sf.jasperreports.default.pdf.font.name=Helvetica | 默认的 PDF 字体。 |
net.sf.jasperreports.default.pdf.encoding=Cp1252 | 默认的 PDF 字符编码。 |
net.sf.jasperreports.default.pdf.embedded=false | 默认情况下不嵌入 PDF 字体。 |
6 JasperReports 字体的示例
为了演示使用字体和字体属性以获得特定文本外观,让我们编写新的报表模板 (jasper_report_template.jrxml)。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 = "jasper_report_template" pageWidth = "595" pageHeight = "842"
columnWidth = "555" leftMargin = "20" rightMargin = "20" topMargin = "30"
bottomMargin = "30">
<title>
<band height = "682">
<staticText>
<reportElement x = "0" y = "50" width = "150" height = "40"/>
<textElement/>
<text>
<![CDATA[Welcome to xnip.cn!]]>
</text>
</staticText>
<staticText>
<reportElement x = "160" y = "50" width = "390" height = "40"/>
<textElement/>
<text>
<![CDATA[<staticText>
<reportElement x = "0" y = "50" width = "150" height = "40"/>
<text>Welcome to xnip.cn!</text></staticText>]]>
</text>
</staticText>
<staticText>
<reportElement x = "0" y = "100" width = "150" height = "40"/>
<textElement>
<font size = "12"/>
</textElement>
<text><![CDATA[Welcome to xnip.cn!]]></text>
</staticText>
<staticText>
<reportElement x = "160" y = "100" width = "390" height = "40"/>
<textElement/>
<text>
<![CDATA[<staticText>
<reportElement x = "0" y = "100" width = "150" height = "40"/>
<textElement>
<font size = "14"/>
</textElement>
<text> Welcome to xnip.cn!</text></staticText>]]>
</text>
</staticText>
<staticText>
<reportElement x = "0" y = "150" width = "150" height = "40"/>
<textElement>
<font fontName = "DejaVu Serif" size = "12" isBold = "false"/>
</textElement>
<text><![CDATA[Welcome to xnip.cn!]]></text>
</staticText>
<staticText>
<reportElement x = "160" y = "150" width = "390" height = "40"/>
<textElement/>
<text>
<![CDATA[<staticText>
<reportElement x = "0" y = "250" width = "150" height = "40"/>
<textElement>
<font fontName = "DejaVu Serif" size = "12" isBold = "false"/>
</textElement>
<text>Welcome to xnip.cn!</text></staticText>]]>
</text>
</staticText>
<staticText>
<reportElement x = "0" y = "200" width = "150" height = "40"/>
<textElement>
<font fontName = "DejaVu Serif" size = "12" isBold = "true"/>
</textElement>
<text><![CDATA[Welcome to xnip.cn!]]></text>
</staticText>
<staticText>
<reportElement x = "160" y = "200" width = "390" height = "40"/>
<textElement/>
<text>
<![CDATA[<staticText>
<reportElement x = "0" y = "300" width = "150" height = "40"/>
<textElement>
<font fontName = "DejaVu Serif" size = "12" isBold = "true"/>
</textElement>
<text>Welcome to xnip.cn!</text></staticText>]]>
</text>
</staticText>
<staticText>
<reportElement x = "0" y = "250" width = "150" height = "40"/>
<textElement>
<font fontName = "Monospaced" size = "12" isItalic = "true"
isUnderline = "true" pdfFontName = "Courier-Oblique"/>
</textElement>
<text><![CDATA[Welcome to xnip.cn!]]></text>
</staticText>
<staticText>
<reportElement x = "160" y = "250" width = "390" height = "40"/>
<textElement/>
<text>
<![CDATA[<staticText>
<reportElement x = "0" y = "350" width = "150" height = "40"/>
<textElement>
<font fontName = "Monospaced" size = "12" isItalic = "true"
isUnderline = "true" pdfFontName = "Courier-Oblique"/>
</textElement>
<text>Welcome to xnip.cn!</text></staticText>]]>
</text>
</staticText>
<staticText>
<reportElement x = "0" y = "300" width = "150" height = "40"/>
<textElement>
<font fontName = "Monospaced" size = "12" isBold = "true"
isStrikeThrough = "true" pdfFontName = "Courier-Bold"/>
</textElement>
<text><![CDATA[Welcome to xnip.cn!]]></text>
</staticText>
<staticText>
<reportElement x = "160" y = "300" width = "390" height = "40"/>
<textElement/>
<text>
<![CDATA[<staticText>
<reportElement x = "0" y = "400" width = "150" height = "40"/>
<textElement>
<font fontName = "Monospaced" size = "12" isBold = "true"
isStrikeThrough = "true" pdfFontName = "Courier-Bold"/>
</textElement>
<text>Welcome to xnip.cn!</text></staticText>]]>
</text>
</staticText>
<staticText>
<reportElement x = "0" y = "350" width = "150" height = "40"
forecolor = "#FF0000"/>
<textElement>
<font size = "14"/>
</textElement>
<text><![CDATA[Welcome to xnip.cn!]]></text>
</staticText>
<staticText>
<reportElement x = "160" y = "350" width = "390" height = "40"/>
<textElement/>
<text>
<![CDATA[<staticText>
<reportElement x = "0" y = "450" width = "150" height = "40"
forecolor = "red"/>
<textElement><font size = "14"/></textElement>
<text>Welcome to xnip.cn!</text></staticText>]]>
</text>
</staticText>
<staticText>
<reportElement x = "0" y = "400" width = "150" height = "40" mode = "Opaque"
forecolor = "#00FF00" backcolor = "#FFFF00"/>
<textElement>
<font fontName = "Serif" size = "12" isBold = "true"
pdfFontName = "Times-Bold"/>
</textElement>
<text><![CDATA[Welcome to xnip.cn!]]></text>
</staticText>
<staticText>
<reportElement x = "160" y = "400" width = "390" height = "40"/>
<textElement/>
<text>
<![CDATA[<staticText>
<reportElement x = "0" y = "500" width = "150" height = "40"
forecolor = "green" backcolor = "#FFFF00" mode = "Opaque"/>
<textElement>
<font fontName = "Serif" size = "12" isBold = "true"
pdfFontName = "Times-Bold"/>
</textElement>
<text>Welcome to xnip.cn!</text></staticText>]]>
</text>
</staticText>
<staticText>
<reportElement x = "0" y = "450" width = "150" height = "40" mode = "Opaque"
forecolor = "#0000FF" backcolor = "#FFDD99"/>
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font fontName = "SansSerif" size = "12" isBold = "false"
isItalic = "true" pdfFontName = "Sans.Slanted" isPdfEmbedded = "true"/>
</textElement>
<text><![CDATA[Welcome to xnip.cn!]]></text>
</staticText>
<staticText>
<reportElement x = "160" y = "450" width = "390" height = "40"/>
<textElement/>
<text>
<![CDATA[<staticText>
<reportElement x = "0" y = "550" width = "150" height = "90"
forecolor = "blue" backcolor = "#FFDD99" mode = "Opaque"/>
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font fontName = "SansSerif" size = "12" isBold = "false"
pdfFontName = "Sans.Slanted" isPdfEmbedded = "true"/>
</textElement>
<text>Welcome to xnip.cn!</text></staticText>]]>
</text>
</staticText>
<staticText>
<reportElement mode = "Opaque" x = "0" y = "500" width = "150" height = "40"
forecolor = "#FF0000" backcolor = "#99DDFF"/>
<textElement textAlignment = "Right" verticalAlignment = "Bottom">
<font fontName = "SansSerif" size = "12" isBold = "true"
pdfFontName = "DejaVu Sans Bold" isPdfEmbedded = "true"/>
</textElement>
<text><![CDATA[Welcome to xnip.cn!]]></text>
</staticText>
</band>
</title>
</jasperReport>
项目的pom.xml文件如下:
<dependencies>
<!-- https://mvnrepository.com/artifact/net.sf.jasperreports/jasperreports -->
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.17.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/net.sf.jasperreports/jasperreports-fonts -->
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports-fonts</artifactId>
<version>6.17.0</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.7</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
</dependencies>
先编译jrxml文件为Jasper文件
package cn.xnip;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
public class JasperReportCompile {
public static void main(String[] args) {
String filePath = "D:/idea_codes/jasper_reports/jasper_report_template.jrxml";
try {
JasperCompileManager.compileReportToFile(filePath,"d:/jasper_report_template.jasper");
System.out.println("编译成功");
} catch (JRException e) {
e.printStackTrace();
}
}
}
编译后在D:/盘根目录下生成jasper_report_template.jasper文件,然后再填充数据:
package cn.xnip;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class JasperReportFill {
public static void main(String[] args) {
String sourceFileName = "d:/jasper_report_template.jasper";
DataBeanList DataBeanList = new DataBeanList();
ArrayList<DataBean> dataList = DataBeanList.getDataBeanList();
JRBeanCollectionDataSource beanColDataSource =
new JRBeanCollectionDataSource(dataList);
try {
JasperFillManager.fillReportToFile(
sourceFileName, null, beanColDataSource);
} catch (JRException e) {
e.printStackTrace();
}
}
}
填充数据完毕后,在D:/盘根目录下生成jasper_report_template.jrprint文件,最后使用预览程序预览:
package cn.xnip;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.view.JasperViewer;
public class JasperReportView {
public static void main(String[] args) {
String filePath = "D:/jasper_report_template.jrprint";
try {
JasperViewer.viewReport(filePath,false);
} catch (JRException e) {
e.printStackTrace();
}
}
}
最后输出结果如下:
在这里,我们可以看到“Welcome to xnip.cn”文本以不同的字体格式显示。