Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1205 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Insérer une image avec itext

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Insérer une image avec itext

n°1816849
figosat
Posté le 26-11-2008 à 09:54:12  profilanswer
 

Bonjour,
J'essaie d'insérer une image avec itext, mais je n'y arrive pas. Voiçi le bot de mon code :
-----------------------------------------------------
Paragraph p9 = new Paragraph();
p9.add(new Phrase("Commentaires : ", new Font(Font.HELVETICA, 10, Font.NORMAL, Color.decode("#0052AD" ))));
p9.add("\n\n" );
document.add(p9);
Image image = Image.getInstance("images/information.png" );
document.add(image);
----------------------------------------------------
 
Le serveur web (Tomcat) m'affiche l'erreur suivante :  
---------------------------------------------------
org.apache.jasper.JasperException: "getOutputStream()" a déjà été appelé pour cette réponse
 org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:460)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:367)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
 org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:274)
 org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(TilesRequestProcessor.java:254)
 org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:309)
 org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
 org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
 org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 
 
cause mère  
 
java.lang.IllegalStateException: "getOutputStream()" a déjà été appelé pour cette réponse
 org.apache.catalina.connector.Response.getWriter(Response.java:607)
 org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:196)
 org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
 org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
 org.apache.jasper.runtime.JspWriterImpl.flush(JspWriterImpl.java:173)
 java.io.PrintWriter.newLine(Unknown Source)
 java.io.PrintWriter.println(Unknown Source)
 java.io.PrintWriter.println(Unknown Source)
 java.lang.Throwable.printStackTrace(Unknown Source)
 org.apache.struts.taglib.tiles.InsertTag$InsertHandler.processException(InsertTag.java:947)
 org.apache.struts.taglib.tiles.InsertTag$InsertHandler.doEndTag(InsertTag.java:914)
 org.apache.struts.taglib.tiles.InsertTag.doEndTag(InsertTag.java:473)
 org.apache.jsp.jsp.common.defaultPage_jsp._jspx_meth_tiles_005finsert_005f0(defaultPage_jsp.java:455)
 org.apache.jsp.jsp.common.defaultPage_jsp._jspx_meth_c_005fif_005f0(defaultPage_jsp.java:411)
 org.apache.jsp.jsp.common.defaultPage_jsp._jspx_meth_html_005fhtml_005f0(defaultPage_jsp.java:258)
 org.apache.jsp.jsp.common.defaultPage_jsp._jspService(defaultPage_jsp.java:113)
 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
 org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:274)
 org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(TilesRequestProcessor.java:254)
 org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:309)
 org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
 org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
 org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
-------------------------------------------------------------------------------------------

mood
Publicité
Posté le 26-11-2008 à 09:54:12  profilanswer
 

n°1816866
Bidem
Posté le 26-11-2008 à 10:25:48  profilanswer
 

Citation :

java.lang.IllegalStateException: "getOutputStream()" a déjà été appelé pour cette réponse


 
L'erreur n'a rien à voir avec iText mais plus avec ce que tu fais après.
 
en effet, une requette Http ne peut avoir qu'une réponse, soit tu retourne un PDF, soit tu affiches une page.
 
Ici tu veux retourner un PDF, donc il n'y a pas de page, donc pas de forward à la fin de ton action.
 
D'une façon générale, dans une action struts, si on joue avec l'OutputStream de la reponse, on doit retourner null.
 

Code :
  1. // dans une action struts
  2. public ActionForward doExecute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res) throws {
  3.  
  4.   // on manipule directement la réponse
  5.   OutputStream out = response.getOutputStream();
  6.   ...
  7.   // pas de return mapping.findForward(....);
  8.   return null;
  9. }

n°1816873
figosat
Posté le 26-11-2008 à 10:41:26  profilanswer
 

