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>