[RESOLVIDO]iReport + texto em negrito

Bom dia a todos.

Ao gerar um relatório que possuo o jasper mostra na tela o meu relatório com negrito e tudo mais,

só que quando salvo em PDF este negrito some, alguem terial alguma ideia?

tenho os seguintes .jars na aplicação:

commons-beanutils-1.8.2.jar
commons-collections-3.2.1.jar
commons-digester-1.7.jar
commons-logging-1.1.jar
groovy-all-1.7.5.jar
jasperreports-3.7.6.jar
iText-2.1.7.jar
iText-rtf-2.1.5.jar

sera que falta mais algum? ou é problema do iReport?

vlw.

bom , eu não sei se falta jar pra isso.

quando vc dá um view do pdf ele aparece ou vc esta vendo isso direto na aplicação

abrxx

Normalmente, em fontes que estão com um tamanho muito pequeno, você não consegue perceber o negrito no Jasper. Tente aumentar um pouco a fonte e comparar o que foi renderizado com algum outro texto do mesmo tamanho.

[]'s

da um print e coloca pra nos ve-lo.

da sua aplicação!

segue em anexo as 2 imagens.

1ª a minha visualização do relatótio onde aparece normalmente o negrito ( caso o cliente imprima esta tudo ok ).

2ª é a visualização da mesma salva em pdf ( o que muitos clientes fazem, “cliquei no salvar da visualizaçãop do relatório” ) o que deveria estar em negrito esta sublinhado em vermelho, ja imprimi as 2 e constatei que na segunda o negrito não aparece, e na primeira esta tudo normal.




Velho , pra isso funcionar vc provavelmente tera que mapear as fontes para pdf , vou postar um exemplo:
metodo para geracao do rel em byte[]:

private byte[] export(final JRAbstractExporter exporter,
			final List<JasperPrint> prints) throws JRException {

		final ByteArrayOutputStream baos = new ByteArrayOutputStream();

		try {
			exporter.setParameter(JRExporterParameter.FONT_MAP,
					ReportsFontMapParser.readAndParseFontMap());
		} catch (Exception e) {
			throw new JRException(e);
		}

		if (prints.size() == 1) {
			exporter.setParameter(
					JRExporterParameter.JASPER_PRINT,
					prints.iterator().next());

		} else {
			exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, prints);
		}

		exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
		exporter.exportReport();

		return baos.toByteArray();
	}

Classe para mapeamento de fontes:


import java.io.File;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Map;

import net.sf.jasperreports.engine.export.FontKey;
import net.sf.jasperreports.engine.export.PdfFont;
import br.com.sanepar.usti.corporativos.util.Constraints;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

/**
 * Classe esponsável por fazer o parser do arquivo .XML mapeado com as fontes
 * para um mapa de fontes que pode ser compreendido pelo Jasper Reports 3.0.0
 * 
 * @author Leandro
 * @since 27/11/2009
 */
public abstract class ReportsFontMapParser {

	/**
	 * Construtor padrao da classe
	 * 
	 */
	public ReportsFontMapParser() {
	}

	/**
	 * Le o arquivo XML de mapeamento das fontes e retorna o map que o jasper
	 * reports pode ler.
	 * 
	 * 
	 * @return the map.
	 * @throws Exception
	 *             Caso alguma excessao ocorra.
	 */
	public static Map<FontKey, PdfFont> readAndParseFontMap() throws Exception {
		Map<FontKey, PdfFont> fontMap = null;

		File xmlFile = new File(ReportsFontMapParser.class.getResource(
				"/" + Constraints.FILE_REPORTS_FONTS_MAP).toURI());

		ReportsFontXmlMirror rp = parseXmlFileReportFont(xmlFile);
		fontMap = parseRpFileToMapReport(rp);

		return fontMap;
	}

	/**
	 * Faz o parser o aquivo XMl para a classe ReportsFont
	 * 
	 * @param xmlFile
	 * @return Parsed Class.
	 * @throws Exception
	 */
	private static ReportsFontXmlMirror parseXmlFileReportFont(File xmlFile) throws Exception {
		XStream xstream = new XStream(new DomDriver()); 
		xstream.alias("reports-used-fonts", ReportsFontXmlMirror.class);
		xstream.alias("font-report", FontReport.class);
		xstream.aliasAttribute(ReportsFontXmlMirror.class, "fontsReport", "fonts");
		
		ReportsFontXmlMirror rf = null;
		rf = (ReportsFontXmlMirror) xstream.fromXML(new FileReader(xmlFile));

		return rf;
	}

