Reportar fontes
Um relatório contém elementos de texto e cada um deles pode ter suas próprias configurações de fonte. Essas configurações podem ser especificadas usando o <font> tag disponível na tag <textElement>. Um relatório pode definir várias fontes. Depois de definidos, eles podem ser usados como configurações de fonte padrão ou base para outras definições de fonte em todo o relatório.
Reportar fontes
Uma fonte de relatório é um conjunto de configurações de fonte, declaradas no nível do relatório. Uma fonte de relatório pode ser reutilizada em todo o modelo de relatório ao definir as propriedades da fonte de elementos de texto.
Fontes de relatório agora estão obsoletas. Não use elementos <reportFont /> declarados no próprio documento. Use o elemento <style /> em seu lugar.
Atributos de fonte
A tabela abaixo resume os principais atributos do <font> elemento -
S.NO | Atributo e descrição |
---|---|
1 | fontName O nome da fonte, que pode ser o nome de uma fonte física, lógica ou o nome de uma família de fontes das extensões de fonte JasperReports registradas. |
2 | size O tamanho da fonte medido em pontos. O padrão é 10. |
3 | isBold O sinalizador que especifica se uma fonte em negrito é necessária. O padrão é falso. |
4 | isItalic O sinalizador que especifica se uma fonte em itálico é necessária. O padrão é falso. |
5 | isUnderline A bandeira que especifica se a decoração do texto sublinhado é necessária. O padrão é falso. |
6 | isStrikeThrough A bandeira que especifica se a decoração de texto tachado é necessária. O padrão é falso. |
7 | pdfFontName O nome de uma fonte PDF equivalente exigida pela biblioteca iText ao exportar documentos para o formato PDF. |
8 | pdfEncoding A codificação de caracteres PDF equivalente, também exigida pela biblioteca iText. |
9 | isPdfEmbedded O sinalizador que especifica se a fonte deve ser incorporada ao próprio documento. O padrão é falso. Se definido como verdadeiro, ajuda a visualizar o documento PDF sem nenhum problema. |
Tipos de fonte
No JasperReports, as fontes podem ser categorizadas como -
Logical Fonts- Cinco tipos de fontes, que foram reconhecidos pela plataforma Java desde a versão 1.0, são chamados de fontes lógicas. Estes são -Serif, SansSerif, Monospaced, Dialog, and DialogInput. Essas fontes lógicas não são bibliotecas de fontes reais instaladas em qualquer lugar do sistema. Eles são apenas nomes de tipo de fonte reconhecidos pelo Java runtime. Eles devem ser mapeados para alguma fonte física instalada no sistema.
Physical Fonts- Essas fontes são as bibliotecas de fontes reais que consistem em, por exemplo, fontes TrueType ou PostScript Type 1. As fontes físicas podem ser Arial, Time, Helvetica, Courier ou qualquer outra fonte, incluindo fontes internacionais.
Font Extensions- A biblioteca JasperReports pode fazer uso de fontes registradas instantaneamente em tempo de execução, por meio de seu suporte integrado para extensões de fonte. Uma lista de famílias de fontes pode ser disponibilizada para JasperReports usando a extensão de fonte. Eles são feitos de fontes com aparência semelhante e suportam localidades específicas.
Conforme descrito na tabela acima, precisamos especificar no atributo fontName o nome de uma fonte física, o nome de uma fonte lógica ou o nome de uma família de fontes das extensões de fonte JasperReports registradas.
Nome da fonte do PDF
A biblioteca JasperReports usa a biblioteca iText, ao exportar relatórios para PDF (Portable Document Format). Os arquivos PDF podem ser visualizados em várias plataformas e sempre terão a mesma aparência. Em parte, isso ocorre porque, nesse formato, existe uma maneira especial de lidar com fontes. O atributo fontName é inútil ao exportar para PDF. O atributo pdfFontName existe onde precisamos especificar as configurações de fonte.
A biblioteca iText sabe como lidar com fontes integradas e arquivos TTF e reconhece os seguintes nomes de fontes integradas -
- Courier
- Courier-Bold
- Courier-BoldOblique
- Courier-Oblique
- Helvetica
- Helvetica-Bold
- Helvetica-BoldOblique
- Helvetica-Oblique
- Symbol
- Times-Roman
- Times-Bold
- Times-BoldItalic
- Times-Italic
- ZapfDingbats
De acordo com o pré-requisito da biblioteca iText, para trabalhar com fontes, precisamos especificar um dos seguintes como o nome da fonte -
Um nome de fonte embutido da lista acima.
O nome de um arquivo TTF (True Type Font), que pode ser localizado no disco.
O nome real da fonte, desde que o arquivo TTF que contém a fonte tenha sido previamente registrado no iText ou que um apelido tenha sido definido quando a fonte foi registrada.
Com base nos pré-requisitos acima, o atributo pdfFontName pode conter um dos seguintes valores -
O nome de uma fonte PDF incorporada da lista acima.
O nome de um arquivo TTF que pode ser localizado no disco no tempo de execução ao exportar para PDF.
O nome real de uma fonte registrada.
O sufixo da chave (a parte após net.sf.jasperreports.export.pdf.font ) para uma fonte registrada no iText como um arquivo de fonte.
Fontes e herança padrão
Cada elemento de texto herda atributos de fonte e estilo de seu elemento pai, que por sua vez herda esses atributos de seu pai. Se nenhum estilo e / ou fonte for definido para os elementos, o estilo padrão (e / ou fonte - mas agora está obsoleto) declarado no elemento raiz <jasperReport /> será aplicado.
Definir estilos ou fontes padrão no JasperReports não é obrigatório. Se nenhuma fonte for definida para um determinado elemento, o mecanismo procura os atributos de fonte herdados ou, se nenhum atributo for encontrado dessa forma, ele procura a propriedade net.sf.jasperreports.default.font.name em / Arquivo src / default.jasperreports.properties . Seu valor define o nome da família de fontes a ser usada quando as propriedades da fonte não são explicitamente definidas para um elemento de texto ou herdadas de seu pai.
As principais propriedades da fonte padrão e seus valores definidos no arquivo /src/default.jasperreports.properties estão na tabela abaixo -
Propriedade | Descrição |
---|---|
net.sf.jasperreports.default.font.name = SansSerif | O nome da fonte padrão. |
net.sf.jasperreports.default.font.size = 10 | O tamanho da fonte padrão. |
net.sf.jasperreports.default.pdf.font.name = Helvetica | A fonte padrão do PDF. |
net.sf.jasperreports.default.pdf.encoding = Cp1252 | A codificação de caracteres padrão do PDF. |
net.sf.jasperreports.default.pdf.embedded = false | Por padrão, as fontes PDF não são incorporadas. |
Exemplo
Para demonstrar o uso de fontes e atributos de fonte para obter uma aparência de texto específica, vamos escrever um novo modelo de relatório (jasper_report_template.jrxml). O conteúdo do JRXML é o seguinte. Salve-o no diretório C: \ tools \ jasperreports-5.0.1 \ test. Aqui, exibiremos um texto no título do relatório em vários formatos de fonte.
<?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>
O código java para preencher e gerar o relatório é fornecido a seguir. Vamos salvar este arquivoJasperFontsReportFill.java para o diretório 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();
}
}
}
Aqui, usamos uma instância de JREmptyDataSource ao preencher relatórios para simular uma fonte de dados com um registro, mas com todos os campos sendo nulos .
Geração de relatório
Vamos compilar e executar o arquivo acima usando nosso processo normal de construção ANT. O conteúdo do arquivo build.xml (salvo no diretório C: \ tools \ jasperreports-5.0.1 \ test) é fornecido a seguir.
O arquivo de importação - baseBuild.xml é escolhido no capítulo Configuração do ambiente e deve ser colocado no mesmo diretório que o 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>
A seguir, vamos abrir a janela da linha de comando e ir para o diretório onde build.xml está colocado. Finalmente, execute o comandoant -Dmain-class=com.tutorialspoint.JasperFontsReportFill (viewFullReport é o destino padrão) como -
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
Como resultado da compilação acima, uma janela JasperViewer é aberta conforme mostrado na tela abaixo -
Aqui, podemos ver que o texto "Bem-vindo ao TutorialsPoint" é exibido em diferentes formatos de fonte.