Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: Java e documenti word

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    8

    Java e documenti word

    Ciao ragazzi ho un gran problema. Io devo fare un sito con servlet e jsp e tra le varie funzionalità devo creare e leggere file di word. La lettura riesco a farla se faccio i file a mano ma se li creo tramite la servlet no come mai vi metto i codici cosi potete dirmi il problema.
    Se avete link o esempi da prendere vi sarei grato:

    LETTURA:

    codice:
    package wordreader;
    
    import java.io.*;
     
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;
    import org.apache.poi.hwpf.extractor.WordExtractor; 
     
    		public class ProvaServlet extends HttpServlet {
       				
    			 protected void doGet(HttpServletRequest request,
               				 HttpServletResponse response) throws ServletException, IOException {
             
          				response.setContentType("text/html");
             
            	
    
    				String filename ="\\WEB-INF\\prova.doc";
            			String contents = "";
            			ServletContext context = getServletContext();
             
            
            		
    				InputStream is =context.getResourceAsStream(filename);
    				
          		
    				try{
               				 POIFSFileSystem fs = new POIFSFileSystem(is);
               				 WordExtractor we = new WordExtractor(fs);
                        			 contents = we.getText();
            			}catch(IOException e){
                    			e.printStackTrace();
    				 }
    
           			
                			PrintWriter writer = response.getWriter();
              			writer.println("<html><head></head><body>");
                 			writer.println(contents);
    				writer.println("</body></html>");	
                
            }
      }
    SCRITTURA
    codice:
    package wordreader;
    
    import javax.servlet.http.*;
    import javax.servlet.*;
    import java.io.*;
    
    
    public class ScriviFile extends HttpServlet {
      	
       public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException	
       {	
    	
        try {
          FileOutputStream file = new FileOutputStream(getServletContext().getRealPath("\\") + "WEB-INF\\prova.doc");
          PrintStream Output = new PrintStream(file);
          Output.println("Ciao mi chiamo marco e sono intelligente");
        	} catch (IOException e) {
          	System.out.println("Errore: " + e);
     
              }
      } 
    }
    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Un file di MS Word, sia esso doc o docx è un po' più "complesso" di un file di testo con estensione .doc o docx. Quello che fai tu in scrittura è salvare con estensione .doc un file che non ha niente a che vedere con il formato .doc

    Vedo che in lettura usi POI. Usa POI anche in scrittura.

    Puoi prendere spunto da questa:

    http://www.roseindia.net/tutorial/ja...reatoWord.html

    Tieni a mente che per molti HWPF = Horrible Word Processor Format. Quindi non ti aspettare risultati nemmeno lontanamente comparabili con quanto potresti ottenere in poche righe con .NET e le relative estensioni per Office.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    8
    Ora in scrittura mi scrive un vero doc però il lettura mi da il seguente problema

    HTTP Status 500 - type Exception report message description The server encountered an internal error () that prevented it from fulfilling this request. exception org.apache.poi.EncryptedDocumentException: Cannot process encrypted word files! org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocume nt.java:185) org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocume nt.java:157) org.apache.poi.hwpf.extractor.WordExtractor.<init> (WordExtractor.java:62) wordreader.ProvaServlet.doGet(ProvaServlet.java:30 ) javax.servlet.http.HttpServlet.service(HttpServlet .java:617) javax.servlet.http.HttpServlet.service(HttpServlet .java:717) note The full stack trace of the root cause is available in the Apache Tomcat/6.0.26 logs.
    Sulle api non c'è descrizione su questa eccezzione e non so come trattarla...

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    dovresti provare a postare l'intero contenuto del log... ammetto, non sono pratico di quella libreria per cui non riesco a darti indicazioni più precise. Comunque lo status HTTP/500 mi fa pensare che la risorsa sia impegnata da qualche altro processo?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    8
    22-giu-2010 10.59.56 org.apache.catalina.core.ApplicationContext log
    INFO: ContextListener: contextInitialized()
    22-giu-2010 10.59.56 org.apache.catalina.core.ApplicationContext log
    INFO: SessionListener: contextInitialized()
    22-giu-2010 11.00.13 org.apache.catalina.core.StandardWrapperValve invoke GRAVE: Servlet.service() for servlet LeggiFile threw exception org.apache.poi.EncryptedDocumentException: Cannot process encrypted word files! at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocume nt.java:185) at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocume nt.java:157) at org.apache.poi.hwpf.extractor.WordExtractor.<init> (WordExtractor.java:62) at wordreader.ProvaServlet.doGet(ProvaServlet.java:30 ) at javax.servlet.http.HttpServlet.service(HttpServlet .java:617) at javax.servlet.http.HttpServlet.service(HttpServlet .java:717) at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.servic e(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11AprProcessor.proces s(Http11AprProcessor.java:859) at org.apache.coyote.http11.Http11AprProtocol$Http11C onnectionHandler.process(Http11AprProtocol.java:57 9) at org.apache.tomcat.util.net.AprEndpoint$Worker.run( AprEndpoint.java:1555) at java.lang.Thread.run(Thread.java:619)

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Originariamente inviato da berny88
    [...]
    22-giu-2010 11.00.13 org.apache.catalina.core.StandardWrapperValve invoke GRAVE: Servlet.service() for servlet LeggiFile threw exception org.apache.poi.EncryptedDocumentException: Cannot process encrypted word files! at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocume nt.java:185) at org.apache.poi.hwpf.HWPFDocument
    [...]
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    8
    Non riesco a risolvere questo problema...riuppo il post...se qualcuno sa come risolverlo me lo dica grazie

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    8
    Non posso modificare il post quindi aggiungo il codice del mio programma per leggere:

    codice:
    package wordreader;
    
    import java.io.*;
     
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;
    import org.apache.poi.hwpf.extractor.WordExtractor; 
     
    		public class ProvaServlet extends HttpServlet {
       				
    			 protected void doGet(HttpServletRequest request,
               				 HttpServletResponse response) throws ServletException, IOException {
             
          				response.setContentType("text/html");
             
            	
    				String filename="\\WEB-INF\\new.doc";
            			String contents=null;
            			ServletContext context = getServletContext();
             
            
    				InputStream is =context.getResourceAsStream(filename);
          		
    				try{
               				POIFSFileSystem fs = new POIFSFileSystem(is);
               				WordExtractor we = new WordExtractor(fs);
                        			contents = we.getTextFromPieces();
    			                 is.close();
    				 }catch(org.apache.poi.EncryptedDocumentException e) {
    					e.printStackTrace();
            			}catch(IOException e){
                    			e.printStackTrace();
    				}
    				
    
           			
                			PrintWriter writer = response.getWriter();
              			writer.println("<html><head></head><body>");
                 			writer.println(contents);
    				writer.println("</body></html>");	
                
            }
      }
    Il file lo trova ma non ci legge dentro...se metto null mi stampa null...se metto stringa vuota mi stampa stringa vuota...il file è pieno...credo che il problema sia nell'inputstream perchè il metodo vuole un fileinputstream ma se lo metto mi da nullpointeexception

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Ho fatto questo test, partendo dal tuo codice

    codice:
    import java.io.*;
    import org.apache.poi.hwpf.extractor.*;
    import org.apache.poi.poifs.filesystem.*;
    
    /**
     *
     * @author Andrea
     */
    public class POITest {
    
        public static void main (String[] args) {
            String contents = "";
            try{
                InputStream is = new FileInputStream("C:/Users/Andrea/Desktop/test.doc");
                POIFSFileSystem fs = new POIFSFileSystem(is);
                WordExtractor we = new WordExtractor(fs);
                contents = we.getTextFromPieces();
                is.close();
            }
            catch(org.apache.poi.EncryptedDocumentException e) {
                e.printStackTrace();
            }
            catch(IOException e){
                e.printStackTrace();
            }
            System.out.println(contents);
        }
    
    }
    ed il testo viene stampato in console. Ovviamente tutto quanto riguardi stili dei paragrafi e tutti gli altri oggetti non testuali vengono ignorati e/o non mostrati.

    In definitiva, la differenza tra i due codici sta nel fatto che ho usato un FileInputStream ed un percorso assoluto. Controlla come viene risolto quel percorso (e comunque, evita se possibile i backslash a-là windows, perché se domani devi far girare il tutto su server unix/linux dovrai andare a sistemarli tutti).
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    8
    Fatto però ho il solito problema :

    se creo a mano il documento word con estensione .doc (no docx) me lo legge
    ma se tento di leggere il documento creato dalla servlet fatta per crearlo mi da arrayoutofbound 18... non ci sto capendo più niente

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.