	/**
	 * Método que faz o parser da classe do sistema para o mapa que o jasper
	 * reports interpreta.
	 * 
	 * @author Leandro
	 * @date 27/11/2009
	 * 
	 * @param parserClass
	 * @return
	 */
	private static Map<FontKey, PdfFont> parseRpFileToMapReport(ReportsFontXmlMirror parserClass) {
		final Map<FontKey, PdfFont> fontMap = new HashMap<FontKey, PdfFont>();
		final String dirFonts = (System.getProperty("os.name").startsWith("Win")) 
				? Constraints.REPORTS_LOCAL_FONT_WINDOWS
				: Constraints.REPORTS_LOCAL_FONT_LINUX;

		for (FontReport fontReport : parserClass.getFonts()) {
			FontKey fontKey = new FontKey(fontReport.getName(), fontReport.isBold(), fontReport.isItalic());
			PdfFont pdfFont = new PdfFont(dirFonts + fontReport.getFileName(), "Cp1252", false);
			
			fontMap.put(fontKey, pdfFont);
		}

		return fontMap;
	}

Classe que representa os xml das fontes:


/**
 * Classe que representa o xml das fontes utilizadas pela aplicação.
 * 
 * @author Leandro 
 * @since 23/03/2010
 */
public class ReportsFontXmlMirror {
	/**
	 * Conjunto das fontes inseridas no XML de configuração.
	 */
	private Set<FontReport> fontsReport = new HashSet<FontReport>();
	
	/**
	 * Construtor padrao da classe.
	 */
	public ReportsFontXmlMirror() {
	}
	
	public void add(FontReport fonte) {
		this.fontsReport.add(fonte);
	}
	
	public Set<FontReport> getFonts() {
		return fontsReport;
	}

	public void setFonts(Set<FontReport> fonte) {
		this.fontsReport = fonte;
	}

classe tag das fontes:



/**
 * Classe que representa a tag das fontes utilizada pela aplicacao. 
 * 
 * @author Leandro
 * @since 23/03/2010
 */
public class FontReport {
	/** Nome da Fonte */
	private String name;
	
	/** Fonte negrito */
	private Boolean bold;
	
	/** Fonte italico */
	private Boolean italic;
	
	/** Nome do arquivo da fonte */
	private String fileName;
	
	/**
	 * Construtor Default.
	 */
	public FontReport() {
	}

	/**
	 * Construtor com parametros.
	 * 
	 * @param name
	 * @param bold
	 * @param italic
	 * @param fileName
	 */
	public FontReport(String name, Boolean bold, Boolean italic, String fileName) {
		super();
		this.name = name;
		this.bold = bold;
		this.italic = italic;
		this.fileName = fileName;
	}
//setter and getters
}

Metodo de geracao do pdf:

/**
	 * Exporta o relatorio customizado.
	 * 
	 * @param exporter
	 * @param prints
	 * @return
	 * @throws JRException
	 */
	private byte[] export(final JRAbstractExporter exporter,
			final List<JasperPrint> prints) throws JRException {

		final ByteArrayOutputStream baos = new ByteArrayOutputStream();

		try {
			exporter.setParameter(JRExporterParameter.FONT_MAP,
					ReportsFontMapParser.readAndParseFontMap());
		} catch (Exception e) {
			throw new JRException(e);
		}

		if (prints.size() == 1) {
			exporter.setParameter(
					JRExporterParameter.JASPER_PRINT,
					prints.iterator().next());

		} else {
			exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, prints);
		}

		exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
		exporter.exportReport();

		return baos.toByteArray();
	}

	/**
	 * Cria o PdfExporter.
	 * 
	 * @date 27/11/2009
	 * 
	 * @return
	 */
	private JRPdfExporter getPdfExporter() {
		final JRPdfExporter exporter = new JRPdfExporter();

		exporter.setParameter(JRPdfExporterParameter.FORCE_LINEBREAK_POLICY,
				Boolean.TRUE);

		return exporter;
	}

Mapeamento das fontes, este arquivo fica na raiz do classPath:



	<!--
		Mapeamento das fontes utilizadas pelos relatorios. Leandro - 23/3/2010
	-->

<reports-used-fonts>
	<fonts>
		<font-report>
			<name>Arial Narrow</name>
			<bold>false</bold>
			<italic>false</italic>
			<fileName>ARIALN.TTF</fileName>
		</font-report>

		<font-report>
			<name>Arial Narrow</name>
			<bold>false</bold>
			<italic>true</italic>
			<fileName>ARIALNI.TTF</fileName>
		</font-report>

		<font-report>
			<name>Arial Narrow</name>
			<bold>true</bold>
			<italic>false</italic>
			<fileName>ARIALNB.TTF</fileName>
		</font-report>

	</fonts>
</reports-used-fonts>

vlw, deu certo.

Outra opção é mudar a fonte dos textfields do Relatorio para SansSerif.

Basta utilizar essa biblioteca: jasperreports-fonts-light.jar
Disponível neste site:
https://sites.google.com/site/xmedeko/code/misc/jasperreports-pdf-font-mapping
E utilizar as tags HTML: Negrito ou SUBLINHADO U ou italico
Deixando apenas a fonte padrão: SansSerif e habilitado a opção Markup: html
Utilizei a versão iReport 4.5.0.

[quote]Basta utilizar essa biblioteca: jasperreports-fonts-light.jar
Disponível neste site:


E utilizar as tags HTML: Negrito ou SUBLINHADO U ou italico
Deixando apenas a fonte padrão: SansSerif e habilitado a opção Markup: html
Utilizei a versão iReport 4.5.0.[/quote]

Consegui resolver assim tambem, só precisei mudar a versão pois a minha estava muito antiga. Peguei a mais nova e deu certo, 4.7.

Vlw marcao

como faço para a tag

?
Ja coloquei o markup em html, mas não reconhece!