📅  最后修改于: 2020-11-16 08:02:20             🧑  作者: Mango
报告包含文本元素,并且每个文本元素都可以具有自己的字体设置。可以使用
报告字体是在报告级别声明的字体设置的集合。设置文本元素的字体属性时,可以在整个报告模板中重用报告字体。
现在不推荐使用报告字体。不要使用文档本身内声明的
下表总结了< font >元素的主要属性-
S.NO | Attribute and Description |
---|---|
1 |
fontName The font name, which can be the name of a physical font, a logical one, or the name of a font family from the registered JasperReports font extensions. |
2 |
size The size of the font measured in points. It defaults to 10. |
3 |
isBold The flag specifying if a bold font is required. It defaults to false. |
4 |
isItalic The flag specifying if an italic font is required. It defaults to false. |
5 |
isUnderline The flag specifying if the underline text decoration is required. It defaults to false. |
6 |
isStrikeThrough The flag specifying if the strikethrough text decoration is required. It defaults to false. |
7 |
pdfFontName The name of an equivalent PDF font required by the iText library when exporting documents to PDF format. |
8 |
pdfEncoding The equivalent PDF character encoding, also required by the iText library. |
9 |
isPdfEmbedded The flag that specifies whether the font should be embedded into the document itself. It defaults to false. If set to true, helps view the PDF document without any problem. |
在JasperReports中,字体可以分类为-
逻辑字体-自1.0版以来,Java平台已识别出五种字体类型,称为逻辑字体。这些是-Serif,SansSerif,Monospaced,Dialog和DialogInput 。这些逻辑字体不是系统上任何位置安装的实际字体库。它们只是Java运行时识别的字体类型名称。这些必须映射到系统上安装的某些物理字体。
物理字体-这些字体是实际的字体库,例如,由TrueType或PostScript Type 1字体组成。物理字体可以是Arial,Time,Helvetica,Courier或任何其他多种字体,包括国际字体。
字体扩展-JasperReports库通过其对字体扩展的内置支持,可以在运行时即时注册字体。可以使用字体扩展名将字体系列列表提供给JasperReports。这些字体由外观相似且支持特定语言环境的字体组成。
如上表所述,我们需要在属性fontName中指定物理字体的名称,逻辑字体的名称或来自已注册JasperReports字体扩展名的字体系列的名称。
将报告导出为PDF(便携式文档格式)时,JasperReports库使用iText库。 PDF文件可以在各种平台上查看,并且始终看起来相同。部分原因是因为采用这种格式,有一种特殊的字体处理方式。在导出为PDF时, fontName属性没有用。属性pdfFontName存在于我们需要指定字体设置的位置。
iText库知道如何处理内置字体和TTF文件,并可以识别以下内置字体名称-
根据iText库的先决条件,要使用字体,我们需要指定以下其中一项作为字体名称-
上面列表中的内置字体名称。
TTF(True Type字体)文件的名称,可以在磁盘上找到它。
字体的真实名称,前提是包含TTF文件的字体已预先在iText中注册,或者在注册字体时定义了别名。
根据上述先决条件, pdfFontName属性可以包含以下值之一-
上面列表中的内置PDF字体的名称。
导出为PDF时可以在运行时位于磁盘上的TTF文件的名称。
注册字体的真实名称。
密钥的后缀( net.sf.jasperreports.export.pdf.font之后的部分),用于将iText注册为字体文件的字体。
每个文本元素都从其父元素继承字体和样式属性,而后者又从其父元素继承这些属性。如果没有为元素定义样式和/或字体,则将应用在
在JasperReports中定义默认样式或字体不是强制性的。如果没有为给定元素定义字体,则引擎将查找继承的字体属性,或者,如果以此方式未找到属性,则引擎将在/中查找net.sf.jasperreports.default.font.name属性。 src / default.jasperreports.properties文件。当未为文本元素明确定义字体属性或从其父元素继承字体属性时,其值定义要使用的字体系列的名称。
下表中的主要默认字体属性及其在/src/default.jasperreports.properties文件中定义的值-
Property | Description |
---|---|
net.sf.jasperreports.default.font.name=SansSerif | The default font name. |
net.sf.jasperreports.default.font.size=10 | The default font size. |
net.sf.jasperreports.default.pdf.font.name=Helvetica | The default PDF font. |
net.sf.jasperreports.default.pdf.encoding=Cp1252 | The default PDF character encoding. |
net.sf.jasperreports.default.pdf.embedded=false | By default PDF fonts are not embedded. |
为了演示如何使用字体和字体属性以获得特定的文本外观,让我们编写新的报告模板(jasper_report_template.jrxml)。 JRXML的内容如下。将其保存到C:\ tools \ jasperreports-5.0.1 \ test目录。在这里,我们将以各种字体格式在报告标题中显示文本。
Welcome to TutorialsPoint! ]]>
Welcome to TutorialsPoint! ]]>
Welcome to TutorialsPoint! ]]>
Welcome to TutorialsPoint! ]]>
Welcome to TutorialsPoint! ]]>
Welcome to TutorialsPoint! ]]>
Welcome to TutorialsPoint! ]]>
Welcome to TutorialsPoint! ]]>
Welcome to TutorialsPoint! ]]>
Welcome to TutorialsPoint! ]]>
填充和生成报告的Java代码如下。让我们将此文件JasperFontsReportFill.java保存到C:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ tutorialspoint目录。
package com.tutorialspoint;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
public class JasperFontsReportFill {
public static void main(String[] args) {
String sourceFileName = "C://tools/jasperreports-5.0.1/test/" +
"jasper_report_template.jasper";
try {
JasperFillManager.fillReportToFile(sourceFileName, null,
new JREmptyDataSource());
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
在这里,我们在填充报表时使用JREmptyDataSource的实例来模拟其中包含一个记录但所有字段均为null的数据源。
我们将使用常规的ANT构建过程来编译并执行上述文件。文件build.xml的内容(保存在目录C:\ tools \ jasperreports-5.0.1 \ test下)如下所示。
导入文件-baseBuild.xml是从“环境设置”一章中选取的,应与build.xml放在同一目录中。
接下来,让我们打开命令行窗口并转到build.xml所在的目录。最后,执行命令ant -Dmain-class = com.tutorialspoint.JasperFontsReportFill (viewFullReport是默认目标),如下所示:
C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.tutorialspoint.JasperFontsReportFill
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
clean-sample:
[delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jasper
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrprint
compile:
[mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes
[javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28:
warning: 'includeantruntime' was not set, defaulting to build.
[javac] Compiling 5 source files to C:\tools\jasperreports-5.0.1\test\classes
compilereportdesing:
[jrc] Compiling 1 report design files.
[jrc] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
[jrc] log4j:WARN Please initialize the log4j system properly.
[jrc] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
[jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.
run:
[echo] Runnin class : com.tutorialspoint.JasperFontsReportFill
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
viewFillReport:
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
BUILD SUCCESSFUL
Total time: 45 minutes 3 seconds
经过上述编译,JasperViewer窗口打开,如下图所示:
在这里,我们可以看到文本“ Welcome to TutorialsPoint”以不同的字体格式显示。