Problema ao gerar relatório Jasper no Android - Uma conexão estabelecida foi anulada pelo software no computador host

Pessoal, recentemente os relatórios gerados pelo Chrome começaram a apresentar problemas nos aparelhos Android. Funciona normalmente IOS… Alguém enfrentou esse problema gerando PDF com JasperSoft? Vi que o android agora tem a opção de abrir PDF diretamente pelo browser e creio que isso tenha afetado em algo!

ExceptionConverter: org.apache.catalina.connector.ClientAbortException: java.io.IOException: Uma conexão estabelecida foi anulada pelo software no computador host

public void imprimirPDF() throws JRException, IOException{
   FacesContext context = FacesContext.getCurrentInstance();   		
        ServletContext servletContext = (ServletContext) context.getExternalContext().getContext();    
        String caminhoRelatorio = servletContext.getRealPath("/relatorios/ganhadores.jasper");  
 HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
        response.reset();        
        response.setContentType("application/pdf");
        response.setHeader("Content-disposition", "inline; filename="+nomepdf);
        ServletOutputStream servletOutputStream = response.getOutputStream();
JasperPrint impressao = JasperFillManager.fillReport(caminhoRelatorio, params, new JREmptyDataSource());        
         
	        JRPdfExporter exporter = new JRPdfExporter();        
	        exporter.setExporterInput(new SimpleExporterInput(impressao));
	        exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(servletOutputStream));
	        exporter.exportReport();
	        
	        FacesContext.getCurrentInstance().responseComplete();
	        FacesContext.getCurrentInstance().renderResponse();      
}

omiti os parametros, mas como disse: no IOS e no computador funciona perfeitamente

1 - Teste com Content-Disposition: attachment
Troque seu header por:

response.setHeader("Content-disposition", "attachment; filename=" + nomepdf);

Isso forçará o navegador a baixar o PDF ao invés de abrir inline.
Se isso resolver, confirma-se que o visualizador nativo do Android está causando o fechamento prematuro da conexão.

2 - Teste com PDF pequeno
Gere um PDF com apenas 1 página e veja se o erro persiste.
Isso pode indicar que o Android está interrompendo a conexão por timeout ou memória.

3 - Adicione flush() ao OutputStream:
Em alguns casos, adicionar um flush após exportReport ajuda:

exporter.exportReport();
servletOutputStream.flush();
1 curtida

Obrigado pela resposta, realmente usando o attachment força o download. E agora está abrindo com o Chrome-native. Deve ter sido alteração da atualização do android /chrome
Os pontos negativos da atualização foram:
O inline não funciona;
O PDF não abre automático e nem aparece a mensagem de download. É necessário ir em downloads e enviar o arquivo de lá;
E a outra é que se abrir o arquivo não tem a opção de compartilhar. Tem que compartilhar direto da pasta download.