Отчет содержит текстовые элементы, и каждый из них может иметь свои настройки шрифта. Эти параметры можно указать с помощью тега < font >, доступного в теге <textElement>. Отчет может определить количество шрифтов. После определения они могут использоваться в качестве настроек по умолчанию или базовых шрифтов для других определений шрифтов по всему отчету.
Сообщить о шрифтах
Шрифт отчета — это набор настроек шрифта, объявленных на уровне отчета. Шрифт отчета можно повторно использовать во всем шаблоне отчета при настройке свойств шрифта текстовых элементов.
Шрифты отчетов теперь устарели. Не используйте элементы <reportFont />, объявленные внутри самого документа. Вместо этого используйте элемент <style />.
Атрибуты шрифта
В таблице ниже приведены основные атрибуты элемента < font > —
S.NO | Атрибут и описание |
---|---|
1 |
Fontname Имя шрифта, которое может быть именем физического шрифта, логического или именем семейства шрифтов из зарегистрированных расширений шрифтов JasperReports. |
2 |
размер Размер шрифта измеряется в пунктах. По умолчанию это 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 без проблем. |
Fontname
Имя шрифта, которое может быть именем физического шрифта, логического или именем семейства шрифтов из зарегистрированных расширений шрифтов JasperReports.
размер
Размер шрифта измеряется в пунктах. По умолчанию это 10.
isBold
Флаг, указывающий, требуется ли жирный шрифт. По умолчанию используется значение false.
isItalic
Флаг, указывающий, требуется ли курсивный шрифт. По умолчанию используется значение false.
isUnderline
Флаг, указывающий, требуется ли подчеркивание текста. По умолчанию используется значение false.
isStrikeThrough
Флаг, указывающий, требуется ли зачеркивание текста. По умолчанию используется значение false.
pdfFontName
Имя эквивалентного шрифта PDF, требуемого библиотекой iText при экспорте документов в формат PDF.
pdfEncoding
Эквивалентная кодировка символов PDF, также требуемая библиотекой iText.
isPdfEmbedded
Флаг, который указывает, должен ли шрифт быть встроен в сам документ. По умолчанию используется значение false. Если установлено значение true, помогает просматривать документ PDF без проблем.
Типы шрифтов
В JasperReports шрифты можно классифицировать как —
-
Логические шрифты. Пять типов шрифтов, распознаваемых платформой Java начиная с версии 1.0, называются логическими шрифтами. Это — Serif, SansSerif, Monospaced, Dialog и DialogInput . Эти логические шрифты не являются реальными библиотеками шрифтов, которые установлены где-либо в системе. Это просто имена типов шрифтов, распознаваемые средой исполнения Java. Они должны быть сопоставлены с каким-либо физическим шрифтом, который установлен в системе.
-
Физические шрифты. Эти шрифты представляют собой фактические библиотеки шрифтов, состоящие, например, из шрифтов TrueType или PostScript Type 1. Физические шрифты могут быть Arial, Time, Helvetica, Courier или любым другим количеством шрифтов, включая международные шрифты.
-
Расширения шрифтов — библиотека JasperReports может использовать шрифты, зарегистрированные на лету во время выполнения, благодаря встроенной поддержке расширений шрифтов. Список семейств шрифтов может быть сделан доступным для JasperReports с использованием расширения шрифта. Они сделаны из похожих шрифтов и поддерживают определенные локали.
Логические шрифты. Пять типов шрифтов, распознаваемых платформой Java начиная с версии 1.0, называются логическими шрифтами. Это — Serif, SansSerif, Monospaced, Dialog и DialogInput . Эти логические шрифты не являются реальными библиотеками шрифтов, которые установлены где-либо в системе. Это просто имена типов шрифтов, распознаваемые средой исполнения Java. Они должны быть сопоставлены с каким-либо физическим шрифтом, который установлен в системе.
Физические шрифты. Эти шрифты представляют собой фактические библиотеки шрифтов, состоящие, например, из шрифтов TrueType или PostScript Type 1. Физические шрифты могут быть Arial, Time, Helvetica, Courier или любым другим количеством шрифтов, включая международные шрифты.
Расширения шрифтов — библиотека JasperReports может использовать шрифты, зарегистрированные на лету во время выполнения, благодаря встроенной поддержке расширений шрифтов. Список семейств шрифтов может быть сделан доступным для JasperReports с использованием расширения шрифта. Они сделаны из похожих шрифтов и поддерживают определенные локали.
Как описано в таблице выше, нам нужно указать в атрибуте fontName имя физического шрифта, имя логического шрифта или имя семейства шрифтов из зарегистрированных расширений шрифтов JasperReports.
Название шрифта PDF
Библиотека JasperReports использует библиотеку iText при экспорте отчетов в PDF (формат переносимого документа). PDF-файлы можно просматривать на разных платформах и всегда будут выглядеть одинаково. Это отчасти потому, что в этом формате есть особый способ работы со шрифтами. Атрибут fontName бесполезен при экспорте в PDF. Атрибут pdfFontName существует там, где нам нужно указать настройки шрифта.
Библиотека iText знает, как обращаться со встроенными шрифтами и файлами TTF, и распознает следующие имена встроенных шрифтов:
- курьер
- Courier-Bold
- Courier-BoldOblique
- Courier-Oblique
- Helvetica
- Helvetica-Bold
- Helvetica-BoldOblique
- Helvetica-Косой
- Условное обозначение
- Times-Roman
- Времена-Bold
- Времена-BoldItalic
- Времена-Italic
- ZapfDingbats
Согласно предварительному условию библиотеки iText, для работы со шрифтами в качестве имени шрифта необходимо указать одно из следующего:
-
Имя встроенного шрифта из приведенного выше списка.
-
Имя файла TTF (True Type Font), который он может найти на диске.
-
Настоящее имя шрифта, при условии, что файл TTF, содержащий шрифт, был ранее зарегистрирован в iText или что псевдоним был определен при регистрации шрифта.
Имя встроенного шрифта из приведенного выше списка.
Имя файла TTF (True Type Font), который он может найти на диске.
Настоящее имя шрифта, при условии, что файл TTF, содержащий шрифт, был ранее зарегистрирован в iText или что псевдоним был определен при регистрации шрифта.
Исходя из вышеуказанных предварительных условий, атрибут pdfFontName может содержать одно из следующих значений:
-
Название встроенного шрифта PDF из приведенного выше списка.
-
Имя файла TTF, который может находиться на диске во время выполнения при экспорте в PDF.
-
Настоящее имя зарегистрированного шрифта.
-
Суффикс ключа (часть после net.sf.jasperreports.export.pdf.font ) для шрифта, зарегистрированного в iText, в качестве файла шрифта.
Название встроенного шрифта PDF из приведенного выше списка.
Имя файла TTF, который может находиться на диске во время выполнения при экспорте в PDF.
Настоящее имя зарегистрированного шрифта.
Суффикс ключа (часть после net.sf.jasperreports.export.pdf.font ) для шрифта, зарегистрированного в iText, в качестве файла шрифта.
Стандартные шрифты и наследование
Каждый текстовый элемент наследует атрибуты font и style от своего родительского элемента, который, в свою очередь, наследует эти атрибуты от своего родительского элемента. Если для элементов не определены стили и / или шрифты, будет применен стиль по умолчанию (и / или шрифт, но теперь он не рекомендуется), объявленный в корневом элементе <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 = ложь | По умолчанию шрифты 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, как показано на приведенном ниже экране —
Здесь мы видим, что текст «Welcome to TutorialsPoint» отображается в разных форматах шрифтов.