C'est déjà le cas je retourne null. voiçi mon action :
------------------------------------------------------------------------
public ActionForward editionPdf(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
  throws Exception {
  ActionBean actionBean = (ActionBean) request.getSession().getAttribute("actionBeanForUpdate" );
  Document document = new Document(PageSize.A4);
  try {
  response.setContentType("application/pdf" );
   String fileName = "DetailAction"+actionBean.getCodeAction()+".pdf";
   response.addHeader("Content-disposition", "attachment; filename=\"" + fileName +"\"" );
   PdfWriter.getInstance(document, response.getOutputStream());
   // DEBUT DU DOCUMENT
   document.open();
   Paragraph p9 = new Paragraph();
   p9.add(new Phrase("Commentaires : ", new Font(Font.HELVETICA, 10, Font.NORMAL, Color.decode("#0052AD" ))));
   p9.add("\n\n" );
   document.add(p9);
   Image image = new Image.getInstance("http://forum-images.hardware.fr/icones/smilies/pt1cable.gif" );
   document.add(image);
   }catch(DocumentException de) {
            de.printStackTrace();
            System.err.println("document: " + de.getMessage());
  }
     document.close();
  return null;
 }
----------------------------------------------------------------------------
 
Il n y a rien d'anormal

n°1817041
Bidem
Posté le 26-11-2008 à 14:22:11  profilanswer
 

Citation :

java.lang.IllegalStateException: "getOutputStream()" a déjà été appelé pour cette réponse
 org.apache.catalina.connector.Response.getWriter(Response.java:607)
 org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:196)
 org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
 org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
 org.apache.jasper.runtime.JspWriterImpl.flush(JspWriterImpl.java:173)
 java.io.PrintWriter.newLine(Unknown Source)
 java.io.PrintWriter.println(Unknown Source)
 java.io.PrintWriter.println(Unknown Source)
 java.lang.Throwable.printStackTrace(Unknown Source)
 org.apache.struts.taglib.tiles.InsertTag$InsertHandler.processException(InsertTag.java:947)
 org.apache.struts.taglib.tiles.InsertTag$InsertHandler.doEndTag(InsertTag.java:914)
 org.apache.struts.taglib.tiles.InsertTag.doEndTag(InsertTag.java:473)
 org.apache.jsp.jsp.common.defaultPage_jsp._jspx_meth_tiles_005finsert_005f0(defaultPage_jsp.java:455)
 org.apache.jsp.jsp.common.defaultPage_jsp._jspx_meth_c_005fif_005f0(defaultPage_jsp.java:411)
 org.apache.jsp.jsp.common.defaultPage_jsp._jspx_meth_html_005fhtml_005f0(defaultPage_jsp.java:258)
 org.apache.jsp.jsp.common.defaultPage_jsp._jspService(defaultPage_jsp.java:113)
 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
 org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:274)
 org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(TilesRequestProcessor.java:254)
 org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:309)
 org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
 org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
 org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


 
en suivant la stacktrace de bas en haut on peut déduire l'enchainement suivant :
1) une action a été lancée et a priori elle s'est bien terminée (ActionServlet.process)
2) cette action a fait un forward vers un layout (doForward puis processTilesDefinition)
3) ce layout fait intervenir "defaultPage.jsp" et doit faire un template:insert
4) pour une raison X ou Y cet insert se passe mal (processException)
5) comme la réponse à déjà été utilisée, Tomcat n'arrive pas à écrire la stacktrace de cette erreur
    c'est probablement l'action appelée en 1) qui a écrit dans la réponse
 
Peux tu nous montrer le contenu de defaultPage.jsp et comment tout ça est appelé (code html du lien ou bouton qui déclanche tout)

n°1817065
Bidem
Posté le 26-11-2008 à 14:35:19  profilanswer
 

Autre chose, tu devrais catcher les exceptions de type IOException (possible lors du response.getOutputStream() et Image.getInstance)
 

Code :
  1. Image image = new Image.getInstance("http://url image" );


ça compile chez toi ça ?
pour moi, le new est en trop (appel de la méthode static Image.getInstance(String))
 

n°1817090
figosat
Posté le 26-11-2008 à 14:53:22  profilanswer
 

Merci pour tes explication bidem. Le new Image ne compile pas chez moi non plus (ça marche bien avec Image.getInstance).
 
Voiçi les contenu des différents fichiers :
 
Struts_config.xml
----------------
....
<form-bean name="editionPdfForm" type="com.proj.jp.vue.form.ActionJpForm"/>
.....
<action path="/editionPdf"
 name="editionPdfForm"
 parameter="action"
 type="com.proj.jp.vue.action.ActionJpAction"
        scope="request"
 validate="false">    
 <forward name="editionPdf" path="editionPdf"/>
</action>
....
 
Tiles.xml
--------
.....
<definition name="reportingList" extends="defaultPanel">
        <put name="content" value="/jsp/reportingList.jsp" />
        <put name="pageId" value="reportingList" />
        <put name="menu" value="non" />
 </definition>
.....
 
Tiles_defs.xml
-------------
<definition name="defaultPage" path="/jsp/common/defaultPage.jsp">
        <!-- pages definitions -->
        <put type="page" name="header" />
        <put type="page" name="content" />
        <put type="page" name="footer" />
         
        <!-- attributes definitions -->
        <put type="string" name="pageId" />
        <put type="string" name="menu" />
</definition>
 
mon action : ActionJpAction.java
--------------------------------
 
ce que j'ai écrit au dessus
 
 
Ma_jsp.jsp
----------
.....
<html:form name="editionPdf" action="/editionPdf.do?action=editionPdf" type="com.proj.jp.vue.form.ActionJpForm">
 <input class="buttom" type="submit" value="Editer" />
</html:form>
....
 
Merci encore une fois bidem

n°1817236
Bidem
Posté le 26-11-2008 à 17:58:46  profilanswer
 

J'ai un doute quant au lien entre editionPdf et la stacktrace.
En effet la stacktrace montre clairement qu'il y a un forward fait après l'action.

 

Essaye le code suivant pour être sûr qu'on passe bien par où on pense :

