在网上到是看到了很多用POI读写Word的方法.但没有介绍怎么把word嵌入到页面的.哪位大哥了解这方面的技术,指点一下小弟.

解决方案 »

  1.   

    要把Word嵌入到页面,可能得用ActiveX(用IE的情况)才行。
    除非你自己写HTML版的Word
    或者可以写Java Applet版的Word
    或者Flash版的Word
      

  2.   

    可以设置response.setHeader("Content-disposition",filename="dd.doc");   
            response.setContentType("application/vnd.ms-word");
            OutputStream out = response.getOutputStream;
    然后调用pio中的write(out);应该就可以在网页中显示了。
    我用此方法可以实现excel的显示用的使pio-HSSF类
      

  3.   

    jasonzsj(我心永恒) 的办法实际就是输出一个Word文档到客户端呵。
    其实用这个办法也挺不错的,如果客户端系统设置了用IE打开Word文档的话,这个文档直接就在IE打开了。
      

  4.   

    response.setHeader("Content-disposition",filename="dd.doc");
    response.setContentType("application/vnd.ms-word");
    OutputStream out = response.getOutputStream;
      

  5.   

    楼上就是个娄阿鼠,抄还抄个错的答案setHeader("Content-disposition", "inline; filename=\"" + filename + "\"");orsetHeader("Content-disposition", "attachment; filename=\"" + filename + "\"");
      

  6.   

    see http://www.ietf.org/rfc/rfc1806.txt
      

  7.   

    多谢各位的建议.
    可不仅是要在客户端显示word的内容,还要能在客户端的网页里对word内容进行修改.
    不知各位还有什么好的建议.
      

  8.   

    还要修改——那只好做Web版的Word编辑器了。
    现在网上有很多在线Word编辑器,但似乎都没有提供源码。
    帮你顶吧,搞不清楚如何实现了。
      

  9.   

    先將DOC文檔資料讀出來.顯示到HTML編輯器.編輯完以後再保存在DOC文檔裏.
    代碼如下:import java.io.ByteArrayInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.ArrayList;import org.apache.poi.poifs.filesystem.DirectoryEntry;
    import org.apache.poi.poifs.filesystem.DocumentEntry;
    import org.apache.poi.poifs.filesystem.DocumentInputStream;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;
    import org.apache.poi.util.LittleEndian;public class WordExtractor {   
        public WordExtractor() {   
        }   
      
        public String extractText(InputStream in) throws IOException {   
            ArrayList text = new ArrayList();   
            POIFSFileSystem fsys = new POIFSFileSystem(in);   
      
            DocumentEntry headerProps = (DocumentEntry) fsys.getRoot().getEntry("WordDocument");   
            DocumentInputStream din = fsys.createDocumentInputStream("WordDocument");   
            byte[] header = new byte[headerProps.getSize()];   
      
            din.read(header);   
            din.close();   
            // Prende le informazioni dall'header del documento   
            int info = LittleEndian.getShort(header, 0xa);   
      
            boolean useTable1 = (info & 0x200) != 0;   
      
            //boolean useTable1 = true;   
               
            // Prende informazioni dalla piece table   
            int complexOffset = LittleEndian.getInt(header, 0x1a2);   
            //int complexOffset = LittleEndian.getInt(header);   
               
            String tableName = null;   
            if (useTable1) {   
                tableName = "1Table";   
            } else {   
                tableName = "0Table";   
            }   
      
            DocumentEntry table = (DocumentEntry) fsys.getRoot().getEntry(tableName);   
            byte[] tableStream = new byte[table.getSize()];   
      
            din = fsys.createDocumentInputStream(tableName);   
      
            din.read(tableStream);   
            din.close();   
      
            din = null;   
            fsys = null;   
            table = null;   
            headerProps = null;   
      
            int multiple = findText(tableStream, complexOffset, text);   
      
            StringBuffer sb = new StringBuffer();   
            int size = text.size();   
            tableStream = null;   
      
            for (int x = 0; x < size; x++) {   
                   
                WordTextPiece nextPiece = (WordTextPiece) text.get(x);   
                int start = nextPiece.getStart();   
                int length = nextPiece.getLength();   
      
                boolean unicode = nextPiece.usesUnicode();   
                String toStr = null;   
                if (unicode) {   
                    toStr = new String(header, start, length * multiple, "UTF-16LE");   
                } else {   
                    toStr = new String(header, start, length, "ISO-8859-1");   
                }   
                sb.append(toStr).append(" ");   
      
            }   
            return sb.toString();   
        }   
      
        private static int findText(byte[] tableStream, int complexOffset, ArrayList text)   
            throws IOException {   
            //actual text   
            int pos = complexOffset;   
            int multiple = 2;   
            //skips through the prms before we reach the piece table. These contain data   
            //for actual fast saved files   
            while (tableStream[pos] == 1) {   
                pos++;   
                int skip = LittleEndian.getShort(tableStream, pos);   
                pos += 2 + skip;   
            }   
            if (tableStream[pos] != 2) {   
                throw new IOException("corrupted Word file");   
            } else {   
                //parse out the text pieces   
                int pieceTableSize = LittleEndian.getInt(tableStream, ++pos);   
                pos += 4;   
                int pieces = (pieceTableSize - 4) / 12;   
                for (int x = 0; x < pieces; x++) {   
                    int filePos =   
                        LittleEndian.getInt(tableStream, pos + ((pieces + 1) * 4) + (x *8) + 2);   
                    boolean unicode = false;   
                    if ((filePos & 0x40000000) == 0) {   
                        unicode = true;   
                    } else {   
                        unicode = false;   
                        multiple = 1;   
                        filePos &= ~(0x40000000); //gives me FC in doc stream   
                        filePos /= 2;   
                    }   
                    int totLength =   
                        LittleEndian.getInt(tableStream, pos + (x + 1) * 4)   
                            - LittleEndian.getInt(tableStream, pos + (x * 4));   
      
                    WordTextPiece piece = new WordTextPiece(filePos, totLength, unicode);   
                    text.add(piece);   
      
                }   
      
            }   
            return multiple;   
        }   
        public static void main(String[] args){   
            WordExtractor w  = new WordExtractor();   
            POIFSFileSystem ps = new POIFSFileSystem();   
            try{   
                   
                File file = new File("C:\\test.doc");   
                   
                InputStream in = new FileInputStream(file);   
                String s = w.extractText(in);   
                System.out.println(s);   
           
                   
            }catch(Exception e){   
                e.printStackTrace();   
            }   
                       
        }   
        public boolean writeWordFile(String path, String content) {   
            boolean w = false;   
            try {   
          
            //  byte b[] = content.getBytes("ISO-8859-1");   
                byte b[] = content.getBytes();   
                   
                ByteArrayInputStream bais = new ByteArrayInputStream(b);   
          
                POIFSFileSystem fs = new POIFSFileSystem();   
                DirectoryEntry directory = fs.getRoot();   
          
                DocumentEntry de = directory.createDocument("WordDocument", bais);   
          
                FileOutputStream ostream = new FileOutputStream(path);   
          
                fs.writeFilesystem(ostream);   
                   
                bais.close();   
                ostream.close();   
          
            } catch (IOException e) {   
                e.printStackTrace();   
            }   
          
            return w;   
        }       
    }   
    class WordTextPiece {   
        private int _fcStart;   
        private boolean _usesUnicode;   
        private int _length;   
      
        public WordTextPiece(int start, int length, boolean unicode) {   
            _usesUnicode = unicode;   
            _length = length;   
            _fcStart = start;   
        }   
        public boolean usesUnicode() {   
            return _usesUnicode;   
        }   
      
        public int getStart() {   
            return _fcStart;   
        }   
        public int getLength() {   
            return _length;   
        }   
      
    }   
      

  10.   

    具体不大清楚,我试验过,按照我心永恒的说法好像不可以,excel可以我已经实现了,word实在是不敢恭维。请实践......