posts - 5,  comments - 7,  trackbacks - 0
          import java.io.*
          import java.util.*
          import org.apache.poi.poifs.filesystem.*
          import org.apache.poi.util.LittleEndian; 

          public class WordTest 
          public WordTest() 
          }
           
          public static 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; 
          }
           
          public static void main(String[] args)
          boolean b = writeWordFile("E://test.doc","hello"); 
          }
           
          }
           
          /* 
          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 *<img src="/images/forum/smiles/icon_cool.gif"/> + 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){ 
          WordTest w = new WordTest(); 
          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; 



          */
           
          posted on 2008-11-29 09:55 Vincent-chen 閱讀(4193) 評論(1)  編輯  收藏 所屬分類: POI
          主站蜘蛛池模板: 怀安县| 孝感市| 墨竹工卡县| 洪泽县| 边坝县| 临颍县| 屏东市| 鹤岗市| 虎林市| 望江县| 南漳县| 揭东县| 山丹县| 石家庄市| 桦甸市| 辽宁省| 乡宁县| 静海县| 丹阳市| 西藏| 新乐市| 富民县| 平和县| 秦皇岛市| 六枝特区| 阜南县| 乃东县| 通州市| 香格里拉县| 湟源县| 共和县| 辽阳县| 舟山市| 元朗区| 招远市| 盐源县| 子洲县| 阿勒泰市| 通河县| 北安市| 九江县|