coloque FacesContext.getCurrentInstance().responseComplete() no final do método, tenho algo assim aqui e funcionou.
public void gerar()
{
File reportFile = new File(((ServletContext) contextoAplicacao.getExternalContext()
.getContext()).getRealPath("/relatorios/" + arquivoModelo));
byte[] bytes = null;
Map parametros = new HashMap();
parametros.put("TITULO", titulo);
JRBeanCollectionDataSource fonteDados = new JRBeanCollectionDataSource(dados);
try
{
bytes = JasperRunManager.runReportToPdf(reportFile.getPath(),
parametros, fonteDados);
OutputStream saida = response.getOutputStream();
saida.write(bytes, 0, bytes.length);
saida.flush();
saida.close();
FacesContext.getCurrentInstance().responseComplete();
}
catch (Exception e)
{
System.out.println("Falha na geração do relatório!");
e.printStackTrace();
}
}