You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2016/07/20 22:39:12 UTC

svn commit: r1753620 - in /poi/trunk/src/scratchpad/src/org/apache/poi: hslf/usermodel/HSLFSlideShowImpl.java hwpf/HWPFDocument.java

Author: nick
Date: Wed Jul 20 22:39:12 2016
New Revision: 1753620

URL: http://svn.apache.org/viewvc?rev=1753620&view=rev
Log:
Whitespace / indents

Modified:
    poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java
    poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/HWPFDocument.java

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java?rev=1753620&r1=1753619&r2=1753620&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java Wed Jul 20 22:39:12 2016
@@ -61,8 +61,6 @@ import org.apache.poi.util.POILogger;
 /**
  * This class contains the main functionality for the Powerpoint file
  * "reader". It is only a very basic class for now
- *
- * @author Nick Burch
  */
 public final class HSLFSlideShowImpl extends POIDocument implements Closeable {
     public static final int UNSET_OFFSET = -1;

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/HWPFDocument.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/HWPFDocument.java?rev=1753620&r1=1753619&r2=1753620&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/HWPFDocument.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/HWPFDocument.java Wed Jul 20 22:39:12 2016
@@ -75,11 +75,8 @@ import org.apache.poi.util.Internal;
  *
  * This class acts as the bucket that we throw all of the Word data structures
  * into.
- *
- * @author Ryan Ackley
  */
-public final class HWPFDocument extends HWPFDocumentCore
-{
+public final class HWPFDocument extends HWPFDocumentCore {
     /*package*/ static final String PROPERTY_PRESERVE_BIN_TABLES = "org.apache.poi.hwpf.preserveBinTables";
     private static final String PROPERTY_PRESERVE_TEXT_TABLE = "org.apache.poi.hwpf.preserveTextTable";
 
@@ -87,168 +84,168 @@ public final class HWPFDocument extends
     private static final String STREAM_TABLE_0 = "0Table";
     private static final String STREAM_TABLE_1 = "1Table";
 
-  /** table stream buffer*/
-  protected byte[] _tableStream;
-
-  /** data stream buffer*/
-  protected byte[] _dataStream;
+    /** table stream buffer*/
+    protected byte[] _tableStream;
 
-  /** Document wide Properties*/
-  protected DocumentProperties _dop;
+    /** data stream buffer*/
+    protected byte[] _dataStream;
 
-  /** Contains text of the document wrapped in a obfuscated Word data
-  * structure*/
-  protected ComplexFileTable _cft;
+    /** Document wide Properties*/
+    protected DocumentProperties _dop;
 
-  /** Contains text buffer linked directly to single-piece document text piece */
-  protected StringBuilder _text;
+    /** Contains text of the document wrapped in a obfuscated Word data
+     * structure*/
+    protected ComplexFileTable _cft;
 
-  /** Holds the save history for this document. */
-  protected SavedByTable _sbt;
-  
-  /** Holds the revision mark authors for this document. */
-  protected RevisionMarkAuthorTable _rmat;
+    /** Contains text buffer linked directly to single-piece document text piece */
+    protected StringBuilder _text;
 
-  /** Holds FSBA (shape) information */
-  private FSPATable _fspaHeaders;
+    /** Holds the save history for this document. */
+    protected SavedByTable _sbt;
 
-  /** Holds FSBA (shape) information */
-  private FSPATable _fspaMain;
+    /** Holds the revision mark authors for this document. */
+    protected RevisionMarkAuthorTable _rmat;
 
-  /** Escher Drawing Group information */
-  protected EscherRecordHolder _escherRecordHolder;
+    /** Holds FSBA (shape) information */
+    private FSPATable _fspaHeaders;
 
-  /** Holds pictures table */
-  protected PicturesTable _pictures;
+    /** Holds FSBA (shape) information */
+    private FSPATable _fspaMain;
 
-  /** Holds Office Art objects */
-  protected OfficeDrawingsImpl _officeDrawingsHeaders;
+    /** Escher Drawing Group information */
+    protected EscherRecordHolder _escherRecordHolder;
 
-  /** Holds Office Art objects */
-  protected OfficeDrawingsImpl _officeDrawingsMain;
+    /** Holds pictures table */
+    protected PicturesTable _pictures;
 
-  /** Holds the bookmarks tables */
-  protected BookmarksTables _bookmarksTables;
+    /** Holds Office Art objects */
+    protected OfficeDrawingsImpl _officeDrawingsHeaders;
 
-  /** Holds the bookmarks */
-  protected Bookmarks _bookmarks;
+    /** Holds Office Art objects */
+    protected OfficeDrawingsImpl _officeDrawingsMain;
 
-  /** Holds the ending notes tables */
-  protected NotesTables _endnotesTables = new NotesTables( NoteType.ENDNOTE );
+    /** Holds the bookmarks tables */
+    protected BookmarksTables _bookmarksTables;
 
-  /** Holds the footnotes */
-  protected Notes _endnotes = new NotesImpl( _endnotesTables );
+    /** Holds the bookmarks */
+    protected Bookmarks _bookmarks;
 
-  /** Holds the footnotes tables */
-  protected NotesTables _footnotesTables = new NotesTables( NoteType.FOOTNOTE );
+    /** Holds the ending notes tables */
+    protected NotesTables _endnotesTables = new NotesTables( NoteType.ENDNOTE );
 
-  /** Holds the footnotes */
-  protected Notes _footnotes = new NotesImpl( _footnotesTables );
+    /** Holds the footnotes */
+    protected Notes _endnotes = new NotesImpl( _endnotesTables );
 
-  /** Holds the fields PLCFs */
-  protected FieldsTables _fieldsTables;
+    /** Holds the footnotes tables */
+    protected NotesTables _footnotesTables = new NotesTables( NoteType.FOOTNOTE );
 
-  /** Holds the fields */
-  protected Fields _fields;
-
-  protected HWPFDocument()
-  {
-     super();
-     this._text = new StringBuilder("\r");
-  }
-
-  /**
-   * This constructor loads a Word document from an InputStream.
-   *
-   * @param istream The InputStream that contains the Word document.
-   * @throws IOException If there is an unexpected IOException from the passed
-   *         in InputStream.
-   */
-  public HWPFDocument(InputStream istream) throws IOException
-  {
-    //do Ole stuff
-    this( verifyAndBuildPOIFS(istream) );
-  }
+    /** Holds the footnotes */
+    protected Notes _footnotes = new NotesImpl( _footnotesTables );
 
-  /**
-   * This constructor loads a Word document from a POIFSFileSystem
-   *
-   * @param pfilesystem The POIFSFileSystem that contains the Word document.
-   * @throws IOException If there is an unexpected IOException from the passed
-   *         in POIFSFileSystem.
-   */
-  public HWPFDocument(POIFSFileSystem pfilesystem) throws IOException
-  {
-    this(pfilesystem.getRoot());
-  }
+    /** Holds the fields PLCFs */
+    protected FieldsTables _fieldsTables;
 
-  /**
-   * This constructor loads a Word document from a specific point
-   *  in a POIFSFileSystem, probably not the default.
-   * Used typically to open embeded documents.
-   *
-   * @param directory The DirectoryNode that contains the Word document.
-   * @throws IOException If there is an unexpected IOException from the passed
-   *         in POIFSFileSystem.
-   */
-  public HWPFDocument(DirectoryNode directory) throws IOException
-  {
-    // Load the main stream and FIB
-    // Also handles HPSF bits
-    super(directory);
+    /** Holds the fields */
+    protected Fields _fields;
 
-    // Is this document too old for us?
-    if(_fib.getFibBase().getNFib() < 106) {
-        throw new OldWordFileFormatException("The document is too old - Word 95 or older. Try HWPFOldDocument instead?");
+    protected HWPFDocument()
+    {
+        super();
+        this._text = new StringBuilder("\r");
     }
 
-    // use the fib to determine the name of the table stream.
-    String name = STREAM_TABLE_0;
-    if (_fib.getFibBase().isFWhichTblStm())
+    /**
+     * This constructor loads a Word document from an InputStream.
+     *
+     * @param istream The InputStream that contains the Word document.
+     * @throws IOException If there is an unexpected IOException from the passed
+     *         in InputStream.
+     */
+    public HWPFDocument(InputStream istream) throws IOException
     {
-      name = STREAM_TABLE_1;
+        //do Ole stuff
+        this( verifyAndBuildPOIFS(istream) );
     }
 
-    // Grab the table stream.
-    if (!directory.hasEntry(name)) {
-        throw new IllegalStateException("Table Stream '" + name + "' wasn't found - Either the document is corrupt, or is Word95 (or earlier)");
+    /**
+     * This constructor loads a Word document from a POIFSFileSystem
+     *
+     * @param pfilesystem The POIFSFileSystem that contains the Word document.
+     * @throws IOException If there is an unexpected IOException from the passed
+     *         in POIFSFileSystem.
+     */
+    public HWPFDocument(POIFSFileSystem pfilesystem) throws IOException
+    {
+        this(pfilesystem.getRoot());
     }
 
-    // read in the table stream.
-    InputStream is = directory.createDocumentInputStream(name);
-    _tableStream = IOUtils.toByteArray(is);
-    is.close();
+    /**
+     * This constructor loads a Word document from a specific point
+     *  in a POIFSFileSystem, probably not the default.
+     * Used typically to open embeded documents.
+     *
+     * @param directory The DirectoryNode that contains the Word document.
+     * @throws IOException If there is an unexpected IOException from the passed
+     *         in POIFSFileSystem.
+     */
+    public HWPFDocument(DirectoryNode directory) throws IOException
+    {
+        // Load the main stream and FIB
+        // Also handles HPSF bits
+        super(directory);
 
-    _fib.fillVariableFields(_mainStream, _tableStream);
+        // Is this document too old for us?
+        if(_fib.getFibBase().getNFib() < 106) {
+            throw new OldWordFileFormatException("The document is too old - Word 95 or older. Try HWPFOldDocument instead?");
+        }
 
-    // read in the data stream.
-    InputStream dis = null;
-    try {
-      DocumentEntry dataProps = (DocumentEntry)directory.getEntry(STREAM_DATA);
-      dis = directory.createDocumentInputStream(STREAM_DATA);
-      _dataStream = IOUtils.toByteArray(dis, dataProps.getSize());
-    } catch(IOException e) {
-        _dataStream = new byte[0];
-    } finally {
-        if (dis != null) {
-            dis.close();
+        // use the fib to determine the name of the table stream.
+        String name = STREAM_TABLE_0;
+        if (_fib.getFibBase().isFWhichTblStm())
+        {
+            name = STREAM_TABLE_1;
         }
-    }
 
-    // Get the cp of the start of text in the main stream
-    // The latest spec doc says this is always zero!
-    int fcMin = 0;
-    //fcMin = _fib.getFcMin()
+        // Grab the table stream.
+        if (!directory.hasEntry(name)) {
+            throw new IllegalStateException("Table Stream '" + name + "' wasn't found - Either the document is corrupt, or is Word95 (or earlier)");
+        }
 
-    // Start to load up our standard structures.
-    _dop = new DocumentProperties(_tableStream, _fib.getFcDop(), _fib.getLcbDop() );
-    _cft = new ComplexFileTable(_mainStream, _tableStream, _fib.getFcClx(), fcMin);
-    TextPieceTable _tpt = _cft.getTextPieceTable();
+        // read in the table stream.
+        InputStream is = directory.createDocumentInputStream(name);
+        _tableStream = IOUtils.toByteArray(is);
+        is.close();
 
-    // Now load the rest of the properties, which need to be adjusted
-    //  for where text really begin
-    _cbt = new CHPBinTable(_mainStream, _tableStream, _fib.getFcPlcfbteChpx(), _fib.getLcbPlcfbteChpx(), _tpt);
-    _pbt = new PAPBinTable(_mainStream, _tableStream, _dataStream, _fib.getFcPlcfbtePapx(), _fib.getLcbPlcfbtePapx(), _tpt);
+        _fib.fillVariableFields(_mainStream, _tableStream);
+
+        // read in the data stream.
+        InputStream dis = null;
+        try {
+            DocumentEntry dataProps = (DocumentEntry)directory.getEntry(STREAM_DATA);
+            dis = directory.createDocumentInputStream(STREAM_DATA);
+            _dataStream = IOUtils.toByteArray(dis, dataProps.getSize());
+        } catch(IOException e) {
+            _dataStream = new byte[0];
+        } finally {
+            if (dis != null) {
+                dis.close();
+            }
+        }
+
+        // Get the cp of the start of text in the main stream
+        // The latest spec doc says this is always zero!
+        int fcMin = 0;
+        //fcMin = _fib.getFcMin()
+
+        // Start to load up our standard structures.
+        _dop = new DocumentProperties(_tableStream, _fib.getFcDop(), _fib.getLcbDop() );
+        _cft = new ComplexFileTable(_mainStream, _tableStream, _fib.getFcClx(), fcMin);
+        TextPieceTable _tpt = _cft.getTextPieceTable();
+
+        // Now load the rest of the properties, which need to be adjusted
+        //  for where text really begin
+        _cbt = new CHPBinTable(_mainStream, _tableStream, _fib.getFcPlcfbteChpx(), _fib.getLcbPlcfbteChpx(), _tpt);
+        _pbt = new PAPBinTable(_mainStream, _tableStream, _dataStream, _fib.getFcPlcfbtePapx(), _fib.getLcbPlcfbtePapx(), _tpt);
 
         _text = _tpt.getText();
 
@@ -257,18 +254,14 @@ public final class HWPFDocument extends
          * miss from output, and text order may be corrupted
          */
         boolean preserveBinTables = false;
-        try
-        {
+        try {
             preserveBinTables = Boolean.parseBoolean( System
                     .getProperty( PROPERTY_PRESERVE_BIN_TABLES ) );
-        }
-        catch ( Exception exc )
-        {
+        } catch ( Exception exc ) {
             // ignore;
         }
 
-        if ( !preserveBinTables )
-        {
+        if ( !preserveBinTables ) {
             _cbt.rebuild( _cft );
             _pbt.rebuild( _text, _cft );
         }
@@ -278,17 +271,13 @@ public final class HWPFDocument extends
          * will lead to unpredictable behavior
          */
         boolean preserveTextTable = false;
-        try
-        {
+        try {
             preserveTextTable = Boolean.parseBoolean( System
                     .getProperty( PROPERTY_PRESERVE_TEXT_TABLE ) );
-        }
-        catch ( Exception exc )
-        {
+        } catch ( Exception exc ) {
             // ignore;
         }
-        if ( !preserveTextTable )
-        {
+        if ( !preserveTextTable ) {
             _cft = new ComplexFileTable();
             _tpt = _cft.getTextPieceTable();
             final TextPiece textPiece = new SinglentonTextPiece( _text );
@@ -303,24 +292,24 @@ public final class HWPFDocument extends
                 FSPADocumentPart.HEADER );
         _fspaMain = new FSPATable( _tableStream, _fib, FSPADocumentPart.MAIN );
 
-    if (_fib.getFcDggInfo() != 0)
-    {
-        _escherRecordHolder = new EscherRecordHolder(_tableStream, _fib.getFcDggInfo(), _fib.getLcbDggInfo());
-    } else
-    {
-        _escherRecordHolder = new EscherRecordHolder();
-    }
+        if (_fib.getFcDggInfo() != 0)
+        {
+            _escherRecordHolder = new EscherRecordHolder(_tableStream, _fib.getFcDggInfo(), _fib.getLcbDggInfo());
+        } else
+        {
+            _escherRecordHolder = new EscherRecordHolder();
+        }
 
-    // read in the pictures stream
-    _pictures = new PicturesTable(this, _dataStream, _mainStream, _fspaMain, _escherRecordHolder);
+        // read in the pictures stream
+        _pictures = new PicturesTable(this, _dataStream, _mainStream, _fspaMain, _escherRecordHolder);
 
-    // And escher pictures
-    _officeDrawingsHeaders = new OfficeDrawingsImpl( _fspaHeaders, _escherRecordHolder, _mainStream );
-    _officeDrawingsMain = new OfficeDrawingsImpl( _fspaMain , _escherRecordHolder, _mainStream);
+        // And escher pictures
+        _officeDrawingsHeaders = new OfficeDrawingsImpl( _fspaHeaders, _escherRecordHolder, _mainStream );
+        _officeDrawingsMain = new OfficeDrawingsImpl( _fspaMain , _escherRecordHolder, _mainStream);
 
-    _st = new SectionTable(_mainStream, _tableStream, _fib.getFcPlcfsed(), _fib.getLcbPlcfsed(), fcMin, _tpt, _fib.getSubdocumentTextStreamLength( SubdocumentType.MAIN));
-    _ss = new StyleSheet(_tableStream, _fib.getFcStshf());
-    _ft = new FontTable(_tableStream, _fib.getFcSttbfffn(), _fib.getLcbSttbfffn());
+        _st = new SectionTable(_mainStream, _tableStream, _fib.getFcPlcfsed(), _fib.getLcbPlcfsed(), fcMin, _tpt, _fib.getSubdocumentTextStreamLength( SubdocumentType.MAIN));
+        _ss = new StyleSheet(_tableStream, _fib.getFcStshf());
+        _ft = new FontTable(_tableStream, _fib.getFcSttbfffn(), _fib.getLcbSttbfffn());
 
         int listOffset = _fib.getFcPlfLst();
         // int lfoOffset = _fib.getFcPlfLfo();
@@ -330,37 +319,37 @@ public final class HWPFDocument extends
                     _fib.getLcbPlfLfo() );
         }
 
-    int sbtOffset = _fib.getFcSttbSavedBy();
-    int sbtLength = _fib.getLcbSttbSavedBy();
-    if (sbtOffset != 0 && sbtLength != 0)
-    {
-      _sbt = new SavedByTable(_tableStream, sbtOffset, sbtLength);
-    }
+        int sbtOffset = _fib.getFcSttbSavedBy();
+        int sbtLength = _fib.getLcbSttbSavedBy();
+        if (sbtOffset != 0 && sbtLength != 0)
+        {
+            _sbt = new SavedByTable(_tableStream, sbtOffset, sbtLength);
+        }
 
-    int rmarkOffset = _fib.getFcSttbfRMark();
-    int rmarkLength = _fib.getLcbSttbfRMark();
-    if (rmarkOffset != 0 && rmarkLength != 0)
-    {
-      _rmat = new RevisionMarkAuthorTable(_tableStream, rmarkOffset, rmarkLength);
-    }
+        int rmarkOffset = _fib.getFcSttbfRMark();
+        int rmarkLength = _fib.getLcbSttbfRMark();
+        if (rmarkOffset != 0 && rmarkLength != 0)
+        {
+            _rmat = new RevisionMarkAuthorTable(_tableStream, rmarkOffset, rmarkLength);
+        }
 
-    _bookmarksTables = new BookmarksTables( _tableStream, _fib );
-    _bookmarks = new BookmarksImpl( _bookmarksTables );
+        _bookmarksTables = new BookmarksTables( _tableStream, _fib );
+        _bookmarks = new BookmarksImpl( _bookmarksTables );
 
-    _endnotesTables = new NotesTables( NoteType.ENDNOTE, _tableStream, _fib );
-    _endnotes = new NotesImpl( _endnotesTables );
-    _footnotesTables = new NotesTables( NoteType.FOOTNOTE, _tableStream, _fib );
-    _footnotes = new NotesImpl( _footnotesTables );
+        _endnotesTables = new NotesTables( NoteType.ENDNOTE, _tableStream, _fib );
+        _endnotes = new NotesImpl( _endnotesTables );
+        _footnotesTables = new NotesTables( NoteType.FOOTNOTE, _tableStream, _fib );
+        _footnotes = new NotesImpl( _footnotesTables );
 
-    _fieldsTables = new FieldsTables(_tableStream, _fib);
-    _fields = new FieldsImpl(_fieldsTables);
-  }
+        _fieldsTables = new FieldsTables(_tableStream, _fib);
+        _fields = new FieldsImpl(_fieldsTables);
+    }
 
-  @Internal
-  public TextPieceTable getTextTable()
-  {
-    return _cft.getTextPieceTable();
-  }
+    @Internal
+    public TextPieceTable getTextTable()
+    {
+        return _cft.getTextPieceTable();
+    }
 
     @Internal
     @Override
@@ -369,14 +358,14 @@ public final class HWPFDocument extends
         return _text;
     }
 
-  public DocumentProperties getDocProperties()
-  {
-    return _dop;
-  }
+    public DocumentProperties getDocProperties()
+    {
+        return _dop;
+    }
 
-  public Range getOverallRange() {
-      return new Range(0, _text.length(), this);
-  }
+    public Range getOverallRange() {
+        return new Range(0, _text.length(), this);
+    }
 
     /**
      * Returns the range which covers the whole of the document, but excludes
@@ -590,53 +579,53 @@ public final class HWPFDocument extends
     public void write(File newFile) throws IOException {
         throw new IllegalStateException("Coming soon!");
     }
-    
-  /**
-   * Writes out the word file that is represented by an instance of this class.
-   * 
-   * If {@code stream} is a {@link java.io.FileOutputStream} on a networked drive
-   * or has a high cost/latency associated with each written byte,
-   * consider wrapping the OutputStream in a {@link java.io.BufferedOutputStream}
-   * to improve write performance.
-   *
-   * @param out The OutputStream to write to.
-   * @throws IOException If there is an unexpected IOException from the passed
-   *         in OutputStream.
-   */
-  public void write(OutputStream out)
-    throws IOException
-  {
-    // initialize our streams for writing.
-    HWPFFileSystem docSys = new HWPFFileSystem();
-    HWPFOutputStream wordDocumentStream = docSys.getStream(STREAM_WORD_DOCUMENT);
-    HWPFOutputStream tableStream = docSys.getStream(STREAM_TABLE_1);
-    //HWPFOutputStream dataStream = docSys.getStream("Data");
-    int tableOffset = 0;
-
-    // FileInformationBlock fib = (FileInformationBlock)_fib.clone();
-    // clear the offsets and sizes in our FileInformationBlock.
-    _fib.clearOffsetsSizes();
-
-    // determine the FileInformationBLock size
-    int fibSize = _fib.getSize();
-    fibSize  += POIFSConstants.SMALLER_BIG_BLOCK_SIZE -
-        (fibSize % POIFSConstants.SMALLER_BIG_BLOCK_SIZE);
-
-    // preserve space for the FileInformationBlock because we will be writing
-    // it after we write everything else.
-    byte[] placeHolder = new byte[fibSize];
-    wordDocumentStream.write(placeHolder);
-    int mainOffset = wordDocumentStream.getOffset();
-
-    // write out the StyleSheet.
-    _fib.setFcStshf(tableOffset);
-    _ss.writeTo(tableStream);
-    _fib.setLcbStshf(tableStream.getOffset() - tableOffset);
-    tableOffset = tableStream.getOffset();
-
-    // get fcMin and fcMac because we will be writing the actual text with the
-    // complex table.
-    int fcMin = mainOffset;
+
+    /**
+     * Writes out the word file that is represented by an instance of this class.
+     * 
+     * If {@code stream} is a {@link java.io.FileOutputStream} on a networked drive
+     * or has a high cost/latency associated with each written byte,
+     * consider wrapping the OutputStream in a {@link java.io.BufferedOutputStream}
+     * to improve write performance.
+     *
+     * @param out The OutputStream to write to.
+     * @throws IOException If there is an unexpected IOException from the passed
+     *         in OutputStream.
+     */
+    public void write(OutputStream out)
+            throws IOException
+            {
+        // initialize our streams for writing.
+        HWPFFileSystem docSys = new HWPFFileSystem();
+        HWPFOutputStream wordDocumentStream = docSys.getStream(STREAM_WORD_DOCUMENT);
+        HWPFOutputStream tableStream = docSys.getStream(STREAM_TABLE_1);
+        //HWPFOutputStream dataStream = docSys.getStream("Data");
+        int tableOffset = 0;
+
+        // FileInformationBlock fib = (FileInformationBlock)_fib.clone();
+        // clear the offsets and sizes in our FileInformationBlock.
+        _fib.clearOffsetsSizes();
+
+        // determine the FileInformationBLock size
+        int fibSize = _fib.getSize();
+        fibSize  += POIFSConstants.SMALLER_BIG_BLOCK_SIZE -
+                (fibSize % POIFSConstants.SMALLER_BIG_BLOCK_SIZE);
+
+        // preserve space for the FileInformationBlock because we will be writing
+        // it after we write everything else.
+        byte[] placeHolder = new byte[fibSize];
+        wordDocumentStream.write(placeHolder);
+        int mainOffset = wordDocumentStream.getOffset();
+
+        // write out the StyleSheet.
+        _fib.setFcStshf(tableOffset);
+        _ss.writeTo(tableStream);
+        _fib.setLcbStshf(tableStream.getOffset() - tableOffset);
+        tableOffset = tableStream.getOffset();
+
+        // get fcMin and fcMac because we will be writing the actual text with the
+        // complex table.
+        int fcMin = mainOffset;
 
         /*
          * clx (encoding of the sprm lists for a complex file and piece table
@@ -646,13 +635,13 @@ public final class HWPFDocument extends
          * Microsoft Office Word 97-2007 Binary File Format (.doc)
          * Specification; Page 23 of 210
          */
-    
-    // write out the Complex table, includes text.
-    _fib.setFcClx(tableOffset);
-    _cft.writeTo(wordDocumentStream, tableStream);
-    _fib.setLcbClx(tableStream.getOffset() - tableOffset);
-    tableOffset = tableStream.getOffset();
-    int fcMac = wordDocumentStream.getOffset();
+
+        // write out the Complex table, includes text.
+        _fib.setFcClx(tableOffset);
+        _cft.writeTo(wordDocumentStream, tableStream);
+        _fib.setLcbClx(tableStream.getOffset() - tableOffset);
+        tableOffset = tableStream.getOffset();
+        int fcMac = wordDocumentStream.getOffset();
 
         /*
          * dop (document properties record) Written immediately after the end of
@@ -663,11 +652,11 @@ public final class HWPFDocument extends
          * Specification; Page 23 of 210
          */
 
-    // write out the DocumentProperties.
-    _fib.setFcDop(tableOffset);
-    _dop.writeTo(tableStream);
-    _fib.setLcbDop(tableStream.getOffset() - tableOffset);
-    tableOffset = tableStream.getOffset();
+        // write out the DocumentProperties.
+        _fib.setFcDop(tableOffset);
+        _dop.writeTo(tableStream);
+        _fib.setLcbDop(tableStream.getOffset() - tableOffset);
+        tableOffset = tableStream.getOffset();
 
         /*
          * plcfBkmkf (table recording beginning CPs of bookmarks) Written
@@ -703,11 +692,11 @@ public final class HWPFDocument extends
          * Specification; Page 24 of 210
          */
 
-    // write out the CHPBinTable.
-    _fib.setFcPlcfbteChpx(tableOffset);
-    _cbt.writeTo(wordDocumentStream, tableStream, fcMin, _cft.getTextPieceTable());
-    _fib.setLcbPlcfbteChpx(tableStream.getOffset() - tableOffset);
-    tableOffset = tableStream.getOffset();
+        // write out the CHPBinTable.
+        _fib.setFcPlcfbteChpx(tableOffset);
+        _cbt.writeTo(wordDocumentStream, tableStream, fcMin, _cft.getTextPieceTable());
+        _fib.setLcbPlcfbteChpx(tableStream.getOffset() - tableOffset);
+        tableOffset = tableStream.getOffset();
 
         /*
          * plcfbtePapx (bin table for PAP FKPs) Written immediately after the
@@ -717,11 +706,11 @@ public final class HWPFDocument extends
          * Specification; Page 24 of 210
          */
 
-    // write out the PAPBinTable.
-    _fib.setFcPlcfbtePapx(tableOffset);
-    _pbt.writeTo(wordDocumentStream, tableStream, _cft.getTextPieceTable());
-    _fib.setLcbPlcfbtePapx(tableStream.getOffset() - tableOffset);
-    tableOffset = tableStream.getOffset();
+        // write out the PAPBinTable.
+        _fib.setFcPlcfbtePapx(tableOffset);
+        _pbt.writeTo(wordDocumentStream, tableStream, _cft.getTextPieceTable());
+        _fib.setLcbPlcfbtePapx(tableStream.getOffset() - tableOffset);
+        tableOffset = tableStream.getOffset();
 
         /*
          * plcfendRef (endnote reference position table) Written immediately
@@ -737,20 +726,20 @@ public final class HWPFDocument extends
         _endnotesTables.writeTxt( _fib, tableStream );
         tableOffset = tableStream.getOffset();
 
-    /*
-     * plcffld*** (table of field positions and statuses for annotation
-     * subdocument) Written immediately after the previously recorded table,
-     * if the ******* subdocument contains fields.
-     * 
-     * Microsoft Office Word 97-2007 Binary File Format (.doc)
-     * Specification; Page 24 of 210
-     */
+        /*
+         * plcffld*** (table of field positions and statuses for annotation
+         * subdocument) Written immediately after the previously recorded table,
+         * if the ******* subdocument contains fields.
+         * 
+         * Microsoft Office Word 97-2007 Binary File Format (.doc)
+         * Specification; Page 24 of 210
+         */
 
-    if ( _fieldsTables != null )
-    {
-        _fieldsTables.write( _fib, tableStream );
-        tableOffset = tableStream.getOffset();
-    }
+        if ( _fieldsTables != null )
+        {
+            _fieldsTables.write( _fib, tableStream );
+            tableOffset = tableStream.getOffset();
+        }
 
         /*
          * plcffndRef (footnote reference position table) Written immediately
@@ -774,11 +763,11 @@ public final class HWPFDocument extends
          * Specification; Page 25 of 210
          */
 
-    // write out the SectionTable.
-    _fib.setFcPlcfsed(tableOffset);
-    _st.writeTo(wordDocumentStream, tableStream);
-    _fib.setLcbPlcfsed(tableStream.getOffset() - tableOffset);
-    tableOffset = tableStream.getOffset();
+        // write out the SectionTable.
+        _fib.setFcPlcfsed(tableOffset);
+        _st.writeTo(wordDocumentStream, tableStream);
+        _fib.setLcbPlcfsed(tableStream.getOffset() - tableOffset);
+        tableOffset = tableStream.getOffset();
 
         // write out the list tables
         if ( _lt != null )
@@ -834,72 +823,72 @@ public final class HWPFDocument extends
          * Specification; Page 27 of 210
          */
 
-    // write out the saved-by table.
-    if (_sbt != null)
-    {
-      _fib.setFcSttbSavedBy(tableOffset);
-      _sbt.writeTo(tableStream);
-      _fib.setLcbSttbSavedBy(tableStream.getOffset() - tableOffset);
+        // write out the saved-by table.
+        if (_sbt != null)
+        {
+            _fib.setFcSttbSavedBy(tableOffset);
+            _sbt.writeTo(tableStream);
+            _fib.setLcbSttbSavedBy(tableStream.getOffset() - tableOffset);
 
-      tableOffset = tableStream.getOffset();
-    }
-    
-    // write out the revision mark authors table.
-    if (_rmat != null)
-    {
-      _fib.setFcSttbfRMark(tableOffset);
-      _rmat.writeTo(tableStream);
-      _fib.setLcbSttbfRMark(tableStream.getOffset() - tableOffset);
+            tableOffset = tableStream.getOffset();
+        }
 
-      tableOffset = tableStream.getOffset();
-    }
+        // write out the revision mark authors table.
+        if (_rmat != null)
+        {
+            _fib.setFcSttbfRMark(tableOffset);
+            _rmat.writeTo(tableStream);
+            _fib.setLcbSttbfRMark(tableStream.getOffset() - tableOffset);
 
-    // write out the FontTable.
-    _fib.setFcSttbfffn(tableOffset);
-    _ft.writeTo(tableStream);
-    _fib.setLcbSttbfffn(tableStream.getOffset() - tableOffset);
-    tableOffset = tableStream.getOffset();
+            tableOffset = tableStream.getOffset();
+        }
 
-    // set some variables in the FileInformationBlock.
-    _fib.getFibBase().setFcMin(fcMin);
-    _fib.getFibBase().setFcMac(fcMac);
-    _fib.setCbMac(wordDocumentStream.getOffset());
+        // write out the FontTable.
+        _fib.setFcSttbfffn(tableOffset);
+        _ft.writeTo(tableStream);
+        _fib.setLcbSttbfffn(tableStream.getOffset() - tableOffset);
+        tableOffset = tableStream.getOffset();
 
-    // make sure that the table, doc and data streams use big blocks.
-    byte[] mainBuf = wordDocumentStream.toByteArray();
-    if (mainBuf.length < 4096)
-    {
-      byte[] tempBuf = new byte[4096];
-      System.arraycopy(mainBuf, 0, tempBuf, 0, mainBuf.length);
-      mainBuf = tempBuf;
-    }
+        // set some variables in the FileInformationBlock.
+        _fib.getFibBase().setFcMin(fcMin);
+        _fib.getFibBase().setFcMac(fcMac);
+        _fib.setCbMac(wordDocumentStream.getOffset());
+
+        // make sure that the table, doc and data streams use big blocks.
+        byte[] mainBuf = wordDocumentStream.toByteArray();
+        if (mainBuf.length < 4096)
+        {
+            byte[] tempBuf = new byte[4096];
+            System.arraycopy(mainBuf, 0, tempBuf, 0, mainBuf.length);
+            mainBuf = tempBuf;
+        }
 
         // Table1 stream will be used
         _fib.getFibBase().setFWhichTblStm( true );
 
-    // write out the FileInformationBlock.
-    //_fib.serialize(mainBuf, 0);
-    _fib.writeTo(mainBuf, tableStream);
+        // write out the FileInformationBlock.
+        //_fib.serialize(mainBuf, 0);
+        _fib.writeTo(mainBuf, tableStream);
 
-    byte[] tableBuf = tableStream.toByteArray();
-    if (tableBuf.length < 4096)
-    {
-      byte[] tempBuf = new byte[4096];
-      System.arraycopy(tableBuf, 0, tempBuf, 0, tableBuf.length);
-      tableBuf = tempBuf;
-    }
+        byte[] tableBuf = tableStream.toByteArray();
+        if (tableBuf.length < 4096)
+        {
+            byte[] tempBuf = new byte[4096];
+            System.arraycopy(tableBuf, 0, tempBuf, 0, tableBuf.length);
+            tableBuf = tempBuf;
+        }
 
-    byte[] dataBuf = _dataStream;
-    if (dataBuf == null)
-    {
-      dataBuf = new byte[4096];
-    }
-    if (dataBuf.length < 4096)
-    {
-      byte[] tempBuf = new byte[4096];
-      System.arraycopy(dataBuf, 0, tempBuf, 0, dataBuf.length);
-      dataBuf = tempBuf;
-    }
+        byte[] dataBuf = _dataStream;
+        if (dataBuf == null)
+        {
+            dataBuf = new byte[4096];
+        }
+        if (dataBuf.length < 4096)
+        {
+            byte[] tempBuf = new byte[4096];
+            System.arraycopy(dataBuf, 0, tempBuf, 0, dataBuf.length);
+            dataBuf = tempBuf;
+        }
 
         // create new document preserving order of entries
         NPOIFSFileSystem pfs = new NPOIFSFileSystem();
@@ -990,16 +979,16 @@ public final class HWPFDocument extends
         this._dataStream = dataBuf;
     }
 
-  @Internal
-  public byte[] getDataStream()
-  {
-    return _dataStream;
-  }
-  @Internal
-  public byte[] getTableStream()
-  {
-    return _tableStream;
-  }
+    @Internal
+    public byte[] getDataStream()
+    {
+        return _dataStream;
+    }
+    @Internal
+    public byte[] getTableStream()
+    {
+        return _tableStream;
+    }
 
     public int registerList( HWPFList list )
     {



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org