Moin ihr lieben,
ich versuche gerade eine PDF-Datei aus einem Servlet zu streamen. Die Art und Weise wie ich da vorgehen muss ist mir eigentlich bekannt und ich habe das ganze auch schon für JFreeChart umgesetzt (BufferedImage) aber irgendwie will dieses Servlet nicht angesprochen werden.
Ich benutze flyingsaucer-R8 und IText für die PDF-Generierung aus einer xhtml-Datei.
Allerdings sollte es damit nichts zu tun haben, denn das Servlet wird noch nicht mal ansatzweise angesprochen.
Gemerkt habe ich das dadurch, das der
nicht auf der Console auftaucht.
Eine Exception wird auch nicht geschmissen, es passiert eigentlich garnichts, von einem HTML 404 mal abgesehen.
Hier mal was zum anschauen.
Servlet-Code:
Registrierung und Mapping in der web.xml:
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<!--Der ganze Kram davor -->
<servlet>
<servlet-name>ImageStreamServlet</servlet-name>
<servlet-class>de.klientsoftware.statistik.ImageStreamServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>ExportToPDFServlet</servlet-name>
<servlet-class>de.klientsoftware.statistik.ExportToPDFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!--Andere Servlets dazwischen -->
<servlet-mapping>
<servlet-name>ImageStreamServlet</servlet-name>
<url-pattern>/ImageStreamServlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ExportToPDFServlet</servlet-name>
<url-pattern>/ExportToPDFServlet/*</url-pattern>
</servlet-mapping>
<!-- und der ganze rest den mann so braucht -->
[/XML]
Ich habe die beiden Servlets gepostet, weil ich darauf aufmerksam machen wollte, das ich bei dem zweiten servlet nichts anderes gemacht habe als bei dem ersten für die Bilder.
Einbinden in die JSF-Page:
Variante 1:
Variante 2:
Variante 3:
Egal was ich mache, es wird kein GET auf das Servlet abgesetzt...
Jemand eine Idee ?

LG
David
EDIT:
Ich habe noch folgende versucht:
Wobei mir der server sagt:
j_idt42 ist dann wohl der commandLink ohne id.
ich versuche gerade eine PDF-Datei aus einem Servlet zu streamen. Die Art und Weise wie ich da vorgehen muss ist mir eigentlich bekannt und ich habe das ganze auch schon für JFreeChart umgesetzt (BufferedImage) aber irgendwie will dieses Servlet nicht angesprochen werden.
Ich benutze flyingsaucer-R8 und IText für die PDF-Generierung aus einer xhtml-Datei.
Allerdings sollte es damit nichts zu tun haben, denn das Servlet wird noch nicht mal ansatzweise angesprochen.
Gemerkt habe ich das dadurch, das der
Code:
System.out.println("ENTER PDF SERVLET");
Eine Exception wird auch nicht geschmissen, es passiert eigentlich garnichts, von einem HTML 404 mal abgesehen.
Hier mal was zum anschauen.
Servlet-Code:
Java:
package de.klientsoftware.statistik;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.lowagie.text.DocumentException;
import java.io.OutputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.xhtmlrenderer.pdf.ITextRenderer;
/**
*
* @author david
*/
public class ExportToPDFServlet extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
System.out.println("ENTER PDF SERVLET");
OutputStream out = response.getOutputStream();
String filename = request.getPathInfo().substring(1);
String inputFile = request.getServletContext().getRealPath("/web/faces/user/"+filename);
try {
response.setContentType("application/pdf");
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(inputFile);
renderer.layout();
renderer.createPDF(out);
}catch(DocumentException dexp){
Logger.getLogger(ExportToPDFServlet.class.getName()).log(Level.SEVERE, null, dexp);
}finally {
out.close();
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
Registrierung und Mapping in der web.xml:
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<!--Der ganze Kram davor -->
<servlet>
<servlet-name>ImageStreamServlet</servlet-name>
<servlet-class>de.klientsoftware.statistik.ImageStreamServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>ExportToPDFServlet</servlet-name>
<servlet-class>de.klientsoftware.statistik.ExportToPDFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!--Andere Servlets dazwischen -->
<servlet-mapping>
<servlet-name>ImageStreamServlet</servlet-name>
<url-pattern>/ImageStreamServlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ExportToPDFServlet</servlet-name>
<url-pattern>/ExportToPDFServlet/*</url-pattern>
</servlet-mapping>
<!-- und der ganze rest den mann so braucht -->
[/XML]
Ich habe die beiden Servlets gepostet, weil ich darauf aufmerksam machen wollte, das ich bei dem zweiten servlet nichts anderes gemacht habe als bei dem ersten für die Bilder.
Einbinden in die JSF-Page:
Variante 1:
HTML:
<iframe id="pdf" src="/ExportToPDFServlet/statistik.xhtml" frameborder="0" width="500px" height="500px" type="application/pdf">
Sowas aber auch! Kein IFrame-Support?
</iframe>
Variante 2:
HTML:
<object id="pdf" border="0" width="100%" height="100%" type="application/pdf" data="/ExportToPDFServlet/statistik.xhtml">
Sowas aber auch! Kein PDF-Viwer installiert??
</object>
Variante 3:
HTML:
<a href="/ExportToPDFServlet/statistik.xhtml" > Her mit der PDF!!! </a>
Egal was ich mache, es wird kein GET auf das Servlet abgesetzt...
Jemand eine Idee ?
LG
David
EDIT:
Ich habe noch folgende versucht:
HTML:
<h:commandLink value="HER DAMIT MAN!" action="/ExportToPDFServlet/statistik.xhtml" />
Wobei mir der server sagt:
WARNUNG: JSF1090: Navigations-Fall wurde für Komponente j_idt42 nicht aufgelöst.
j_idt42 ist dann wohl der commandLink ohne id.
Zuletzt bearbeitet von einem Moderator: