Olá!
Estou tentando exibir um relatório em PDF para o cliente, mas tem retornado o erro O arquivo não começa com '%PDF-', sendo que se eu substitui o request.getParameter("codigo") diretamenta pela string que corresponde a variável, o relatório mostra corretamente ou se mudar o response.setHeader("Content-Disposition", "inline; filename=\"Relatório.pdf\";"); por response.setHeader("Content-Disposition", "attachment; filename=\"Relatório.pdf\";");, só que preciso mandar o relatório para a janela e não para download.
Segue o código como tenho feito.
Classe que cria o Relatório:package teste.server.action;
import net.sf.jasperreports.engine.*;
import java.util.*;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.*;
import teste.server.dao.*;
import teste.server.model.*;
public class RelatorioRelacaoSimples implements ActionsReport {
public RelatorioRelacaoSimples() {
}
public void Execute(ServletContext sc, HttpServletRequest request, HttpServletResponse response){
FichaDAO dao = null;
String pathJasper = sc.getRealPath("/WEB-INF/classes/teste/server/relatorios/")+ "/";
response.setContentType("text/html;charset=UTF-8");
try{
int codigo = Integer.parseInt(request.getParameter("codigo"));
//int codigo = Integer.parseInt("9");
dao = new FichaDAO(Uteis.getBanco(request));
JRResultSetDataSource jrRS = new JRResultSetDataSource(dao.getRelacaoSimples(codigo));
HashMap parameters = new HashMap();
byte[] bytes = null;
try {
bytes = JasperRunManager.runReportToPdf(pathJasper + "relacaosimples.jasper", parameters, jrRS);
} catch (Exception e) {
e.printStackTrace();
return;
}
if (bytes != null && bytes.length > 0) {
ServletOutputStream outputStream = response.getOutputStream();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline; filename=\"Relatório.pdf\";");
//response.setHeader("Content-Disposition", "attachment; filename=\"Relatório.pdf\";");
response.setHeader("Cache-Control", "no-cache, must-revalidate");
response.setContentLength(bytes.length);
outputStream.write(bytes, 0, bytes.length);
outputStream.println();
outputStream.flush();
outputStream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
package teste.server.model;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import teste.server.action.ActionsReport;
public class Report extends HttpServlet {
private ServletContext sc;
private String jsp = "";
public void init(ServletConfig config) throws ServletException {
super.init(config);
sc = config.getServletContext();
}
/** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
*/
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Class classe = null;
ActionsReport obj = null;
String relatorio;
relatorio = "teste.server.action."+request.getParameter("action");
try {
classe = Class.forName(relatorio);
obj = (ActionsReport)classe.newInstance();
obj.Execute(sc, request, response);
}
catch (Exception e) {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println(e.toString());
}
finally {
classe = null;
obj = null;
}
//
//Redirecionando pagina
RequestDispatcher rd = request.getRequestDispatcher(jsp);
rd.forward(request, response);
}
}
package teste.client;
import teste.client.myclass.gwt.*;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent;
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteHandler;
import com.google.gwt.user.client.ui.Frame;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.HTML;
public class FormRelatorio extends BasicForm {
public TextBox codigo;
public String action;
private WaitPanel msg;
private HTML pdf;
//MEUS PROCEDIMENTOS
private void Gravar(){
String root_path = GWT.getHostPageBaseURL();
FORM.setAction(root_path+"Report?action="+action);
msg = new WaitPanel();
msg.ShowModal();
FORM.submit();
}
public void ShowModal(){
super.ShowModal();
Gravar();
}
//CONSTRUTOR DO FORM
public FormRelatorio(String text) {
super(text);
initComponents();
}
private void initComponents() {
FORM.addSubmitCompleteHandler(new SubmitCompleteHandler() {
public void onSubmitComplete(SubmitCompleteEvent event) {
msg.Close();
msg = null;
pdf.setHTML(event.getResults());
}
});
FORM.setHeight("100%");
Pgeral.setSize(Integer.toString(Window.getClientWidth()-30)+"px", Integer.toString(Window.getClientHeight()-50)+"px");
codigo = new TextBox();
codigo.setVisible(false);
codigo.setName("codigo");
Pform.add(codigo, 23, 10);
pdf = new HTML("", true);
Pform.add(pdf, 0, 0);
pdf.setSize("100%", "100%");
}
}
final FormRelatorio frmrelatorio = new FormRelatorio("Relatório");
frmrelatorio.codigo.setText(grid.getDSField("fic_codigo"));
frmrelatorio.action = "RelatorioRelacaoSimples";
frmrelatorio.ShowModal();
Alguem mais já se deparou com esse problema?