Olá caros,
Alguém sabe de alguma incompatibilidade ou dificuldade em se abrir pdfs no adobe 5.0 usando o response como “application/pdf” ?
Valeu,
Nico
Olá caros,
Alguém sabe de alguma incompatibilidade ou dificuldade em se abrir pdfs no adobe 5.0 usando o response como “application/pdf” ?
Valeu,
Nico
Que eu saiba, é assim mesmo que você tem de fazer. Você pode ter um dos seguintes problemas:
Olá.
Obrigado por responder. Vou olhar o lance do ssl, não conheço. Então, o problema tem realmente a ver com cache, pelo que entendi. Consigo gerar os streams sem problemas, e eles são abertos sempre pelas versões mais novas do adobe (5.5 em diante). Na versão 5.0, ele abre esporadicamente, ou quando ocorre um refresh via F5. Não consegui forçar o refresh via javascript porque o servlet já responde como apllication/pdf.
Já tentei aumentar o buffer do response, definir o tamanho com exatidão, gerar (estou usando o jasper) o stream de formas diferentes (array de bytes e via jasperPrint) , com diferentes versões do jasper, mas nada.
Parece que a versão 5.0 não faz buffer direito (mando muitos dados variáveis, mas o arquivo é pequeno, cerca de 4kb). No site da adobe, tem um notificação do problema, mas apenas com servidores apache (uso websphere). Na microsoft, nada de útil.
Tem mais alguma idéia do que pode estar ocorrendo ?
Valeu meu caro,
Nico
Você consegue gerar os arquivos numa pasta qualquer?
Assim que gerar esses arquivos, tenta abrir em diferentes versoes do reader.
O problema pode estar no arquivo, e não no meio de comunicação. (1a sugestão do thingol)
Salve.
Valeu por responder.
Quanto aos arquivos, não estão corrompidos. Abrem todos desde o adobe 4.0. Em um dado momento, cheguei a gerar um arquivo físico, salvá-lo no escopo da aplicação e abrí-lo, sempre sem erro, mas essa era uma solução inviável por conta do padrão do cliente. Então, acredito ter resolvido o problema, não da maneira que queria, mas o contornando. Quando gero o stream a partir de uma matriz de bytes, e não de um jasperPrint, o problema ocorre bem menos vezes. Segundo, quando o arquivo não abre no browser, se for desabilitada a opção de integração com o brownser (dentro das opções do adobe), o IE chama o adobe e força a abertura do arquivo por fora do brownser. Nessas condições, nunca dá erro.
Muito obrigado!
Nico
Segue código e referências para que o tópico possa ser útil a outros.
(jasper 0.6.5)
Código que gerava problema:
JasperPrint[] pdfs = (JasperPrint[]) request.getSession().getAttribute("RDAS_Pdfs");
JasperPrint impressao = null;
if ( "C".equals(tipo) ) {
impressao = pdfs[0];
} else if ( "A".equals(tipo) ) {
impressao = pdfs[1];
} else if ( "L".equals(tipo) ) {
impressao = pdfs[2];
} else if ( "N".equals(tipo) ) {
impressao = pdfs[3];
} else {
impressao = pdfs[0];
}
ServletOutputStream out = response.getOutputStream();
JasperExportManager
.exportReportToPdfStream(impressao,
out);
Código que minimiza praticamente todo o problema:
ArrayList al = (ArrayList) request.getSession().getAttribute("RDAS_Pdfs2");
byte[] b = new byte[5];
if ( "C".equals(tipo) ) {
b = (byte[]) al.get(0);
} else if ( "A".equals(tipo) ) {
b = (byte[]) al.get(1);
} else if ( "L".equals(tipo) ) {
b = (byte[]) al.get(2);
} else if ( "N".equals(tipo) ) {
b = (byte[]) al.get(3);
} else {
b = (byte[]) al.get(0);
}
response.setContentType("application/pdf");
response.setContentLength(b.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(b, 0, b.length);
ouputStream.flush();
ouputStream.close();
Referências ao erro:
http://kb.adobe.com/selfservice/viewContent.do?externalId=326626&sliceId=2
( ver “Viewing PDF files within Internet Explorer and Netscape”)
http://kb.adobe.com/selfservice/viewContent.do?externalId=325875&sliceId=2
http://support.microsoft.com/kb/177321/pt-br
http://www.bnl.gov/itd/webapps/pdf_help.asp