Ola,
Meu arquivo XML esta da seguinte forma:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE jasperReport PUBLIC "-//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport ...
mas na hora de gerar o relatorio em formato HTML, o Firefox/IE sempre mostram em UTF-8. Ja fechei todos os navegadores, zerei o cache, restartei o Tomcat, gerei trocentas vezes o arquivo .jasper, mas continua do mesmo jeito.
Fica assim no HTML gerado:
><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
a {text-decoration: none}
</style>
</head>
Ao gerar em PDF os acentos ficam legais, mas no HTML fica tudo baguncado.
O encoding do xml do relatório não tem nada a ver com o encoding do html exportado pelo Jasper. Existe um parâmetro de exportação do relatório que configura isso. Poste o código que você está usando para exportar como html que posso ajudar.
public void GerarRelat(
String Titulo, String NomeArq,
int Lingua, ResultSet rs
) throws IOException {
URL URLNomeArq = cl.getResource(NomeArq);
Map parameters = new HashMap();
parameters.put("Sistema", Sistema);
parameters.put("Titulo", Titulo);
parameters.put("DataHora", FormatDate.getDataAtual(Lingua) + " - " + FormatTime.getHoraAtual(Lingua));
//
try {
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(URLNomeArq);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JRResultSetDataSource(rs));
JasperViewer.viewReport(jasperPrint,false);
}
catch (JRException e) { e.printStackTrace(); }
}
Eu uso o cl (classloader) para eu poder abrir o arquivo Jasper mesmo se ele esteja dentro de um JAR em uma aplicacao Swing Java Web Start.
Te passei o codigo da versao Swing, mas na versao WEB esta assim:
public void GerarHTML(
String Titulo, String NomeArq, String URLImages,
int Lingua, ResultSet rs
) throws IOException, ServletException {
File reportFile = new File(context.getRealPath(NomeArq));
//
Map parameters = new HashMap();
parameters.put("BaseDir", reportFile.getParentFile());
parameters.put("Sistema", Sistema);
parameters.put("Titulo", Titulo);
parameters.put("DataHora", FormatDate.getDataAtual(Lingua) + " - " + FormatTime.getHoraAtual(Lingua));
//
try {
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JRResultSetDataSource(rs));
JRHtmlExporter exporter = new JRHtmlExporter();
Map imagesMap = new HashMap();
response.setContentType("text/html");
PrintWriter out = response.getWriter();
request.getSession().setAttribute("IMAGES_MAP", imagesMap);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, URLImages);
exporter.exportReport();
}
catch (JRException e) {
return;
}
}
Coloquei a linha abaixo e funcionou:
response.setCharacterEncoding("ISO-8859-1");
Contudo, ao olhar o fonte da pagina HTML gerada, esta assim:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
Poderia me explicar como funciona isso? Meu XML esta ISO, meu response esta ISO, mas mesmo assim o Jasper insiste em colocar este charset UTF no <head> da pagina gerada?
Existe um dos parâmetros em JRExporterParameter que serve justamente para definir o encoding. Basta você fazer algo como:
exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "ISO-8859-1");
Note que eu não lembro exatamente o nome do atributo de JRExporterParameter, mas deve ser algo parecido com isso.
Fiz do jeito que voce falou e deu certo, arrumou o “meta” do HTML.
Obg!!!