Шрифты отчетов
Отчет содержит текстовые элементы, и каждый из них может иметь собственные настройки шрифта. Эти настройки можно указать с помощью <font> доступен в теге <textElement>. В отчете можно определить несколько шрифтов. После определения они могут использоваться как настройки по умолчанию или как базовые настройки шрифта для других определений шрифтов во всем отчете.
Шрифты отчетов
Шрифт отчета - это набор настроек шрифта, объявленных на уровне отчета. Шрифт отчета можно повторно использовать во всем шаблоне отчета при настройке свойств шрифта текстовых элементов.
Шрифты отчетов устарели. Не используйте элементы <reportFont />, объявленные в самом документе. Вместо этого используйте элемент <style />.
Атрибуты шрифта
В таблице ниже приведены основные атрибуты <font> элемент -
S.NO | Атрибут и описание |
---|---|
1 | fontName Имя шрифта, которое может быть именем физического шрифта, логическим шрифтом или именем семейства шрифтов из зарегистрированных расширений шрифтов JasperReports. |
2 | size Размер шрифта в пунктах. По умолчанию 10. |
3 | isBold Флаг, указывающий, требуется ли полужирный шрифт. По умолчанию - false. |
4 | isItalic Флаг, указывающий, требуется ли курсивный шрифт. По умолчанию - false. |
5 | isUnderline Флаг, указывающий, требуется ли оформление подчеркнутого текста. По умолчанию - false. |
6 | isStrikeThrough Флаг, указывающий, требуется ли оформление зачеркнутого текста. По умолчанию - false. |
7 | pdfFontName Имя эквивалентного шрифта PDF, необходимого библиотеке iText при экспорте документов в формат PDF. |
8 | pdfEncoding Эквивалентная кодировка символов PDF, также требуемая библиотекой iText. |
9 | isPdfEmbedded Флаг, указывающий, следует ли встраивать шрифт в сам документ. По умолчанию - false. Если установлено значение true, помогает без проблем просматривать документ PDF. |
Типы шрифтов
В JasperReports шрифты можно разделить на -
Logical Fonts- Пять типов шрифтов, которые распознаются платформой Java начиная с версии 1.0, называются логическими шрифтами. Это -Serif, SansSerif, Monospaced, Dialog, and DialogInput. Эти логические шрифты не являются фактическими библиотеками шрифтов, которые устанавливаются где-либо в системе. Это просто имена типов шрифтов, распознаваемые средой выполнения Java. Они должны быть сопоставлены с некоторым физическим шрифтом, установленным в системе.
Physical Fonts- Эти шрифты представляют собой фактические библиотеки шрифтов, состоящие, например, из шрифтов TrueType или PostScript Type 1. Физические шрифты могут быть Arial, Time, Helvetica, Courier или любым другим шрифтом, включая международные шрифты.
Font Extensions- Библиотека JasperReports может использовать шрифты, зарегистрированные "на лету" во время выполнения, благодаря встроенной поддержке расширений шрифтов. Список семейств шрифтов можно сделать доступным для JasperReports с помощью расширения шрифта. Они сделаны из похожих шрифтов и поддерживают определенные языковые стандарты.
Как описано в таблице выше, нам необходимо указать в атрибуте fontName имя физического шрифта, имя логического шрифта или имя семейства шрифтов из зарегистрированных расширений шрифтов JasperReports.
Название шрифта PDF
Библиотека JasperReports использует библиотеку iText при экспорте отчетов в PDF (Portable Document Format). PDF-файлы можно просматривать на разных платформах, и они всегда будут выглядеть одинаково. Отчасти это связано с тем, что в этом формате есть особый способ работы со шрифтами. Атрибут fontName не используется при экспорте в PDF. Атрибут 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 из приведенного выше списка.
Имя файла TTF, который может быть расположен на диске во время выполнения при экспорте в PDF.
Настоящее имя зарегистрированного шрифта.
Суффикс ключа (часть после net.sf.jasperreports.export.pdf.font ) для шрифта, зарегистрированного в iText как файл шрифта.
Шрифты по умолчанию и наследование
Каждый текстовый элемент наследует атрибуты шрифта и стиля от своего родительского элемента, который, в свою очередь, наследует эти атрибуты от своего родительского элемента. Если для элементов не определены стили и / или шрифты, будет применен стиль по умолчанию (и / или шрифт - но теперь он устарел), объявленный в корневом элементе <jasperReport />.
Определение стилей или шрифтов по умолчанию в 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 не встроены. |
пример
Чтобы продемонстрировать использование шрифтов и атрибутов шрифтов для получения определенного внешнего вида текста, давайте напишем новый шаблон отчета (jasper_report_template.jrxml). Содержимое JRXML показано ниже. Сохраните его в каталоге C: \ tools \ jasperreports-5.0.1 \ test. Здесь мы будем отображать текст в заголовке отчета в различных форматах шрифтов.
<?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 TutorialsPoint!]]>
</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 TutorialsPoint!</text></staticText>]]>
</text>
</staticText>
<staticText>
<reportElement x = "0" y = "100" width = "150" height = "40"/>
<textElement>
<font size = "12"/>
</textElement>
<text><![CDATA[Welcome to TutorialsPoint!]]></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 TutorialsPoint!</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 TutorialsPoint!]]></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 TutorialsPoint!</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 TutorialsPoint!]]></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 TutorialsPoint!</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 TutorialsPoint!]]></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 TutorialsPoint!</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 TutorialsPoint!]]></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 TutorialsPoint!</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 TutorialsPoint!]]></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 TutorialsPoint!</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 TutorialsPoint!]]></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 TutorialsPoint!</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 TutorialsPoint!]]></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 TutorialsPoint!</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 TutorialsPoint!]]></text>
</staticText>
<staticText>
<reportElement x = "160" y = "500" width = "390" height = "40"/>
<textElement/>
<text>
<![CDATA[<staticText>
<reportElement x = "0" y = "650" width = "150" height = "90" forecolor = "red"
backcolor = "#99DDFF" mode = "Opaque"/>
<textElement textAlignment = "Right" verticalAlignment = "Bottom">
<font fontName = "SansSerif" size = "12" isBold = "true"
pdfFontName = "DejaVu Sans Bold" isPdfEmbedded = "true"/>
</textElement>
<text>Welcome to TutorialsPoint!</text></staticText>]]>
</text>
</staticText>
</band>
</title>
</jasperReport>
Код 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 при заполнении отчетов для имитации источника данных с одной записью в нем, но со всеми полями, равными нулю .
Генерация отчетов
Мы скомпилируем и выполним указанный выше файл, используя наш обычный процесс сборки ANT. Содержимое файла build.xml (сохраненного в каталоге C: \ tools \ jasperreports-5.0.1 \ test) показано ниже.
Файл импорта - baseBuild.xml выбирается из главы « Настройка среды» и должен быть помещен в тот же каталог, что и build.xml.
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "viewFillReport" basedir = ".">
<import file = "baseBuild.xml" />
<target name = "viewFillReport" depends = "compile,compilereportdesing,run"
description = "Launches the report viewer to preview the report
stored in the .JRprint file.">
<java classname = "net.sf.jasperreports.view.JasperViewer" fork = "true">
<arg value = "-F${file.name}.JRprint" />
<classpath refid = "classpath" />
</java>
</target>
<target name = "compilereportdesing" description = "Compiles the JXML file and
produces the .jasper file.">
<taskdef name = "jrc" classname = "net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid = "classpath" />
</taskdef>
<jrc destdir = ".">
<src>
<fileset dir = ".">
<include name = "*.jrxml" />
</fileset>
</src>
<classpath refid = "classpath" />
</jrc>
</target>
</project>
Затем давайте откроем окно командной строки и перейдем в каталог, в котором находится 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, как показано на экране, приведенном ниже -
Здесь мы видим, что текст «Добро пожаловать в TutorialsPoint» отображается в разных форматах шрифтов.