Code :
  1. public ActionForward editionPdf(ActionMapping mapping, ActionForm form,
  2.      HttpServletRequest request, HttpServletResponse response)
  3. throws Exception {
  4.   boolean responseUsed = false; // true ssi response.getOutputStream() a été appelé
  5.   try {
  6.     ActionBean actionBean = (ActionBean) request.getSession().getAttribute("actionBeanForUpdate" );
  7.     Document document = new Document(PageSize.A4);
  8.     response.setContentType("application/pdf" );
  9.     String fileName = "DetailAction"+actionBean.getCodeAction()+".pdf";
  10.     response.addHeader("Content-disposition", "attachment; filename=\"" + fileName +"\"" );
  11.     OutputStream out = response.getOutputStream();
  12.  
  13.     boolean responseUsed = true;
  14.    // à partir d'ici toute exception serait problématique car on ne peut pas laisser struts la gérer
  15.    PdfWriter.getInstance(document, out);
  16.    // DEBUT DU DOCUMENT
  17.    document.open();
  18.    Paragraph p9 = new Paragraph();
  19.    p9.add(new Phrase("Commentaires : ", new Font(Font.HELVETICA, 10, Font.NORMAL, Color.decode("#0052AD" ))));
  20.    p9.add("\n\n" );
  21.    document.add(p9);
  22.    Image image = new Image.getInstance("http://forum-images.hardware.fr/icones/smilies/pt1cable.gif" );
  23.    document.add(image);
  24.    }catch(DocumentException de) {
  25.       System.err.println("Erreur DocumentException" );
  26.       de.printStackTrace();
  27.       System.err.println("document: " + de.getMessage());
  28.    }catch(IOException de) {
  29.       de.printStackTrace();
  30.       System.err.println("Erreur IOException : " + de.getMessage());
  31.    } catch(Exception de) {
  32.       de.printStackTrace();
  33.       System.err.println("Erreur Exception : " + de.getMessage());
  34.       System.err.println("responseUsed == " + responseUsed);
  35.   }
  36.   document.close();
  37.   return null;
  38. }
 

Si tu as l'affichage "responseUsed == true" c'est qu'on a isolé le problème (une exception lancée donc Struts faisait un forward vers la page d'erreur)

 

Si tu n'as pas "Erreur Exception : ...", je sèche ;)


Message édité par Bidem le 26-11-2008 à 18:01:38
n°1817249
figosat
Posté le 26-11-2008 à 18:10:51  profilanswer
 

Effectivement ça génère un exception mais pas de responseUsed.
 
java.net.ConnectException: Connection timed out: connect
 at java.net.PlainSocketImpl.socketConnect(Native Method)
 at java.net.PlainSocketImpl.doConnect(Unknown Source)
 at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
 at java.net.PlainSocketImpl.connect(Unknown Source)
 at java.net.Socket.connect(Unknown Source)
 at java.net.Socket.connect(Unknown Source)
 at sun.net.NetworkClient.doConnect(Unknown Source)
 at sun.net.www.http.HttpClient.openServer(Unknown Source)
 at sun.net.www.http.HttpClient.openServer(Unknown Source)
 at sun.net.www.http.HttpClient.<init>(Unknown Source)
 at sun.net.www.http.HttpClient.New(Unknown Source)
 at sun.net.www.http.HttpClient.New(Unknown Source)
 at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
 at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
 at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
 at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
 at java.net.URL.openStream(Unknown Source)
 at com.lowagie.text.Image.getInstance(Unknown Source)
 at com.lowagie.text.Image.getInstance(Unknown Source)
 at com.Proj.jp.vue.action.ActionJpAction.editionPdf(ActionJpAction.java:542)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:280)
 at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:216)
 at com.Proj.jp.vue.BasicDispatchAction.execute(BasicDispatchAction.java:33)
 at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
 at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
 at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
 at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
 at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
 at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
 at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
 at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
 at java.lang.Thread.run(Unknown Source)
Erreur IOException : Connection timed out: connect

n°1817473
Bidem
Posté le 27-11-2008 à 10:39:00  profilanswer
 

Citation :

java.net.ConnectException: Connection timed out: connect
 ...
 at java.net.URL.openStream(Unknown Source)
 at com.lowagie.text.Image.getInstance(Unknown Source)
 at com.lowagie.text.Image.getInstance(Unknown Source)

 

Voilà on a trouvé l'erreur d'origine, c'est "juste" un problème d'accès à l'URL de l'image.

 

tu est derrière un proxy ?
si oui, il faut configurer le bousin

Code :
  1. Properties properties = System.getProperties();
  2. properties.put("http.proxyHost", "my.proxyhost.com" );
  3. properties.put("http.proxyPort", "1234" );



Message édité par Bidem le 27-11-2008 à 10:39:16
n°1821205
figosat
Posté le 03-12-2008 à 12:29:06  profilanswer
 

ça marche, merci bidem


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Insérer une image avec itext

 

Sujets relatifs
Problème API itextinclude et enregistrement d'image
Problème d'image d'arrière-plan en CSS[php] Insérer un ID dans une url
pb d'affichage imageinserer une requete dans une table
Aperçu image sur texteInsérer flash appli java
Validation formulaire : affiche image devant réponses justes ou faussePb bouton-image avec php [résolu]
Plus de sujets relatifs à : Insérer une image avec itext


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR