]> source.dussan.org Git - poi.git/commitdiff
fix issues related to document properties loading and saving
authorSergey Vladimirov <sergey@apache.org>
Thu, 11 Aug 2011 16:37:31 +0000 (16:37 +0000)
committerSergey Vladimirov <sergey@apache.org>
Thu, 11 Aug 2011 16:37:31 +0000 (16:37 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1156662 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hwpf/HWPFDocument.java
src/scratchpad/src/org/apache/poi/hwpf/dev/HWPFLister.java
src/scratchpad/src/org/apache/poi/hwpf/model/DocumentProperties.java
src/scratchpad/src/org/apache/poi/hwpf/model/FIBFieldHandler.java
src/scratchpad/src/org/apache/poi/hwpf/model/FieldsTables.java
src/scratchpad/src/org/apache/poi/hwpf/model/NotesTables.java
src/scratchpad/src/org/apache/poi/hwpf/model/types/DOPAbstractType.java
src/scratchpad/testcases/org/apache/poi/hwpf/model/TestDocumentProperties.java
src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestBugs.java

index 3beb3ffe73e75ba1285bd5a60e38c74678aa26ad..4c0be3cf6715c481cd8afe140b7f22b068fe0fd7 100644 (file)
@@ -264,7 +264,7 @@ public final class HWPFDocument extends HWPFDocumentCore
     //fcMin = _fib.getFcMin()
 
     // Start to load up our standard structures.
-    _dop = new DocumentProperties(_tableStream, _fib.getFcDop());
+    _dop = new DocumentProperties(_tableStream, _fib.getFcDop(), _fib.getLcbDop() );
     _cft = new ComplexFileTable(_mainStream, _tableStream, _fib.getFcClx(), fcMin);
     TextPieceTable _tpt = _cft.getTextPieceTable();
 
@@ -682,6 +682,21 @@ public final class HWPFDocument extends HWPFDocumentCore
     tableOffset = tableStream.getOffset();
     int fcMac = mainStream.getOffset();
 
+        /*
+         * dop (document properties record) Written immediately after the end of
+         * the previously recorded structure. This is recorded in all Word
+         * documents
+         * 
+         * Microsoft Office Word 97-2007 Binary File Format (.doc)
+         * Specification; Page 23 of 210
+         */
+
+    // 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
          * immediately after the sttbfBkmk, if the document contains bookmarks.
@@ -881,13 +896,6 @@ public final class HWPFDocument extends HWPFDocumentCore
     _fib.setLcbSttbfffn(tableStream.getOffset() - tableOffset);
     tableOffset = tableStream.getOffset();
 
-    // write out the DocumentProperties.
-    _fib.setFcDop(tableOffset);
-    byte[] buf = new byte[_dop.getSize()];
-    _fib.setLcbDop(_dop.getSize());
-    _dop.serialize(buf, 0);
-    tableStream.write(buf);
-
     // set some variables in the FileInformationBlock.
     _fib.setFcMin(fcMin);
     _fib.setFcMac(fcMac);
index 028dbf4ef8e62b71ca3eeeea0e2e61833fc1078a..a06318ae0ad11821308e40f086f4e499d82d77e4 100644 (file)
@@ -101,7 +101,7 @@ public final class HWPFLister
         if ( args.length == 0 )
         {
             System.err.println( "Use:" );
-            System.err.println( "\tHWPFLister <filename>\n"
+            System.err.println( "\tHWPFLister <filename>\n" + "\t\t[--dop]\n"
                     + "\t\t[--textPieces] [--textPiecesText]\n"
                     + "\t\t[--chpx] [--chpxProperties] [--chpxSprms]\n"
                     + "\t\t[--papx] [--papxProperties] [--papxSprms]\n"
@@ -112,6 +112,8 @@ public final class HWPFLister
             System.exit( 1 );
         }
 
+        boolean outputDop = false;
+
         boolean outputTextPieces = false;
         boolean outputTextPiecesText = false;
 
@@ -136,6 +138,9 @@ public final class HWPFLister
 
         for ( String arg : Arrays.asList( args ).subList( 1, args.length ) )
         {
+            if ( "--dop".equals( arg ) )
+                outputDop = true;
+
             if ( "--textPieces".equals( arg ) )
                 outputTextPieces = true;
             if ( "--textPiecesText".equals( arg ) )
@@ -197,6 +202,12 @@ public final class HWPFLister
         System.out.println( "== FIB (original) ==" );
         listerOriginal.dumpFIB();
 
+        if ( outputDop )
+        {
+            System.out.println( "== Document properties ==" );
+            listerOriginal.dumpDop();
+        }
+
         if ( outputTextPieces )
         {
             System.out.println( "== Text pieces (original) ==" );
@@ -371,6 +382,17 @@ public final class HWPFLister
         }
     }
 
+    private void dumpDop()
+    {
+        if ( !( _doc instanceof HWPFDocument ) )
+        {
+            System.out.println( "Word 95 not supported so far" );
+            return;
+        }
+
+        System.out.println( ( (HWPFDocument) _doc ).getDocProperties() );
+    }
+
     private void dumpEscher()
     {
         if ( _doc instanceof HWPFOldDocument )
index f0aafda6cea4a0e591d41bc4348dd7ccb6c9142f..dc2e36641f66efde489214a2d1bba784ac5cf1fa 100644 (file)
 
 package org.apache.poi.hwpf.model;
 
+import java.io.IOException;
+
+import org.apache.poi.hwpf.model.io.HWPFOutputStream;
 import org.apache.poi.hwpf.model.types.DOPAbstractType;
 import org.apache.poi.util.Internal;
+import org.apache.poi.util.LittleEndian;
 
 /**
  * Comment me
- *
+ * 
  * @author Ryan Ackley
  */
 @Internal
-public final class DocumentProperties extends DOPAbstractType {
+public final class DocumentProperties extends DOPAbstractType
+{
+
+    private byte[] _preserved;
+
+    /**
+     * @deprecated Use {@link #DocumentProperties(byte[],int,int)} instead
+     */
+    public DocumentProperties( byte[] tableStream, int offset )
+    {
+        this( tableStream, offset, DOPAbstractType.getSize() );
+    }
+
+    public DocumentProperties( byte[] tableStream, int offset, int length )
+    {
+        super.fillFields( tableStream, offset );
+
+        final int supportedSize = DOPAbstractType.getSize();
+        if ( length != supportedSize )
+        {
+            this._preserved = LittleEndian.getByteArray( tableStream, offset
+                    + supportedSize, length - supportedSize );
+        }
+        else
+        {
+            _preserved = new byte[0];
+        }
+    }
+
+    @Override
+    public void serialize( byte[] data, int offset )
+    {
+        super.serialize( data, offset );
+    }
 
+    public void writeTo( HWPFOutputStream tableStream ) throws IOException
+    {
+        byte[] supported = new byte[getSize()];
+        serialize( supported, 0 );
 
-       public DocumentProperties(byte[] tableStream, int offset) {
-               super.fillFields(tableStream, offset);
-       }
+        tableStream.write( supported );
+        tableStream.write( _preserved );
+    }
 }
index 38e7f8a0a71f07489b86e49dad6e5ad6b7459fb8..b2f4ce51db6378382c95d942f08767aee6262780 100644 (file)
@@ -71,6 +71,7 @@ public final class FIBFieldHandler
   public static final int PRENVPORT = 28;
   public static final int PRENVLAND = 29;
   public static final int WSS = 30;
+  // 402 == 0x0192; 406 == 0x0196
   public static final int DOP = 31;
   public static final int STTBFASSOC = 32;
   public static final int CLX = 33;
index cb15dfac05cf039cae1619ec3518d91340cc5fb4..4206ce8343b2e93ed28ca2968aefcd973a427eff 100644 (file)
@@ -135,7 +135,11 @@ public class FieldsTables
             throws IOException
     {
         if ( plexOfCps == null || plexOfCps.length() == 0 )
+        {
+            fib.setFieldsPlcfOffset( part, outputStream.getOffset() );
+            fib.setFieldsPlcfLength( part, 0 );
             return 0;
+        }
 
         byte[] data = plexOfCps.toByteArray();
 
index 8755331c3679cda70f8bd9d63ddad24e5b7b29ee..eb5a1008c72c4b6f20fe27fa3a43588a95dcfa8e 100644 (file)
@@ -87,7 +87,7 @@ public class NotesTables
     {
         if ( descriptors == null || descriptors.length() == 0 )
         {
-            fib.setNotesDescriptorsOffset( noteType, 0 );
+            fib.setNotesDescriptorsOffset( noteType, tableStream.getOffset() );
             fib.setNotesDescriptorsSize( noteType, 0 );
             return;
         }
@@ -105,7 +105,7 @@ public class NotesTables
     {
         if ( textPositions == null || textPositions.length() == 0 )
         {
-            fib.setNotesTextPositionsOffset( noteType, 0 );
+            fib.setNotesTextPositionsOffset( noteType, tableStream.getOffset() );
             fib.setNotesTextPositionsSize( noteType, 0 );
             return;
         }
index 724ecdf31b79b7c1fc6f87e0fed9d14b82d5e625..66e7a70dbec05ab4692d5a70ba3fae15be7df3e9 100644 (file)
@@ -34,225 +34,227 @@ import org.apache.poi.util.LittleEndian;
 @Internal
 public abstract class DOPAbstractType implements HDFType {
 
-    protected  byte field_1_formatFlags;
-        private static BitField  fFacingPages = BitFieldFactory.getInstance(0x01);
-        private static BitField  fWidowControl = BitFieldFactory.getInstance(0x02);
-        private static BitField  fPMHMainDoc = BitFieldFactory.getInstance(0x04);
-        private static BitField  grfSupression = BitFieldFactory.getInstance(0x18);
-        private static BitField  fpc = BitFieldFactory.getInstance(0x60);
-        private static BitField  unused1 = BitFieldFactory.getInstance(0x80);
-    protected  byte field_2_unused2;
-    protected  short field_3_footnoteInfo;
-        private static BitField  rncFtn = BitFieldFactory.getInstance(0x0003);
-        private static BitField  nFtn = BitFieldFactory.getInstance(0xfffc);
-    protected  byte field_4_fOutlineDirtySave;
-    protected  byte field_5_docinfo;
-        private static BitField  fOnlyMacPics = BitFieldFactory.getInstance(0x01);
-        private static BitField  fOnlyWinPics = BitFieldFactory.getInstance(0x02);
-        private static BitField  fLabelDoc = BitFieldFactory.getInstance(0x04);
-        private static BitField  fHyphCapitals = BitFieldFactory.getInstance(0x08);
-        private static BitField  fAutoHyphen = BitFieldFactory.getInstance(0x10);
-        private static BitField  fFormNoFields = BitFieldFactory.getInstance(0x20);
-        private static BitField  fLinkStyles = BitFieldFactory.getInstance(0x40);
-        private static BitField  fRevMarking = BitFieldFactory.getInstance(0x80);
-    protected  byte field_6_docinfo1;
-        private static BitField  fBackup = BitFieldFactory.getInstance(0x01);
-        private static BitField  fExactCWords = BitFieldFactory.getInstance(0x02);
-        private static BitField  fPagHidden = BitFieldFactory.getInstance(0x04);
-        private static BitField  fPagResults = BitFieldFactory.getInstance(0x08);
-        private static BitField  fLockAtn = BitFieldFactory.getInstance(0x10);
-        private static BitField  fMirrorMargins = BitFieldFactory.getInstance(0x20);
-        private static BitField  unused3 = BitFieldFactory.getInstance(0x40);
-        private static BitField  fDfltTrueType = BitFieldFactory.getInstance(0x80);
-    protected  byte field_7_docinfo2;
-        private static BitField  fPagSupressTopSpacing = BitFieldFactory.getInstance(0x01);
-        private static BitField  fProtEnabled = BitFieldFactory.getInstance(0x02);
-        private static BitField  fDispFormFldSel = BitFieldFactory.getInstance(0x04);
-        private static BitField  fRMView = BitFieldFactory.getInstance(0x08);
-        private static BitField  fRMPrint = BitFieldFactory.getInstance(0x10);
-        private static BitField  unused4 = BitFieldFactory.getInstance(0x20);
-        private static BitField  fLockRev = BitFieldFactory.getInstance(0x40);
-        private static BitField  fEmbedFonts = BitFieldFactory.getInstance(0x80);
-    protected  short field_8_docinfo3;
-        private static BitField  oldfNoTabForInd = BitFieldFactory.getInstance(0x0001);
-        private static BitField  oldfNoSpaceRaiseLower = BitFieldFactory.getInstance(0x0002);
-        private static BitField  oldfSuppressSpbfAfterPageBreak = BitFieldFactory.getInstance(0x0004);
-        private static BitField  oldfWrapTrailSpaces = BitFieldFactory.getInstance(0x0008);
-        private static BitField  oldfMapPrintTextColor = BitFieldFactory.getInstance(0x0010);
-        private static BitField  oldfNoColumnBalance = BitFieldFactory.getInstance(0x0020);
-        private static BitField  oldfConvMailMergeEsc = BitFieldFactory.getInstance(0x0040);
-        private static BitField  oldfSupressTopSpacing = BitFieldFactory.getInstance(0x0080);
-        private static BitField  oldfOrigWordTableRules = BitFieldFactory.getInstance(0x0100);
-        private static BitField  oldfTransparentMetafiles = BitFieldFactory.getInstance(0x0200);
-        private static BitField  oldfShowBreaksInFrames = BitFieldFactory.getInstance(0x0400);
-        private static BitField  oldfSwapBordersFacingPgs = BitFieldFactory.getInstance(0x0800);
-        private static BitField  unused5 = BitFieldFactory.getInstance(0xf000);
-    protected  int field_9_dxaTab;
-    protected  int field_10_wSpare;
-    protected  int field_11_dxaHotz;
-    protected  int field_12_cConsexHypLim;
-    protected  int field_13_wSpare2;
-    protected  int field_14_dttmCreated;
-    protected  int field_15_dttmRevised;
-    protected  int field_16_dttmLastPrint;
-    protected  int field_17_nRevision;
-    protected  int field_18_tmEdited;
-    protected  int field_19_cWords;
-    protected  int field_20_cCh;
-    protected  int field_21_cPg;
-    protected  int field_22_cParas;
-    protected  short field_23_Edn;
-        private static BitField  rncEdn = BitFieldFactory.getInstance(0x0003);
-        private static BitField  nEdn = BitFieldFactory.getInstance(0xfffc);
-    protected  short field_24_Edn1;
-        private static BitField  epc = BitFieldFactory.getInstance(0x0003);
-        private static BitField  nfcFtnRef1 = BitFieldFactory.getInstance(0x003c);
-        private static BitField  nfcEdnRef1 = BitFieldFactory.getInstance(0x03c0);
-        private static BitField  fPrintFormData = BitFieldFactory.getInstance(0x0400);
-        private static BitField  fSaveFormData = BitFieldFactory.getInstance(0x0800);
-        private static BitField  fShadeFormData = BitFieldFactory.getInstance(0x1000);
-        private static BitField  fWCFtnEdn = BitFieldFactory.getInstance(0x8000);
-    protected  int field_25_cLines;
-    protected  int field_26_cWordsFtnEnd;
-    protected  int field_27_cChFtnEdn;
-    protected  short field_28_cPgFtnEdn;
-    protected  int field_29_cParasFtnEdn;
-    protected  int field_30_cLinesFtnEdn;
-    protected  int field_31_lKeyProtDoc;
-    protected  short field_32_view;
-        private static BitField  wvkSaved = BitFieldFactory.getInstance(0x0007);
-        private static BitField  wScaleSaved = BitFieldFactory.getInstance(0x0ff8);
-        private static BitField  zkSaved = BitFieldFactory.getInstance(0x3000);
-        private static BitField  fRotateFontW6 = BitFieldFactory.getInstance(0x4000);
-        private static BitField  iGutterPos = BitFieldFactory.getInstance(0x8000);
-    protected  int field_33_docinfo4;
-        private static BitField  fNoTabForInd = BitFieldFactory.getInstance(0x00000001);
-        private static BitField  fNoSpaceRaiseLower = BitFieldFactory.getInstance(0x00000002);
-        private static BitField  fSupressSpdfAfterPageBreak = BitFieldFactory.getInstance(0x00000004);
-        private static BitField  fWrapTrailSpaces = BitFieldFactory.getInstance(0x00000008);
-        private static BitField  fMapPrintTextColor = BitFieldFactory.getInstance(0x00000010);
-        private static BitField  fNoColumnBalance = BitFieldFactory.getInstance(0x00000020);
-        private static BitField  fConvMailMergeEsc = BitFieldFactory.getInstance(0x00000040);
-        private static BitField  fSupressTopSpacing = BitFieldFactory.getInstance(0x00000080);
-        private static BitField  fOrigWordTableRules = BitFieldFactory.getInstance(0x00000100);
-        private static BitField  fTransparentMetafiles = BitFieldFactory.getInstance(0x00000200);
-        private static BitField  fShowBreaksInFrames = BitFieldFactory.getInstance(0x00000400);
-        private static BitField  fSwapBordersFacingPgs = BitFieldFactory.getInstance(0x00000800);
-        private static BitField  fSuppressTopSPacingMac5 = BitFieldFactory.getInstance(0x00010000);
-        private static BitField  fTruncDxaExpand = BitFieldFactory.getInstance(0x00020000);
-        private static BitField  fPrintBodyBeforeHdr = BitFieldFactory.getInstance(0x00040000);
-        private static BitField  fNoLeading = BitFieldFactory.getInstance(0x00080000);
-        private static BitField  fMWSmallCaps = BitFieldFactory.getInstance(0x00200000);
-    protected  short field_34_adt;
-    protected  byte[] field_35_doptypography;
-    protected  byte[] field_36_dogrid;
-    protected  short field_37_docinfo5;
-        private static BitField  lvl = BitFieldFactory.getInstance(0x001e);
-        private static BitField  fGramAllDone = BitFieldFactory.getInstance(0x0020);
-        private static BitField  fGramAllClean = BitFieldFactory.getInstance(0x0040);
-        private static BitField  fSubsetFonts = BitFieldFactory.getInstance(0x0080);
-        private static BitField  fHideLastVersion = BitFieldFactory.getInstance(0x0100);
-        private static BitField  fHtmlDoc = BitFieldFactory.getInstance(0x0200);
-        private static BitField  fSnapBorder = BitFieldFactory.getInstance(0x0800);
-        private static BitField  fIncludeHeader = BitFieldFactory.getInstance(0x1000);
-        private static BitField  fIncludeFooter = BitFieldFactory.getInstance(0x2000);
-        private static BitField  fForcePageSizePag = BitFieldFactory.getInstance(0x4000);
-        private static BitField  fMinFontSizePag = BitFieldFactory.getInstance(0x8000);
-    protected  short field_38_docinfo6;
-        private static BitField  fHaveVersions = BitFieldFactory.getInstance(0x0001);
-        private static BitField  fAutoVersions = BitFieldFactory.getInstance(0x0002);
-    protected  byte[] field_39_asumyi;
-    protected  int field_40_cChWS;
-    protected  int field_41_cChWSFtnEdn;
-    protected  int field_42_grfDocEvents;
-    protected  int field_43_virusinfo;
-        private static BitField  fVirusPrompted = BitFieldFactory.getInstance(0x0001);
-        private static BitField  fVirusLoadSafe = BitFieldFactory.getInstance(0x0002);
-        private static BitField  KeyVirusSession30 = BitFieldFactory.getInstance(0xfffffffc);
-    protected  byte[] field_44_Spare;
-    protected  int field_45_reserved1;
-    protected  int field_46_reserved2;
-    protected  int field_47_cDBC;
-    protected  int field_48_cDBCFtnEdn;
-    protected  int field_49_reserved;
-    protected  short field_50_nfcFtnRef;
-    protected  short field_51_nfcEdnRef;
-    protected  short field_52_hpsZoonFontPag;
-    protected  short field_53_dywDispPag;
-
-
-    public DOPAbstractType()
-    {
-
-    }
-
-    protected void fillFields(byte [] data, int offset)
-    {
-        field_1_formatFlags             = data[ 0x0 + offset ];
-        field_2_unused2                 = data[ 0x1 + offset ];
-        field_3_footnoteInfo            = LittleEndian.getShort(data, 0x2 + offset);
-        field_4_fOutlineDirtySave       = data[ 0x4 + offset ];
-        field_5_docinfo                 = data[ 0x5 + offset ];
-        field_6_docinfo1                = data[ 0x6 + offset ];
-        field_7_docinfo2                = data[ 0x7 + offset ];
-        field_8_docinfo3                = LittleEndian.getShort(data, 0x8 + offset);
-        field_9_dxaTab                  = LittleEndian.getShort(data, 0xa + offset);
-        field_10_wSpare                 = LittleEndian.getShort(data, 0xc + offset);
-        field_11_dxaHotz                = LittleEndian.getShort(data, 0xe + offset);
-        field_12_cConsexHypLim          = LittleEndian.getShort(data, 0x10 + offset);
-        field_13_wSpare2                = LittleEndian.getShort(data, 0x12 + offset);
-        field_14_dttmCreated            = LittleEndian.getInt(data, 0x14 + offset);
-        field_15_dttmRevised            = LittleEndian.getInt(data, 0x18 + offset);
-        field_16_dttmLastPrint          = LittleEndian.getInt(data, 0x1c + offset);
-        field_17_nRevision              = LittleEndian.getShort(data, 0x20 + offset);
-        field_18_tmEdited               = LittleEndian.getInt(data, 0x22 + offset);
-        field_19_cWords                 = LittleEndian.getInt(data, 0x26 + offset);
-        field_20_cCh                    = LittleEndian.getInt(data, 0x2a + offset);
-        field_21_cPg                    = LittleEndian.getShort(data, 0x2e + offset);
-        field_22_cParas                 = LittleEndian.getInt(data, 0x30 + offset);
-        field_23_Edn                    = LittleEndian.getShort(data, 0x34 + offset);
-        field_24_Edn1                   = LittleEndian.getShort(data, 0x36 + offset);
-        field_25_cLines                 = LittleEndian.getInt(data, 0x38 + offset);
-        field_26_cWordsFtnEnd           = LittleEndian.getInt(data, 0x3c + offset);
-        field_27_cChFtnEdn              = LittleEndian.getInt(data, 0x40 + offset);
-        field_28_cPgFtnEdn              = LittleEndian.getShort(data, 0x44 + offset);
-        field_29_cParasFtnEdn           = LittleEndian.getInt(data, 0x46 + offset);
-        field_30_cLinesFtnEdn           = LittleEndian.getInt(data, 0x4a + offset);
-        field_31_lKeyProtDoc            = LittleEndian.getInt(data, 0x4e + offset);
-        field_32_view                   = LittleEndian.getShort(data, 0x52 + offset);
-        field_33_docinfo4               = LittleEndian.getInt(data, 0x54 + offset);
-        field_34_adt                    = LittleEndian.getShort(data, 0x58 + offset);
-        field_35_doptypography          = LittleEndian.getByteArray(data, 0x5a + offset,310);
-        field_36_dogrid                 = LittleEndian.getByteArray(data, 0x190 + offset,10);
-        field_37_docinfo5               = LittleEndian.getShort(data, 0x19a + offset);
-        field_38_docinfo6               = LittleEndian.getShort(data, 0x19c + offset);
-        field_39_asumyi                 = LittleEndian.getByteArray(data, 0x19e + offset,12);
-        field_40_cChWS                  = LittleEndian.getInt(data, 0x1aa + offset);
-        field_41_cChWSFtnEdn            = LittleEndian.getInt(data, 0x1ae + offset);
-        field_42_grfDocEvents           = LittleEndian.getInt(data, 0x1b2 + offset);
-        field_43_virusinfo              = LittleEndian.getInt(data, 0x1b6 + offset);
-        field_44_Spare                  = LittleEndian.getByteArray(data, 0x1ba + offset,30);
-        field_45_reserved1              = LittleEndian.getInt(data, 0x1d8 + offset);
-        field_46_reserved2              = LittleEndian.getInt(data, 0x1dc + offset);
-        field_47_cDBC                   = LittleEndian.getInt(data, 0x1e0 + offset);
-        field_48_cDBCFtnEdn             = LittleEndian.getInt(data, 0x1e4 + offset);
-        field_49_reserved               = LittleEndian.getInt(data, 0x1e8 + offset);
-        field_50_nfcFtnRef              = LittleEndian.getShort(data, 0x1ec + offset);
-        field_51_nfcEdnRef              = LittleEndian.getShort(data, 0x1ee + offset);
-        field_52_hpsZoonFontPag         = LittleEndian.getShort(data, 0x1f0 + offset);
-        field_53_dywDispPag             = LittleEndian.getShort(data, 0x1f2 + offset);
-    }
-
-    public void serialize(byte[] data, int offset)
+    protected byte field_1_formatFlags;
+    /**/private static BitField fFacingPages = new BitField(0x01);
+    /**/private static BitField fWidowControl = new BitField(0x02);
+    /**/private static BitField fPMHMainDoc = new BitField(0x04);
+    /**/private static BitField grfSupression = new BitField(0x18);
+    /**/private static BitField fpc = new BitField(0x60);
+    /**/private static BitField unused1 = new BitField(0x80);
+    protected byte field_2_unused2;
+    protected short field_3_footnoteInfo;
+    /**/private static BitField rncFtn = new BitField(0x0003);
+    /**/private static BitField nFtn = new BitField(0xfffc);
+    protected byte field_4_fOutlineDirtySave;
+    protected byte field_5_docinfo;
+    /**/private static BitField fOnlyMacPics = new BitField(0x01);
+    /**/private static BitField fOnlyWinPics = new BitField(0x02);
+    /**/private static BitField fLabelDoc = new BitField(0x04);
+    /**/private static BitField fHyphCapitals = new BitField(0x08);
+    /**/private static BitField fAutoHyphen = new BitField(0x10);
+    /**/private static BitField fFormNoFields = new BitField(0x20);
+    /**/private static BitField fLinkStyles = new BitField(0x40);
+    /**/private static BitField fRevMarking = new BitField(0x80);
+    protected byte field_6_docinfo1;
+    /**/private static BitField fBackup = new BitField(0x01);
+    /**/private static BitField fExactCWords = new BitField(0x02);
+    /**/private static BitField fPagHidden = new BitField(0x04);
+    /**/private static BitField fPagResults = new BitField(0x08);
+    /**/private static BitField fLockAtn = new BitField(0x10);
+    /**/private static BitField fMirrorMargins = new BitField(0x20);
+    /**/private static BitField unused3 = new BitField(0x40);
+    /**/private static BitField fDfltTrueType = new BitField(0x80);
+    protected byte field_7_docinfo2;
+    /**/private static BitField fPagSupressTopSpacing = new BitField(0x01);
+    /**/private static BitField fProtEnabled = new BitField(0x02);
+    /**/private static BitField fDispFormFldSel = new BitField(0x04);
+    /**/private static BitField fRMView = new BitField(0x08);
+    /**/private static BitField fRMPrint = new BitField(0x10);
+    /**/private static BitField unused4 = new BitField(0x20);
+    /**/private static BitField fLockRev = new BitField(0x40);
+    /**/private static BitField fEmbedFonts = new BitField(0x80);
+    protected short field_8_docinfo3;
+    /**/private static BitField oldfNoTabForInd = new BitField(0x0001);
+    /**/private static BitField oldfNoSpaceRaiseLower = new BitField(0x0002);
+    /**/private static BitField oldfSuppressSpbfAfterPageBreak = new BitField(0x0004);
+    /**/private static BitField oldfWrapTrailSpaces = new BitField(0x0008);
+    /**/private static BitField oldfMapPrintTextColor = new BitField(0x0010);
+    /**/private static BitField oldfNoColumnBalance = new BitField(0x0020);
+    /**/private static BitField oldfConvMailMergeEsc = new BitField(0x0040);
+    /**/private static BitField oldfSupressTopSpacing = new BitField(0x0080);
+    /**/private static BitField oldfOrigWordTableRules = new BitField(0x0100);
+    /**/private static BitField oldfTransparentMetafiles = new BitField(0x0200);
+    /**/private static BitField oldfShowBreaksInFrames = new BitField(0x0400);
+    /**/private static BitField oldfSwapBordersFacingPgs = new BitField(0x0800);
+    /**/private static BitField unused5 = new BitField(0xf000);
+    protected int field_9_dxaTab;
+    protected int field_10_wSpare;
+    protected int field_11_dxaHotz;
+    protected int field_12_cConsexHypLim;
+    protected int field_13_wSpare2;
+    protected int field_14_dttmCreated;
+    protected int field_15_dttmRevised;
+    protected int field_16_dttmLastPrint;
+    protected int field_17_nRevision;
+    protected int field_18_tmEdited;
+    protected int field_19_cWords;
+    protected int field_20_cCh;
+    protected int field_21_cPg;
+    protected int field_22_cParas;
+    protected short field_23_Edn;
+    /**/private static BitField rncEdn = new BitField(0x0003);
+    /**/private static BitField nEdn = new BitField(0xfffc);
+    protected short field_24_Edn1;
+    /**/private static BitField epc = new BitField(0x0003);
+    /**/private static BitField nfcFtnRef1 = new BitField(0x003c);
+    /**/private static BitField nfcEdnRef1 = new BitField(0x03c0);
+    /**/private static BitField fPrintFormData = new BitField(0x0400);
+    /**/private static BitField fSaveFormData = new BitField(0x0800);
+    /**/private static BitField fShadeFormData = new BitField(0x1000);
+    /**/private static BitField fWCFtnEdn = new BitField(0x8000);
+    protected int field_25_cLines;
+    protected int field_26_cWordsFtnEnd;
+    protected int field_27_cChFtnEdn;
+    protected short field_28_cPgFtnEdn;
+    protected int field_29_cParasFtnEdn;
+    protected int field_30_cLinesFtnEdn;
+    protected int field_31_lKeyProtDoc;
+    protected short field_32_view;
+    /**/private static BitField wvkSaved = new BitField(0x0007);
+    /**/private static BitField wScaleSaved = new BitField(0x0ff8);
+    /**/private static BitField zkSaved = new BitField(0x3000);
+    /**/private static BitField fRotateFontW6 = new BitField(0x4000);
+    /**/private static BitField iGutterPos = new BitField(0x8000);
+    protected int field_33_docinfo4;
+    /**/private static BitField fNoTabForInd = new BitField(0x00000001);
+    /**/private static BitField fNoSpaceRaiseLower = new BitField(0x00000002);
+    /**/private static BitField fSupressSpdfAfterPageBreak = new BitField(0x00000004);
+    /**/private static BitField fWrapTrailSpaces = new BitField(0x00000008);
+    /**/private static BitField fMapPrintTextColor = new BitField(0x00000010);
+    /**/private static BitField fNoColumnBalance = new BitField(0x00000020);
+    /**/private static BitField fConvMailMergeEsc = new BitField(0x00000040);
+    /**/private static BitField fSupressTopSpacing = new BitField(0x00000080);
+    /**/private static BitField fOrigWordTableRules = new BitField(0x00000100);
+    /**/private static BitField fTransparentMetafiles = new BitField(0x00000200);
+    /**/private static BitField fShowBreaksInFrames = new BitField(0x00000400);
+    /**/private static BitField fSwapBordersFacingPgs = new BitField(0x00000800);
+    /**/private static BitField fSuppressTopSPacingMac5 = new BitField(0x00010000);
+    /**/private static BitField fTruncDxaExpand = new BitField(0x00020000);
+    /**/private static BitField fPrintBodyBeforeHdr = new BitField(0x00040000);
+    /**/private static BitField fNoLeading = new BitField(0x00080000);
+    /**/private static BitField fMWSmallCaps = new BitField(0x00200000);
+    protected short field_34_adt;
+    protected byte[] field_35_doptypography;
+    protected byte[] field_36_dogrid;
+    protected short field_37_docinfo5;
+    /**/private static BitField lvl = new BitField(0x001e);
+    /**/private static BitField fGramAllDone = new BitField(0x0020);
+    /**/private static BitField fGramAllClean = new BitField(0x0040);
+    /**/private static BitField fSubsetFonts = new BitField(0x0080);
+    /**/private static BitField fHideLastVersion = new BitField(0x0100);
+    /**/private static BitField fHtmlDoc = new BitField(0x0200);
+    /**/private static BitField fSnapBorder = new BitField(0x0800);
+    /**/private static BitField fIncludeHeader = new BitField(0x1000);
+    /**/private static BitField fIncludeFooter = new BitField(0x2000);
+    /**/private static BitField fForcePageSizePag = new BitField(0x4000);
+    /**/private static BitField fMinFontSizePag = new BitField(0x8000);
+    protected short field_38_docinfo6;
+    /**/private static BitField fHaveVersions = new BitField(0x0001);
+    /**/private static BitField fAutoVersions = new BitField(0x0002);
+    protected byte[] field_39_asumyi;
+    protected int field_40_cChWS;
+    protected int field_41_cChWSFtnEdn;
+    protected int field_42_grfDocEvents;
+    protected int field_43_virusinfo;
+    /**/private static BitField fVirusPrompted = new BitField(0x0001);
+    /**/private static BitField fVirusLoadSafe = new BitField(0x0002);
+    /**/private static BitField KeyVirusSession30 = new BitField(0xfffffffc);
+    protected byte[] field_44_Spare;
+    protected int field_45_reserved1;
+    protected int field_46_reserved2;
+    protected int field_47_cDBC;
+    protected int field_48_cDBCFtnEdn;
+    protected int field_49_reserved;
+    protected short field_50_nfcFtnRef;
+    protected short field_51_nfcEdnRef;
+    protected short field_52_hpsZoonFontPag;
+    protected short field_53_dywDispPag;
+
+    protected DOPAbstractType()
+    {
+        this.field_35_doptypography = new byte[0];
+        this.field_36_dogrid = new byte[0];
+        this.field_39_asumyi = new byte[0];
+        this.field_44_Spare = new byte[0];
+    }
+
+    protected void fillFields( byte[] data, int offset )
+    {
+        field_1_formatFlags            = data[ 0x0 + offset ];
+        field_2_unused2                = data[ 0x1 + offset ];
+        field_3_footnoteInfo           = LittleEndian.getShort(data, 0x2 + offset);
+        field_4_fOutlineDirtySave      = data[ 0x4 + offset ];
+        field_5_docinfo                = data[ 0x5 + offset ];
+        field_6_docinfo1               = data[ 0x6 + offset ];
+        field_7_docinfo2               = data[ 0x7 + offset ];
+        field_8_docinfo3               = LittleEndian.getShort(data, 0x8 + offset);
+        field_9_dxaTab                 = LittleEndian.getShort(data, 0xa + offset);
+        field_10_wSpare                = LittleEndian.getShort(data, 0xc + offset);
+        field_11_dxaHotz               = LittleEndian.getShort(data, 0xe + offset);
+        field_12_cConsexHypLim         = LittleEndian.getShort(data, 0x10 + offset);
+        field_13_wSpare2               = LittleEndian.getShort(data, 0x12 + offset);
+        field_14_dttmCreated           = LittleEndian.getInt(data, 0x14 + offset);
+        field_15_dttmRevised           = LittleEndian.getInt(data, 0x18 + offset);
+        field_16_dttmLastPrint         = LittleEndian.getInt(data, 0x1c + offset);
+        field_17_nRevision             = LittleEndian.getShort(data, 0x20 + offset);
+        field_18_tmEdited              = LittleEndian.getInt(data, 0x22 + offset);
+        field_19_cWords                = LittleEndian.getInt(data, 0x26 + offset);
+        field_20_cCh                   = LittleEndian.getInt(data, 0x2a + offset);
+        field_21_cPg                   = LittleEndian.getShort(data, 0x2e + offset);
+        field_22_cParas                = LittleEndian.getInt(data, 0x30 + offset);
+        field_23_Edn                   = LittleEndian.getShort(data, 0x34 + offset);
+        field_24_Edn1                  = LittleEndian.getShort(data, 0x36 + offset);
+        field_25_cLines                = LittleEndian.getInt(data, 0x38 + offset);
+        field_26_cWordsFtnEnd          = LittleEndian.getInt(data, 0x3c + offset);
+        field_27_cChFtnEdn             = LittleEndian.getInt(data, 0x40 + offset);
+        field_28_cPgFtnEdn             = LittleEndian.getShort(data, 0x44 + offset);
+        field_29_cParasFtnEdn          = LittleEndian.getInt(data, 0x46 + offset);
+        field_30_cLinesFtnEdn          = LittleEndian.getInt(data, 0x4a + offset);
+        field_31_lKeyProtDoc           = LittleEndian.getInt(data, 0x4e + offset);
+        field_32_view                  = LittleEndian.getShort(data, 0x52 + offset);
+        field_33_docinfo4              = LittleEndian.getInt(data, 0x54 + offset);
+        field_34_adt                   = LittleEndian.getShort(data, 0x58 + offset);
+        field_35_doptypography         = LittleEndian.getByteArray(data, 0x5a + offset,310);
+        field_36_dogrid                = LittleEndian.getByteArray(data, 0x190 + offset,10);
+        field_37_docinfo5              = LittleEndian.getShort(data, 0x19a + offset);
+        field_38_docinfo6              = LittleEndian.getShort(data, 0x19c + offset);
+        field_39_asumyi                = LittleEndian.getByteArray(data, 0x19e + offset,12);
+        field_40_cChWS                 = LittleEndian.getInt(data, 0x1aa + offset);
+        field_41_cChWSFtnEdn           = LittleEndian.getInt(data, 0x1ae + offset);
+        field_42_grfDocEvents          = LittleEndian.getInt(data, 0x1b2 + offset);
+        field_43_virusinfo             = LittleEndian.getInt(data, 0x1b6 + offset);
+        field_44_Spare                 = LittleEndian.getByteArray(data, 0x1ba + offset,30);
+        field_45_reserved1             = LittleEndian.getInt(data, 0x1d8 + offset);
+        field_46_reserved2             = LittleEndian.getInt(data, 0x1dc + offset);
+        field_47_cDBC                  = LittleEndian.getInt(data, 0x1e0 + offset);
+        field_48_cDBCFtnEdn            = LittleEndian.getInt(data, 0x1e4 + offset);
+        field_49_reserved              = LittleEndian.getInt(data, 0x1e8 + offset);
+        field_50_nfcFtnRef             = LittleEndian.getShort(data, 0x1ec + offset);
+        field_51_nfcEdnRef             = LittleEndian.getShort(data, 0x1ee + offset);
+        field_52_hpsZoonFontPag        = LittleEndian.getShort(data, 0x1f0 + offset);
+        field_53_dywDispPag            = LittleEndian.getShort(data, 0x1f2 + offset);
+    }
+
+    public void serialize( byte[] data, int offset )
     {
         data[ 0x0 + offset] = field_1_formatFlags;
         data[ 0x1 + offset] = field_2_unused2;
-        LittleEndian.putShort(data, 0x2 + offset, field_3_footnoteInfo);
+        LittleEndian.putShort(data, 0x2 + offset, (short)field_3_footnoteInfo);
         data[ 0x4 + offset] = field_4_fOutlineDirtySave;
         data[ 0x5 + offset] = field_5_docinfo;
         data[ 0x6 + offset] = field_6_docinfo1;
         data[ 0x7 + offset] = field_7_docinfo2;
-        LittleEndian.putShort(data, 0x8 + offset, field_8_docinfo3);
+        LittleEndian.putShort(data, 0x8 + offset, (short)field_8_docinfo3);
         LittleEndian.putShort(data, 0xa + offset, (short)field_9_dxaTab);
         LittleEndian.putShort(data, 0xc + offset, (short)field_10_wSpare);
         LittleEndian.putShort(data, 0xe + offset, (short)field_11_dxaHotz);
@@ -267,22 +269,22 @@ public abstract class DOPAbstractType implements HDFType {
         LittleEndian.putInt(data, 0x2a + offset, field_20_cCh);
         LittleEndian.putShort(data, 0x2e + offset, (short)field_21_cPg);
         LittleEndian.putInt(data, 0x30 + offset, field_22_cParas);
-        LittleEndian.putShort(data, 0x34 + offset, field_23_Edn);
-        LittleEndian.putShort(data, 0x36 + offset, field_24_Edn1);
+        LittleEndian.putShort(data, 0x34 + offset, (short)field_23_Edn);
+        LittleEndian.putShort(data, 0x36 + offset, (short)field_24_Edn1);
         LittleEndian.putInt(data, 0x38 + offset, field_25_cLines);
         LittleEndian.putInt(data, 0x3c + offset, field_26_cWordsFtnEnd);
         LittleEndian.putInt(data, 0x40 + offset, field_27_cChFtnEdn);
-        LittleEndian.putShort(data, 0x44 + offset, field_28_cPgFtnEdn);
+        LittleEndian.putShort(data, 0x44 + offset, (short)field_28_cPgFtnEdn);
         LittleEndian.putInt(data, 0x46 + offset, field_29_cParasFtnEdn);
         LittleEndian.putInt(data, 0x4a + offset, field_30_cLinesFtnEdn);
         LittleEndian.putInt(data, 0x4e + offset, field_31_lKeyProtDoc);
-        LittleEndian.putShort(data, 0x52 + offset, field_32_view);
+        LittleEndian.putShort(data, 0x52 + offset, (short)field_32_view);
         LittleEndian.putInt(data, 0x54 + offset, field_33_docinfo4);
-        LittleEndian.putShort(data, 0x58 + offset, field_34_adt);
+        LittleEndian.putShort(data, 0x58 + offset, (short)field_34_adt);
         System.arraycopy(field_35_doptypography, 0, data, 0x5a + offset, field_35_doptypography.length);
         System.arraycopy(field_36_dogrid, 0, data, 0x190 + offset, field_36_dogrid.length);
-        LittleEndian.putShort(data, 0x19a + offset, field_37_docinfo5);
-        LittleEndian.putShort(data, 0x19c + offset, field_38_docinfo6);
+        LittleEndian.putShort(data, 0x19a + offset, (short)field_37_docinfo5);
+        LittleEndian.putShort(data, 0x19c + offset, (short)field_38_docinfo6);
         System.arraycopy(field_39_asumyi, 0, data, 0x19e + offset, field_39_asumyi.length);
         LittleEndian.putInt(data, 0x1aa + offset, field_40_cChWS);
         LittleEndian.putInt(data, 0x1ae + offset, field_41_cChWSFtnEdn);
@@ -294,286 +296,231 @@ public abstract class DOPAbstractType implements HDFType {
         LittleEndian.putInt(data, 0x1e0 + offset, field_47_cDBC);
         LittleEndian.putInt(data, 0x1e4 + offset, field_48_cDBCFtnEdn);
         LittleEndian.putInt(data, 0x1e8 + offset, field_49_reserved);
-        LittleEndian.putShort(data, 0x1ec + offset, field_50_nfcFtnRef);
-        LittleEndian.putShort(data, 0x1ee + offset, field_51_nfcEdnRef);
-        LittleEndian.putShort(data, 0x1f0 + offset, field_52_hpsZoonFontPag);
-        LittleEndian.putShort(data, 0x1f2 + offset, field_53_dywDispPag);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer();
-
-        buffer.append("[DOP]\n");
-
-        buffer.append("    .formatFlags          = ");
-        buffer.append(" (").append(getFormatFlags()).append(" )\n");
-        buffer.append("         .fFacingPages             = ").append(isFFacingPages()).append('\n');
-        buffer.append("         .fWidowControl            = ").append(isFWidowControl()).append('\n');
-        buffer.append("         .fPMHMainDoc              = ").append(isFPMHMainDoc()).append('\n');
-        buffer.append("         .grfSupression            = ").append(getGrfSupression()).append('\n');
-        buffer.append("         .fpc                      = ").append(getFpc()).append('\n');
-        buffer.append("         .unused1                  = ").append(isUnused1()).append('\n');
-
-        buffer.append("    .unused2              = ");
-        buffer.append(" (").append(getUnused2()).append(" )\n");
-
-        buffer.append("    .footnoteInfo         = ");
-        buffer.append(" (").append(getFootnoteInfo()).append(" )\n");
-        buffer.append("         .rncFtn                   = ").append(getRncFtn()).append('\n');
-        buffer.append("         .nFtn                     = ").append(getNFtn()).append('\n');
-
-        buffer.append("    .fOutlineDirtySave    = ");
-        buffer.append(" (").append(getFOutlineDirtySave()).append(" )\n");
-
-        buffer.append("    .docinfo              = ");
-        buffer.append(" (").append(getDocinfo()).append(" )\n");
-        buffer.append("         .fOnlyMacPics             = ").append(isFOnlyMacPics()).append('\n');
-        buffer.append("         .fOnlyWinPics             = ").append(isFOnlyWinPics()).append('\n');
-        buffer.append("         .fLabelDoc                = ").append(isFLabelDoc()).append('\n');
-        buffer.append("         .fHyphCapitals            = ").append(isFHyphCapitals()).append('\n');
-        buffer.append("         .fAutoHyphen              = ").append(isFAutoHyphen()).append('\n');
-        buffer.append("         .fFormNoFields            = ").append(isFFormNoFields()).append('\n');
-        buffer.append("         .fLinkStyles              = ").append(isFLinkStyles()).append('\n');
-        buffer.append("         .fRevMarking              = ").append(isFRevMarking()).append('\n');
-
-        buffer.append("    .docinfo1             = ");
-        buffer.append(" (").append(getDocinfo1()).append(" )\n");
-        buffer.append("         .fBackup                  = ").append(isFBackup()).append('\n');
-        buffer.append("         .fExactCWords             = ").append(isFExactCWords()).append('\n');
-        buffer.append("         .fPagHidden               = ").append(isFPagHidden()).append('\n');
-        buffer.append("         .fPagResults              = ").append(isFPagResults()).append('\n');
-        buffer.append("         .fLockAtn                 = ").append(isFLockAtn()).append('\n');
-        buffer.append("         .fMirrorMargins           = ").append(isFMirrorMargins()).append('\n');
-        buffer.append("         .unused3                  = ").append(isUnused3()).append('\n');
-        buffer.append("         .fDfltTrueType            = ").append(isFDfltTrueType()).append('\n');
-
-        buffer.append("    .docinfo2             = ");
-        buffer.append(" (").append(getDocinfo2()).append(" )\n");
-        buffer.append("         .fPagSupressTopSpacing     = ").append(isFPagSupressTopSpacing()).append('\n');
-        buffer.append("         .fProtEnabled             = ").append(isFProtEnabled()).append('\n');
-        buffer.append("         .fDispFormFldSel          = ").append(isFDispFormFldSel()).append('\n');
-        buffer.append("         .fRMView                  = ").append(isFRMView()).append('\n');
-        buffer.append("         .fRMPrint                 = ").append(isFRMPrint()).append('\n');
-        buffer.append("         .unused4                  = ").append(isUnused4()).append('\n');
-        buffer.append("         .fLockRev                 = ").append(isFLockRev()).append('\n');
-        buffer.append("         .fEmbedFonts              = ").append(isFEmbedFonts()).append('\n');
-
-        buffer.append("    .docinfo3             = ");
-        buffer.append(" (").append(getDocinfo3()).append(" )\n");
-        buffer.append("         .oldfNoTabForInd          = ").append(isOldfNoTabForInd()).append('\n');
-        buffer.append("         .oldfNoSpaceRaiseLower     = ").append(isOldfNoSpaceRaiseLower()).append('\n');
-        buffer.append("         .oldfSuppressSpbfAfterPageBreak     = ").append(isOldfSuppressSpbfAfterPageBreak()).append('\n');
-        buffer.append("         .oldfWrapTrailSpaces      = ").append(isOldfWrapTrailSpaces()).append('\n');
-        buffer.append("         .oldfMapPrintTextColor     = ").append(isOldfMapPrintTextColor()).append('\n');
-        buffer.append("         .oldfNoColumnBalance      = ").append(isOldfNoColumnBalance()).append('\n');
-        buffer.append("         .oldfConvMailMergeEsc     = ").append(isOldfConvMailMergeEsc()).append('\n');
-        buffer.append("         .oldfSupressTopSpacing     = ").append(isOldfSupressTopSpacing()).append('\n');
-        buffer.append("         .oldfOrigWordTableRules     = ").append(isOldfOrigWordTableRules()).append('\n');
-        buffer.append("         .oldfTransparentMetafiles     = ").append(isOldfTransparentMetafiles()).append('\n');
-        buffer.append("         .oldfShowBreaksInFrames     = ").append(isOldfShowBreaksInFrames()).append('\n');
-        buffer.append("         .oldfSwapBordersFacingPgs     = ").append(isOldfSwapBordersFacingPgs()).append('\n');
-        buffer.append("         .unused5                  = ").append(getUnused5()).append('\n');
-
-        buffer.append("    .dxaTab               = ");
-        buffer.append(" (").append(getDxaTab()).append(" )\n");
-
-        buffer.append("    .wSpare               = ");
-        buffer.append(" (").append(getWSpare()).append(" )\n");
-
-        buffer.append("    .dxaHotz              = ");
-        buffer.append(" (").append(getDxaHotz()).append(" )\n");
-
-        buffer.append("    .cConsexHypLim        = ");
-        buffer.append(" (").append(getCConsexHypLim()).append(" )\n");
-
-        buffer.append("    .wSpare2              = ");
-        buffer.append(" (").append(getWSpare2()).append(" )\n");
-
-        buffer.append("    .dttmCreated          = ");
-        buffer.append(" (").append(getDttmCreated()).append(" )\n");
-
-        buffer.append("    .dttmRevised          = ");
-        buffer.append(" (").append(getDttmRevised()).append(" )\n");
-
-        buffer.append("    .dttmLastPrint        = ");
-        buffer.append(" (").append(getDttmLastPrint()).append(" )\n");
-
-        buffer.append("    .nRevision            = ");
-        buffer.append(" (").append(getNRevision()).append(" )\n");
-
-        buffer.append("    .tmEdited             = ");
-        buffer.append(" (").append(getTmEdited()).append(" )\n");
-
-        buffer.append("    .cWords               = ");
-        buffer.append(" (").append(getCWords()).append(" )\n");
-
-        buffer.append("    .cCh                  = ");
-        buffer.append(" (").append(getCCh()).append(" )\n");
-
-        buffer.append("    .cPg                  = ");
-        buffer.append(" (").append(getCPg()).append(" )\n");
-
-        buffer.append("    .cParas               = ");
-        buffer.append(" (").append(getCParas()).append(" )\n");
-
-        buffer.append("    .Edn                  = ");
-        buffer.append(" (").append(getEdn()).append(" )\n");
-        buffer.append("         .rncEdn                   = ").append(getRncEdn()).append('\n');
-        buffer.append("         .nEdn                     = ").append(getNEdn()).append('\n');
-
-        buffer.append("    .Edn1                 = ");
-        buffer.append(" (").append(getEdn1()).append(" )\n");
-        buffer.append("         .epc                      = ").append(getEpc()).append('\n');
-        buffer.append("         .nfcFtnRef1               = ").append(getNfcFtnRef1()).append('\n');
-        buffer.append("         .nfcEdnRef1               = ").append(getNfcEdnRef1()).append('\n');
-        buffer.append("         .fPrintFormData           = ").append(isFPrintFormData()).append('\n');
-        buffer.append("         .fSaveFormData            = ").append(isFSaveFormData()).append('\n');
-        buffer.append("         .fShadeFormData           = ").append(isFShadeFormData()).append('\n');
-        buffer.append("         .fWCFtnEdn                = ").append(isFWCFtnEdn()).append('\n');
-
-        buffer.append("    .cLines               = ");
-        buffer.append(" (").append(getCLines()).append(" )\n");
-
-        buffer.append("    .cWordsFtnEnd         = ");
-        buffer.append(" (").append(getCWordsFtnEnd()).append(" )\n");
-
-        buffer.append("    .cChFtnEdn            = ");
-        buffer.append(" (").append(getCChFtnEdn()).append(" )\n");
-
-        buffer.append("    .cPgFtnEdn            = ");
-        buffer.append(" (").append(getCPgFtnEdn()).append(" )\n");
-
-        buffer.append("    .cParasFtnEdn         = ");
-        buffer.append(" (").append(getCParasFtnEdn()).append(" )\n");
-
-        buffer.append("    .cLinesFtnEdn         = ");
-        buffer.append(" (").append(getCLinesFtnEdn()).append(" )\n");
-
-        buffer.append("    .lKeyProtDoc          = ");
-        buffer.append(" (").append(getLKeyProtDoc()).append(" )\n");
-
-        buffer.append("    .view                 = ");
-        buffer.append(" (").append(getView()).append(" )\n");
-        buffer.append("         .wvkSaved                 = ").append(getWvkSaved()).append('\n');
-        buffer.append("         .wScaleSaved              = ").append(getWScaleSaved()).append('\n');
-        buffer.append("         .zkSaved                  = ").append(getZkSaved()).append('\n');
-        buffer.append("         .fRotateFontW6            = ").append(isFRotateFontW6()).append('\n');
-        buffer.append("         .iGutterPos               = ").append(isIGutterPos()).append('\n');
-
-        buffer.append("    .docinfo4             = ");
-        buffer.append(" (").append(getDocinfo4()).append(" )\n");
-        buffer.append("         .fNoTabForInd             = ").append(isFNoTabForInd()).append('\n');
-        buffer.append("         .fNoSpaceRaiseLower       = ").append(isFNoSpaceRaiseLower()).append('\n');
-        buffer.append("         .fSupressSpdfAfterPageBreak     = ").append(isFSupressSpdfAfterPageBreak()).append('\n');
-        buffer.append("         .fWrapTrailSpaces         = ").append(isFWrapTrailSpaces()).append('\n');
-        buffer.append("         .fMapPrintTextColor       = ").append(isFMapPrintTextColor()).append('\n');
-        buffer.append("         .fNoColumnBalance         = ").append(isFNoColumnBalance()).append('\n');
-        buffer.append("         .fConvMailMergeEsc        = ").append(isFConvMailMergeEsc()).append('\n');
-        buffer.append("         .fSupressTopSpacing       = ").append(isFSupressTopSpacing()).append('\n');
-        buffer.append("         .fOrigWordTableRules      = ").append(isFOrigWordTableRules()).append('\n');
-        buffer.append("         .fTransparentMetafiles     = ").append(isFTransparentMetafiles()).append('\n');
-        buffer.append("         .fShowBreaksInFrames      = ").append(isFShowBreaksInFrames()).append('\n');
-        buffer.append("         .fSwapBordersFacingPgs     = ").append(isFSwapBordersFacingPgs()).append('\n');
-        buffer.append("         .fSuppressTopSPacingMac5     = ").append(isFSuppressTopSPacingMac5()).append('\n');
-        buffer.append("         .fTruncDxaExpand          = ").append(isFTruncDxaExpand()).append('\n');
-        buffer.append("         .fPrintBodyBeforeHdr      = ").append(isFPrintBodyBeforeHdr()).append('\n');
-        buffer.append("         .fNoLeading               = ").append(isFNoLeading()).append('\n');
-        buffer.append("         .fMWSmallCaps             = ").append(isFMWSmallCaps()).append('\n');
-
-        buffer.append("    .adt                  = ");
-        buffer.append(" (").append(getAdt()).append(" )\n");
-
-        buffer.append("    .doptypography        = ");
-        buffer.append(" (").append(getDoptypography()).append(" )\n");
-
-        buffer.append("    .dogrid               = ");
-        buffer.append(" (").append(getDogrid()).append(" )\n");
-
-        buffer.append("    .docinfo5             = ");
-        buffer.append(" (").append(getDocinfo5()).append(" )\n");
-        buffer.append("         .lvl                      = ").append(getLvl()).append('\n');
-        buffer.append("         .fGramAllDone             = ").append(isFGramAllDone()).append('\n');
-        buffer.append("         .fGramAllClean            = ").append(isFGramAllClean()).append('\n');
-        buffer.append("         .fSubsetFonts             = ").append(isFSubsetFonts()).append('\n');
-        buffer.append("         .fHideLastVersion         = ").append(isFHideLastVersion()).append('\n');
-        buffer.append("         .fHtmlDoc                 = ").append(isFHtmlDoc()).append('\n');
-        buffer.append("         .fSnapBorder              = ").append(isFSnapBorder()).append('\n');
-        buffer.append("         .fIncludeHeader           = ").append(isFIncludeHeader()).append('\n');
-        buffer.append("         .fIncludeFooter           = ").append(isFIncludeFooter()).append('\n');
-        buffer.append("         .fForcePageSizePag        = ").append(isFForcePageSizePag()).append('\n');
-        buffer.append("         .fMinFontSizePag          = ").append(isFMinFontSizePag()).append('\n');
-
-        buffer.append("    .docinfo6             = ");
-        buffer.append(" (").append(getDocinfo6()).append(" )\n");
-        buffer.append("         .fHaveVersions            = ").append(isFHaveVersions()).append('\n');
-        buffer.append("         .fAutoVersions            = ").append(isFAutoVersions()).append('\n');
-
-        buffer.append("    .asumyi               = ");
-        buffer.append(" (").append(getAsumyi()).append(" )\n");
-
-        buffer.append("    .cChWS                = ");
-        buffer.append(" (").append(getCChWS()).append(" )\n");
-
-        buffer.append("    .cChWSFtnEdn          = ");
-        buffer.append(" (").append(getCChWSFtnEdn()).append(" )\n");
-
-        buffer.append("    .grfDocEvents         = ");
-        buffer.append(" (").append(getGrfDocEvents()).append(" )\n");
-
-        buffer.append("    .virusinfo            = ");
-        buffer.append(" (").append(getVirusinfo()).append(" )\n");
-        buffer.append("         .fVirusPrompted           = ").append(isFVirusPrompted()).append('\n');
-        buffer.append("         .fVirusLoadSafe           = ").append(isFVirusLoadSafe()).append('\n');
-        buffer.append("         .KeyVirusSession30        = ").append(getKeyVirusSession30()).append('\n');
-
-        buffer.append("    .Spare                = ");
-        buffer.append(" (").append(getSpare()).append(" )\n");
-
-        buffer.append("    .reserved1            = ");
-        buffer.append(" (").append(getReserved1()).append(" )\n");
-
-        buffer.append("    .reserved2            = ");
-        buffer.append(" (").append(getReserved2()).append(" )\n");
-
-        buffer.append("    .cDBC                 = ");
-        buffer.append(" (").append(getCDBC()).append(" )\n");
-
-        buffer.append("    .cDBCFtnEdn           = ");
-        buffer.append(" (").append(getCDBCFtnEdn()).append(" )\n");
-
-        buffer.append("    .reserved             = ");
-        buffer.append(" (").append(getReserved()).append(" )\n");
-
-        buffer.append("    .nfcFtnRef            = ");
-        buffer.append(" (").append(getNfcFtnRef()).append(" )\n");
-
-        buffer.append("    .nfcEdnRef            = ");
-        buffer.append(" (").append(getNfcEdnRef()).append(" )\n");
-
-        buffer.append("    .hpsZoonFontPag       = ");
-        buffer.append(" (").append(getHpsZoonFontPag()).append(" )\n");
-
-        buffer.append("    .dywDispPag           = ");
-        buffer.append(" (").append(getDywDispPag()).append(" )\n");
-
-        buffer.append("[/DOP]\n");
-        return buffer.toString();
+        LittleEndian.putShort(data, 0x1ec + offset, (short)field_50_nfcFtnRef);
+        LittleEndian.putShort(data, 0x1ee + offset, (short)field_51_nfcEdnRef);
+        LittleEndian.putShort(data, 0x1f0 + offset, (short)field_52_hpsZoonFontPag);
+        LittleEndian.putShort(data, 0x1f2 + offset, (short)field_53_dywDispPag);
     }
 
     /**
-     * Size of record (exluding 4 byte header)
+     * Size of record
      */
-    public int getSize()
+    public static int getSize()
     {
-        return 4 +  + 1 + 1 + 2 + 1 + 1 + 1 + 1 + 2 + 2 + 2 + 2 + 2 + 2 + 4 + 4 + 4 + 2 + 4 + 4 + 4 + 2 + 4 + 2 + 2 + 4 + 4 + 4 + 2 + 4 + 4 + 4 + 2 + 4 + 2 + 310 + 10 + 2 + 2 + 12 + 4 + 4 + 4 + 4 + 30 + 4 + 4 + 4 + 4 + 4 + 2 + 2 + 2 + 2;
+        return 0 + 1 + 1 + 2 + 1 + 1 + 1 + 1 + 2 + 2 + 2 + 2 + 2 + 2 + 4 + 4 + 4 + 2 + 4 + 4 + 4 + 2 + 4 + 2 + 2 + 4 + 4 + 4 + 2 + 4 + 4 + 4 + 2 + 4 + 2 + 310 + 10 + 2 + 2 + 12 + 4 + 4 + 4 + 4 + 30 + 4 + 4 + 4 + 4 + 4 + 2 + 2 + 2 + 2;
     }
 
-
+    public String toString()
+    {
+        StringBuilder builder = new StringBuilder();
+        builder.append("[DOP]\n");
+        builder.append("    .formatFlags          = ");
+        builder.append(" (").append(getFormatFlags()).append(" )\n");
+        builder.append("         .fFacingPages             = ").append(isFFacingPages()).append('\n');
+        builder.append("         .fWidowControl            = ").append(isFWidowControl()).append('\n');
+        builder.append("         .fPMHMainDoc              = ").append(isFPMHMainDoc()).append('\n');
+        builder.append("         .grfSupression            = ").append(getGrfSupression()).append('\n');
+        builder.append("         .fpc                      = ").append(getFpc()).append('\n');
+        builder.append("         .unused1                  = ").append(isUnused1()).append('\n');
+        builder.append("    .unused2              = ");
+        builder.append(" (").append(getUnused2()).append(" )\n");
+        builder.append("    .footnoteInfo         = ");
+        builder.append(" (").append(getFootnoteInfo()).append(" )\n");
+        builder.append("         .rncFtn                   = ").append(getRncFtn()).append('\n');
+        builder.append("         .nFtn                     = ").append(getNFtn()).append('\n');
+        builder.append("    .fOutlineDirtySave    = ");
+        builder.append(" (").append(getFOutlineDirtySave()).append(" )\n");
+        builder.append("    .docinfo              = ");
+        builder.append(" (").append(getDocinfo()).append(" )\n");
+        builder.append("         .fOnlyMacPics             = ").append(isFOnlyMacPics()).append('\n');
+        builder.append("         .fOnlyWinPics             = ").append(isFOnlyWinPics()).append('\n');
+        builder.append("         .fLabelDoc                = ").append(isFLabelDoc()).append('\n');
+        builder.append("         .fHyphCapitals            = ").append(isFHyphCapitals()).append('\n');
+        builder.append("         .fAutoHyphen              = ").append(isFAutoHyphen()).append('\n');
+        builder.append("         .fFormNoFields            = ").append(isFFormNoFields()).append('\n');
+        builder.append("         .fLinkStyles              = ").append(isFLinkStyles()).append('\n');
+        builder.append("         .fRevMarking              = ").append(isFRevMarking()).append('\n');
+        builder.append("    .docinfo1             = ");
+        builder.append(" (").append(getDocinfo1()).append(" )\n");
+        builder.append("         .fBackup                  = ").append(isFBackup()).append('\n');
+        builder.append("         .fExactCWords             = ").append(isFExactCWords()).append('\n');
+        builder.append("         .fPagHidden               = ").append(isFPagHidden()).append('\n');
+        builder.append("         .fPagResults              = ").append(isFPagResults()).append('\n');
+        builder.append("         .fLockAtn                 = ").append(isFLockAtn()).append('\n');
+        builder.append("         .fMirrorMargins           = ").append(isFMirrorMargins()).append('\n');
+        builder.append("         .unused3                  = ").append(isUnused3()).append('\n');
+        builder.append("         .fDfltTrueType            = ").append(isFDfltTrueType()).append('\n');
+        builder.append("    .docinfo2             = ");
+        builder.append(" (").append(getDocinfo2()).append(" )\n");
+        builder.append("         .fPagSupressTopSpacing     = ").append(isFPagSupressTopSpacing()).append('\n');
+        builder.append("         .fProtEnabled             = ").append(isFProtEnabled()).append('\n');
+        builder.append("         .fDispFormFldSel          = ").append(isFDispFormFldSel()).append('\n');
+        builder.append("         .fRMView                  = ").append(isFRMView()).append('\n');
+        builder.append("         .fRMPrint                 = ").append(isFRMPrint()).append('\n');
+        builder.append("         .unused4                  = ").append(isUnused4()).append('\n');
+        builder.append("         .fLockRev                 = ").append(isFLockRev()).append('\n');
+        builder.append("         .fEmbedFonts              = ").append(isFEmbedFonts()).append('\n');
+        builder.append("    .docinfo3             = ");
+        builder.append(" (").append(getDocinfo3()).append(" )\n");
+        builder.append("         .oldfNoTabForInd          = ").append(isOldfNoTabForInd()).append('\n');
+        builder.append("         .oldfNoSpaceRaiseLower     = ").append(isOldfNoSpaceRaiseLower()).append('\n');
+        builder.append("         .oldfSuppressSpbfAfterPageBreak     = ").append(isOldfSuppressSpbfAfterPageBreak()).append('\n');
+        builder.append("         .oldfWrapTrailSpaces      = ").append(isOldfWrapTrailSpaces()).append('\n');
+        builder.append("         .oldfMapPrintTextColor     = ").append(isOldfMapPrintTextColor()).append('\n');
+        builder.append("         .oldfNoColumnBalance      = ").append(isOldfNoColumnBalance()).append('\n');
+        builder.append("         .oldfConvMailMergeEsc     = ").append(isOldfConvMailMergeEsc()).append('\n');
+        builder.append("         .oldfSupressTopSpacing     = ").append(isOldfSupressTopSpacing()).append('\n');
+        builder.append("         .oldfOrigWordTableRules     = ").append(isOldfOrigWordTableRules()).append('\n');
+        builder.append("         .oldfTransparentMetafiles     = ").append(isOldfTransparentMetafiles()).append('\n');
+        builder.append("         .oldfShowBreaksInFrames     = ").append(isOldfShowBreaksInFrames()).append('\n');
+        builder.append("         .oldfSwapBordersFacingPgs     = ").append(isOldfSwapBordersFacingPgs()).append('\n');
+        builder.append("         .unused5                  = ").append(getUnused5()).append('\n');
+        builder.append("    .dxaTab               = ");
+        builder.append(" (").append(getDxaTab()).append(" )\n");
+        builder.append("    .wSpare               = ");
+        builder.append(" (").append(getWSpare()).append(" )\n");
+        builder.append("    .dxaHotz              = ");
+        builder.append(" (").append(getDxaHotz()).append(" )\n");
+        builder.append("    .cConsexHypLim        = ");
+        builder.append(" (").append(getCConsexHypLim()).append(" )\n");
+        builder.append("    .wSpare2              = ");
+        builder.append(" (").append(getWSpare2()).append(" )\n");
+        builder.append("    .dttmCreated          = ");
+        builder.append(" (").append(getDttmCreated()).append(" )\n");
+        builder.append("    .dttmRevised          = ");
+        builder.append(" (").append(getDttmRevised()).append(" )\n");
+        builder.append("    .dttmLastPrint        = ");
+        builder.append(" (").append(getDttmLastPrint()).append(" )\n");
+        builder.append("    .nRevision            = ");
+        builder.append(" (").append(getNRevision()).append(" )\n");
+        builder.append("    .tmEdited             = ");
+        builder.append(" (").append(getTmEdited()).append(" )\n");
+        builder.append("    .cWords               = ");
+        builder.append(" (").append(getCWords()).append(" )\n");
+        builder.append("    .cCh                  = ");
+        builder.append(" (").append(getCCh()).append(" )\n");
+        builder.append("    .cPg                  = ");
+        builder.append(" (").append(getCPg()).append(" )\n");
+        builder.append("    .cParas               = ");
+        builder.append(" (").append(getCParas()).append(" )\n");
+        builder.append("    .Edn                  = ");
+        builder.append(" (").append(getEdn()).append(" )\n");
+        builder.append("         .rncEdn                   = ").append(getRncEdn()).append('\n');
+        builder.append("         .nEdn                     = ").append(getNEdn()).append('\n');
+        builder.append("    .Edn1                 = ");
+        builder.append(" (").append(getEdn1()).append(" )\n");
+        builder.append("         .epc                      = ").append(getEpc()).append('\n');
+        builder.append("         .nfcFtnRef1               = ").append(getNfcFtnRef1()).append('\n');
+        builder.append("         .nfcEdnRef1               = ").append(getNfcEdnRef1()).append('\n');
+        builder.append("         .fPrintFormData           = ").append(isFPrintFormData()).append('\n');
+        builder.append("         .fSaveFormData            = ").append(isFSaveFormData()).append('\n');
+        builder.append("         .fShadeFormData           = ").append(isFShadeFormData()).append('\n');
+        builder.append("         .fWCFtnEdn                = ").append(isFWCFtnEdn()).append('\n');
+        builder.append("    .cLines               = ");
+        builder.append(" (").append(getCLines()).append(" )\n");
+        builder.append("    .cWordsFtnEnd         = ");
+        builder.append(" (").append(getCWordsFtnEnd()).append(" )\n");
+        builder.append("    .cChFtnEdn            = ");
+        builder.append(" (").append(getCChFtnEdn()).append(" )\n");
+        builder.append("    .cPgFtnEdn            = ");
+        builder.append(" (").append(getCPgFtnEdn()).append(" )\n");
+        builder.append("    .cParasFtnEdn         = ");
+        builder.append(" (").append(getCParasFtnEdn()).append(" )\n");
+        builder.append("    .cLinesFtnEdn         = ");
+        builder.append(" (").append(getCLinesFtnEdn()).append(" )\n");
+        builder.append("    .lKeyProtDoc          = ");
+        builder.append(" (").append(getLKeyProtDoc()).append(" )\n");
+        builder.append("    .view                 = ");
+        builder.append(" (").append(getView()).append(" )\n");
+        builder.append("         .wvkSaved                 = ").append(getWvkSaved()).append('\n');
+        builder.append("         .wScaleSaved              = ").append(getWScaleSaved()).append('\n');
+        builder.append("         .zkSaved                  = ").append(getZkSaved()).append('\n');
+        builder.append("         .fRotateFontW6            = ").append(isFRotateFontW6()).append('\n');
+        builder.append("         .iGutterPos               = ").append(isIGutterPos()).append('\n');
+        builder.append("    .docinfo4             = ");
+        builder.append(" (").append(getDocinfo4()).append(" )\n");
+        builder.append("         .fNoTabForInd             = ").append(isFNoTabForInd()).append('\n');
+        builder.append("         .fNoSpaceRaiseLower       = ").append(isFNoSpaceRaiseLower()).append('\n');
+        builder.append("         .fSupressSpdfAfterPageBreak     = ").append(isFSupressSpdfAfterPageBreak()).append('\n');
+        builder.append("         .fWrapTrailSpaces         = ").append(isFWrapTrailSpaces()).append('\n');
+        builder.append("         .fMapPrintTextColor       = ").append(isFMapPrintTextColor()).append('\n');
+        builder.append("         .fNoColumnBalance         = ").append(isFNoColumnBalance()).append('\n');
+        builder.append("         .fConvMailMergeEsc        = ").append(isFConvMailMergeEsc()).append('\n');
+        builder.append("         .fSupressTopSpacing       = ").append(isFSupressTopSpacing()).append('\n');
+        builder.append("         .fOrigWordTableRules      = ").append(isFOrigWordTableRules()).append('\n');
+        builder.append("         .fTransparentMetafiles     = ").append(isFTransparentMetafiles()).append('\n');
+        builder.append("         .fShowBreaksInFrames      = ").append(isFShowBreaksInFrames()).append('\n');
+        builder.append("         .fSwapBordersFacingPgs     = ").append(isFSwapBordersFacingPgs()).append('\n');
+        builder.append("         .fSuppressTopSPacingMac5     = ").append(isFSuppressTopSPacingMac5()).append('\n');
+        builder.append("         .fTruncDxaExpand          = ").append(isFTruncDxaExpand()).append('\n');
+        builder.append("         .fPrintBodyBeforeHdr      = ").append(isFPrintBodyBeforeHdr()).append('\n');
+        builder.append("         .fNoLeading               = ").append(isFNoLeading()).append('\n');
+        builder.append("         .fMWSmallCaps             = ").append(isFMWSmallCaps()).append('\n');
+        builder.append("    .adt                  = ");
+        builder.append(" (").append(getAdt()).append(" )\n");
+        builder.append("    .doptypography        = ");
+        builder.append(" (").append(getDoptypography()).append(" )\n");
+        builder.append("    .dogrid               = ");
+        builder.append(" (").append(getDogrid()).append(" )\n");
+        builder.append("    .docinfo5             = ");
+        builder.append(" (").append(getDocinfo5()).append(" )\n");
+        builder.append("         .lvl                      = ").append(getLvl()).append('\n');
+        builder.append("         .fGramAllDone             = ").append(isFGramAllDone()).append('\n');
+        builder.append("         .fGramAllClean            = ").append(isFGramAllClean()).append('\n');
+        builder.append("         .fSubsetFonts             = ").append(isFSubsetFonts()).append('\n');
+        builder.append("         .fHideLastVersion         = ").append(isFHideLastVersion()).append('\n');
+        builder.append("         .fHtmlDoc                 = ").append(isFHtmlDoc()).append('\n');
+        builder.append("         .fSnapBorder              = ").append(isFSnapBorder()).append('\n');
+        builder.append("         .fIncludeHeader           = ").append(isFIncludeHeader()).append('\n');
+        builder.append("         .fIncludeFooter           = ").append(isFIncludeFooter()).append('\n');
+        builder.append("         .fForcePageSizePag        = ").append(isFForcePageSizePag()).append('\n');
+        builder.append("         .fMinFontSizePag          = ").append(isFMinFontSizePag()).append('\n');
+        builder.append("    .docinfo6             = ");
+        builder.append(" (").append(getDocinfo6()).append(" )\n");
+        builder.append("         .fHaveVersions            = ").append(isFHaveVersions()).append('\n');
+        builder.append("         .fAutoVersions            = ").append(isFAutoVersions()).append('\n');
+        builder.append("    .asumyi               = ");
+        builder.append(" (").append(getAsumyi()).append(" )\n");
+        builder.append("    .cChWS                = ");
+        builder.append(" (").append(getCChWS()).append(" )\n");
+        builder.append("    .cChWSFtnEdn          = ");
+        builder.append(" (").append(getCChWSFtnEdn()).append(" )\n");
+        builder.append("    .grfDocEvents         = ");
+        builder.append(" (").append(getGrfDocEvents()).append(" )\n");
+        builder.append("    .virusinfo            = ");
+        builder.append(" (").append(getVirusinfo()).append(" )\n");
+        builder.append("         .fVirusPrompted           = ").append(isFVirusPrompted()).append('\n');
+        builder.append("         .fVirusLoadSafe           = ").append(isFVirusLoadSafe()).append('\n');
+        builder.append("         .KeyVirusSession30        = ").append(getKeyVirusSession30()).append('\n');
+        builder.append("    .Spare                = ");
+        builder.append(" (").append(getSpare()).append(" )\n");
+        builder.append("    .reserved1            = ");
+        builder.append(" (").append(getReserved1()).append(" )\n");
+        builder.append("    .reserved2            = ");
+        builder.append(" (").append(getReserved2()).append(" )\n");
+        builder.append("    .cDBC                 = ");
+        builder.append(" (").append(getCDBC()).append(" )\n");
+        builder.append("    .cDBCFtnEdn           = ");
+        builder.append(" (").append(getCDBCFtnEdn()).append(" )\n");
+        builder.append("    .reserved             = ");
+        builder.append(" (").append(getReserved()).append(" )\n");
+        builder.append("    .nfcFtnRef            = ");
+        builder.append(" (").append(getNfcFtnRef()).append(" )\n");
+        builder.append("    .nfcEdnRef            = ");
+        builder.append(" (").append(getNfcEdnRef()).append(" )\n");
+        builder.append("    .hpsZoonFontPag       = ");
+        builder.append(" (").append(getHpsZoonFontPag()).append(" )\n");
+        builder.append("    .dywDispPag           = ");
+        builder.append(" (").append(getDywDispPag()).append(" )\n");
+
+        builder.append("[/DOP]\n");
+        return builder.toString();
+    }
 
     /**
      * Get the formatFlags field for the DOP record.
      */
+    @Internal
     public byte getFormatFlags()
     {
         return field_1_formatFlags;
@@ -582,7 +529,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the formatFlags field for the DOP record.
      */
-    public void setFormatFlags(byte field_1_formatFlags)
+    @Internal
+    public void setFormatFlags( byte field_1_formatFlags )
     {
         this.field_1_formatFlags = field_1_formatFlags;
     }
@@ -590,6 +538,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the unused2 field for the DOP record.
      */
+    @Internal
     public byte getUnused2()
     {
         return field_2_unused2;
@@ -598,7 +547,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the unused2 field for the DOP record.
      */
-    public void setUnused2(byte field_2_unused2)
+    @Internal
+    public void setUnused2( byte field_2_unused2 )
     {
         this.field_2_unused2 = field_2_unused2;
     }
@@ -606,6 +556,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the footnoteInfo field for the DOP record.
      */
+    @Internal
     public short getFootnoteInfo()
     {
         return field_3_footnoteInfo;
@@ -614,7 +565,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the footnoteInfo field for the DOP record.
      */
-    public void setFootnoteInfo(short field_3_footnoteInfo)
+    @Internal
+    public void setFootnoteInfo( short field_3_footnoteInfo )
     {
         this.field_3_footnoteInfo = field_3_footnoteInfo;
     }
@@ -622,6 +574,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the fOutlineDirtySave field for the DOP record.
      */
+    @Internal
     public byte getFOutlineDirtySave()
     {
         return field_4_fOutlineDirtySave;
@@ -630,7 +583,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the fOutlineDirtySave field for the DOP record.
      */
-    public void setFOutlineDirtySave(byte field_4_fOutlineDirtySave)
+    @Internal
+    public void setFOutlineDirtySave( byte field_4_fOutlineDirtySave )
     {
         this.field_4_fOutlineDirtySave = field_4_fOutlineDirtySave;
     }
@@ -638,6 +592,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the docinfo field for the DOP record.
      */
+    @Internal
     public byte getDocinfo()
     {
         return field_5_docinfo;
@@ -646,7 +601,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the docinfo field for the DOP record.
      */
-    public void setDocinfo(byte field_5_docinfo)
+    @Internal
+    public void setDocinfo( byte field_5_docinfo )
     {
         this.field_5_docinfo = field_5_docinfo;
     }
@@ -654,6 +610,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the docinfo1 field for the DOP record.
      */
+    @Internal
     public byte getDocinfo1()
     {
         return field_6_docinfo1;
@@ -662,7 +619,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the docinfo1 field for the DOP record.
      */
-    public void setDocinfo1(byte field_6_docinfo1)
+    @Internal
+    public void setDocinfo1( byte field_6_docinfo1 )
     {
         this.field_6_docinfo1 = field_6_docinfo1;
     }
@@ -670,6 +628,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the docinfo2 field for the DOP record.
      */
+    @Internal
     public byte getDocinfo2()
     {
         return field_7_docinfo2;
@@ -678,7 +637,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the docinfo2 field for the DOP record.
      */
-    public void setDocinfo2(byte field_7_docinfo2)
+    @Internal
+    public void setDocinfo2( byte field_7_docinfo2 )
     {
         this.field_7_docinfo2 = field_7_docinfo2;
     }
@@ -686,6 +646,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the docinfo3 field for the DOP record.
      */
+    @Internal
     public short getDocinfo3()
     {
         return field_8_docinfo3;
@@ -694,7 +655,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the docinfo3 field for the DOP record.
      */
-    public void setDocinfo3(short field_8_docinfo3)
+    @Internal
+    public void setDocinfo3( short field_8_docinfo3 )
     {
         this.field_8_docinfo3 = field_8_docinfo3;
     }
@@ -702,6 +664,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the dxaTab field for the DOP record.
      */
+    @Internal
     public int getDxaTab()
     {
         return field_9_dxaTab;
@@ -710,7 +673,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the dxaTab field for the DOP record.
      */
-    public void setDxaTab(int field_9_dxaTab)
+    @Internal
+    public void setDxaTab( int field_9_dxaTab )
     {
         this.field_9_dxaTab = field_9_dxaTab;
     }
@@ -718,6 +682,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the wSpare field for the DOP record.
      */
+    @Internal
     public int getWSpare()
     {
         return field_10_wSpare;
@@ -726,7 +691,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the wSpare field for the DOP record.
      */
-    public void setWSpare(int field_10_wSpare)
+    @Internal
+    public void setWSpare( int field_10_wSpare )
     {
         this.field_10_wSpare = field_10_wSpare;
     }
@@ -734,6 +700,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the dxaHotz field for the DOP record.
      */
+    @Internal
     public int getDxaHotz()
     {
         return field_11_dxaHotz;
@@ -742,7 +709,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the dxaHotz field for the DOP record.
      */
-    public void setDxaHotz(int field_11_dxaHotz)
+    @Internal
+    public void setDxaHotz( int field_11_dxaHotz )
     {
         this.field_11_dxaHotz = field_11_dxaHotz;
     }
@@ -750,6 +718,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the cConsexHypLim field for the DOP record.
      */
+    @Internal
     public int getCConsexHypLim()
     {
         return field_12_cConsexHypLim;
@@ -758,7 +727,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the cConsexHypLim field for the DOP record.
      */
-    public void setCConsexHypLim(int field_12_cConsexHypLim)
+    @Internal
+    public void setCConsexHypLim( int field_12_cConsexHypLim )
     {
         this.field_12_cConsexHypLim = field_12_cConsexHypLim;
     }
@@ -766,6 +736,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the wSpare2 field for the DOP record.
      */
+    @Internal
     public int getWSpare2()
     {
         return field_13_wSpare2;
@@ -774,7 +745,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the wSpare2 field for the DOP record.
      */
-    public void setWSpare2(int field_13_wSpare2)
+    @Internal
+    public void setWSpare2( int field_13_wSpare2 )
     {
         this.field_13_wSpare2 = field_13_wSpare2;
     }
@@ -782,6 +754,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the dttmCreated field for the DOP record.
      */
+    @Internal
     public int getDttmCreated()
     {
         return field_14_dttmCreated;
@@ -790,7 +763,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the dttmCreated field for the DOP record.
      */
-    public void setDttmCreated(int field_14_dttmCreated)
+    @Internal
+    public void setDttmCreated( int field_14_dttmCreated )
     {
         this.field_14_dttmCreated = field_14_dttmCreated;
     }
@@ -798,6 +772,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the dttmRevised field for the DOP record.
      */
+    @Internal
     public int getDttmRevised()
     {
         return field_15_dttmRevised;
@@ -806,7 +781,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the dttmRevised field for the DOP record.
      */
-    public void setDttmRevised(int field_15_dttmRevised)
+    @Internal
+    public void setDttmRevised( int field_15_dttmRevised )
     {
         this.field_15_dttmRevised = field_15_dttmRevised;
     }
@@ -814,6 +790,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the dttmLastPrint field for the DOP record.
      */
+    @Internal
     public int getDttmLastPrint()
     {
         return field_16_dttmLastPrint;
@@ -822,7 +799,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the dttmLastPrint field for the DOP record.
      */
-    public void setDttmLastPrint(int field_16_dttmLastPrint)
+    @Internal
+    public void setDttmLastPrint( int field_16_dttmLastPrint )
     {
         this.field_16_dttmLastPrint = field_16_dttmLastPrint;
     }
@@ -830,6 +808,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the nRevision field for the DOP record.
      */
+    @Internal
     public int getNRevision()
     {
         return field_17_nRevision;
@@ -838,7 +817,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the nRevision field for the DOP record.
      */
-    public void setNRevision(int field_17_nRevision)
+    @Internal
+    public void setNRevision( int field_17_nRevision )
     {
         this.field_17_nRevision = field_17_nRevision;
     }
@@ -846,6 +826,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the tmEdited field for the DOP record.
      */
+    @Internal
     public int getTmEdited()
     {
         return field_18_tmEdited;
@@ -854,7 +835,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the tmEdited field for the DOP record.
      */
-    public void setTmEdited(int field_18_tmEdited)
+    @Internal
+    public void setTmEdited( int field_18_tmEdited )
     {
         this.field_18_tmEdited = field_18_tmEdited;
     }
@@ -862,6 +844,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the cWords field for the DOP record.
      */
+    @Internal
     public int getCWords()
     {
         return field_19_cWords;
@@ -870,7 +853,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the cWords field for the DOP record.
      */
-    public void setCWords(int field_19_cWords)
+    @Internal
+    public void setCWords( int field_19_cWords )
     {
         this.field_19_cWords = field_19_cWords;
     }
@@ -878,6 +862,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the cCh field for the DOP record.
      */
+    @Internal
     public int getCCh()
     {
         return field_20_cCh;
@@ -886,7 +871,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the cCh field for the DOP record.
      */
-    public void setCCh(int field_20_cCh)
+    @Internal
+    public void setCCh( int field_20_cCh )
     {
         this.field_20_cCh = field_20_cCh;
     }
@@ -894,6 +880,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the cPg field for the DOP record.
      */
+    @Internal
     public int getCPg()
     {
         return field_21_cPg;
@@ -902,7 +889,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the cPg field for the DOP record.
      */
-    public void setCPg(int field_21_cPg)
+    @Internal
+    public void setCPg( int field_21_cPg )
     {
         this.field_21_cPg = field_21_cPg;
     }
@@ -910,6 +898,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the cParas field for the DOP record.
      */
+    @Internal
     public int getCParas()
     {
         return field_22_cParas;
@@ -918,7 +907,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the cParas field for the DOP record.
      */
-    public void setCParas(int field_22_cParas)
+    @Internal
+    public void setCParas( int field_22_cParas )
     {
         this.field_22_cParas = field_22_cParas;
     }
@@ -926,6 +916,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the Edn field for the DOP record.
      */
+    @Internal
     public short getEdn()
     {
         return field_23_Edn;
@@ -934,7 +925,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the Edn field for the DOP record.
      */
-    public void setEdn(short field_23_Edn)
+    @Internal
+    public void setEdn( short field_23_Edn )
     {
         this.field_23_Edn = field_23_Edn;
     }
@@ -942,6 +934,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the Edn1 field for the DOP record.
      */
+    @Internal
     public short getEdn1()
     {
         return field_24_Edn1;
@@ -950,7 +943,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the Edn1 field for the DOP record.
      */
-    public void setEdn1(short field_24_Edn1)
+    @Internal
+    public void setEdn1( short field_24_Edn1 )
     {
         this.field_24_Edn1 = field_24_Edn1;
     }
@@ -958,6 +952,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the cLines field for the DOP record.
      */
+    @Internal
     public int getCLines()
     {
         return field_25_cLines;
@@ -966,7 +961,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the cLines field for the DOP record.
      */
-    public void setCLines(int field_25_cLines)
+    @Internal
+    public void setCLines( int field_25_cLines )
     {
         this.field_25_cLines = field_25_cLines;
     }
@@ -974,6 +970,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the cWordsFtnEnd field for the DOP record.
      */
+    @Internal
     public int getCWordsFtnEnd()
     {
         return field_26_cWordsFtnEnd;
@@ -982,7 +979,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the cWordsFtnEnd field for the DOP record.
      */
-    public void setCWordsFtnEnd(int field_26_cWordsFtnEnd)
+    @Internal
+    public void setCWordsFtnEnd( int field_26_cWordsFtnEnd )
     {
         this.field_26_cWordsFtnEnd = field_26_cWordsFtnEnd;
     }
@@ -990,6 +988,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the cChFtnEdn field for the DOP record.
      */
+    @Internal
     public int getCChFtnEdn()
     {
         return field_27_cChFtnEdn;
@@ -998,7 +997,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the cChFtnEdn field for the DOP record.
      */
-    public void setCChFtnEdn(int field_27_cChFtnEdn)
+    @Internal
+    public void setCChFtnEdn( int field_27_cChFtnEdn )
     {
         this.field_27_cChFtnEdn = field_27_cChFtnEdn;
     }
@@ -1006,6 +1006,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the cPgFtnEdn field for the DOP record.
      */
+    @Internal
     public short getCPgFtnEdn()
     {
         return field_28_cPgFtnEdn;
@@ -1014,7 +1015,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the cPgFtnEdn field for the DOP record.
      */
-    public void setCPgFtnEdn(short field_28_cPgFtnEdn)
+    @Internal
+    public void setCPgFtnEdn( short field_28_cPgFtnEdn )
     {
         this.field_28_cPgFtnEdn = field_28_cPgFtnEdn;
     }
@@ -1022,6 +1024,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the cParasFtnEdn field for the DOP record.
      */
+    @Internal
     public int getCParasFtnEdn()
     {
         return field_29_cParasFtnEdn;
@@ -1030,7 +1033,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the cParasFtnEdn field for the DOP record.
      */
-    public void setCParasFtnEdn(int field_29_cParasFtnEdn)
+    @Internal
+    public void setCParasFtnEdn( int field_29_cParasFtnEdn )
     {
         this.field_29_cParasFtnEdn = field_29_cParasFtnEdn;
     }
@@ -1038,6 +1042,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the cLinesFtnEdn field for the DOP record.
      */
+    @Internal
     public int getCLinesFtnEdn()
     {
         return field_30_cLinesFtnEdn;
@@ -1046,7 +1051,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the cLinesFtnEdn field for the DOP record.
      */
-    public void setCLinesFtnEdn(int field_30_cLinesFtnEdn)
+    @Internal
+    public void setCLinesFtnEdn( int field_30_cLinesFtnEdn )
     {
         this.field_30_cLinesFtnEdn = field_30_cLinesFtnEdn;
     }
@@ -1054,6 +1060,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the lKeyProtDoc field for the DOP record.
      */
+    @Internal
     public int getLKeyProtDoc()
     {
         return field_31_lKeyProtDoc;
@@ -1062,7 +1069,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the lKeyProtDoc field for the DOP record.
      */
-    public void setLKeyProtDoc(int field_31_lKeyProtDoc)
+    @Internal
+    public void setLKeyProtDoc( int field_31_lKeyProtDoc )
     {
         this.field_31_lKeyProtDoc = field_31_lKeyProtDoc;
     }
@@ -1070,6 +1078,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the view field for the DOP record.
      */
+    @Internal
     public short getView()
     {
         return field_32_view;
@@ -1078,7 +1087,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the view field for the DOP record.
      */
-    public void setView(short field_32_view)
+    @Internal
+    public void setView( short field_32_view )
     {
         this.field_32_view = field_32_view;
     }
@@ -1086,6 +1096,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the docinfo4 field for the DOP record.
      */
+    @Internal
     public int getDocinfo4()
     {
         return field_33_docinfo4;
@@ -1094,7 +1105,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the docinfo4 field for the DOP record.
      */
-    public void setDocinfo4(int field_33_docinfo4)
+    @Internal
+    public void setDocinfo4( int field_33_docinfo4 )
     {
         this.field_33_docinfo4 = field_33_docinfo4;
     }
@@ -1102,6 +1114,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the adt field for the DOP record.
      */
+    @Internal
     public short getAdt()
     {
         return field_34_adt;
@@ -1110,7 +1123,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the adt field for the DOP record.
      */
-    public void setAdt(short field_34_adt)
+    @Internal
+    public void setAdt( short field_34_adt )
     {
         this.field_34_adt = field_34_adt;
     }
@@ -1118,6 +1132,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the doptypography field for the DOP record.
      */
+    @Internal
     public byte[] getDoptypography()
     {
         return field_35_doptypography;
@@ -1126,7 +1141,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the doptypography field for the DOP record.
      */
-    public void setDoptypography(byte[] field_35_doptypography)
+    @Internal
+    public void setDoptypography( byte[] field_35_doptypography )
     {
         this.field_35_doptypography = field_35_doptypography;
     }
@@ -1134,6 +1150,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the dogrid field for the DOP record.
      */
+    @Internal
     public byte[] getDogrid()
     {
         return field_36_dogrid;
@@ -1142,7 +1159,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the dogrid field for the DOP record.
      */
-    public void setDogrid(byte[] field_36_dogrid)
+    @Internal
+    public void setDogrid( byte[] field_36_dogrid )
     {
         this.field_36_dogrid = field_36_dogrid;
     }
@@ -1150,6 +1168,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the docinfo5 field for the DOP record.
      */
+    @Internal
     public short getDocinfo5()
     {
         return field_37_docinfo5;
@@ -1158,7 +1177,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the docinfo5 field for the DOP record.
      */
-    public void setDocinfo5(short field_37_docinfo5)
+    @Internal
+    public void setDocinfo5( short field_37_docinfo5 )
     {
         this.field_37_docinfo5 = field_37_docinfo5;
     }
@@ -1166,6 +1186,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the docinfo6 field for the DOP record.
      */
+    @Internal
     public short getDocinfo6()
     {
         return field_38_docinfo6;
@@ -1174,7 +1195,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the docinfo6 field for the DOP record.
      */
-    public void setDocinfo6(short field_38_docinfo6)
+    @Internal
+    public void setDocinfo6( short field_38_docinfo6 )
     {
         this.field_38_docinfo6 = field_38_docinfo6;
     }
@@ -1182,6 +1204,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the asumyi field for the DOP record.
      */
+    @Internal
     public byte[] getAsumyi()
     {
         return field_39_asumyi;
@@ -1190,7 +1213,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the asumyi field for the DOP record.
      */
-    public void setAsumyi(byte[] field_39_asumyi)
+    @Internal
+    public void setAsumyi( byte[] field_39_asumyi )
     {
         this.field_39_asumyi = field_39_asumyi;
     }
@@ -1198,6 +1222,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the cChWS field for the DOP record.
      */
+    @Internal
     public int getCChWS()
     {
         return field_40_cChWS;
@@ -1206,7 +1231,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the cChWS field for the DOP record.
      */
-    public void setCChWS(int field_40_cChWS)
+    @Internal
+    public void setCChWS( int field_40_cChWS )
     {
         this.field_40_cChWS = field_40_cChWS;
     }
@@ -1214,6 +1240,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the cChWSFtnEdn field for the DOP record.
      */
+    @Internal
     public int getCChWSFtnEdn()
     {
         return field_41_cChWSFtnEdn;
@@ -1222,7 +1249,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the cChWSFtnEdn field for the DOP record.
      */
-    public void setCChWSFtnEdn(int field_41_cChWSFtnEdn)
+    @Internal
+    public void setCChWSFtnEdn( int field_41_cChWSFtnEdn )
     {
         this.field_41_cChWSFtnEdn = field_41_cChWSFtnEdn;
     }
@@ -1230,6 +1258,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the grfDocEvents field for the DOP record.
      */
+    @Internal
     public int getGrfDocEvents()
     {
         return field_42_grfDocEvents;
@@ -1238,7 +1267,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the grfDocEvents field for the DOP record.
      */
-    public void setGrfDocEvents(int field_42_grfDocEvents)
+    @Internal
+    public void setGrfDocEvents( int field_42_grfDocEvents )
     {
         this.field_42_grfDocEvents = field_42_grfDocEvents;
     }
@@ -1246,6 +1276,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the virusinfo field for the DOP record.
      */
+    @Internal
     public int getVirusinfo()
     {
         return field_43_virusinfo;
@@ -1254,7 +1285,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the virusinfo field for the DOP record.
      */
-    public void setVirusinfo(int field_43_virusinfo)
+    @Internal
+    public void setVirusinfo( int field_43_virusinfo )
     {
         this.field_43_virusinfo = field_43_virusinfo;
     }
@@ -1262,6 +1294,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the Spare field for the DOP record.
      */
+    @Internal
     public byte[] getSpare()
     {
         return field_44_Spare;
@@ -1270,7 +1303,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the Spare field for the DOP record.
      */
-    public void setSpare(byte[] field_44_Spare)
+    @Internal
+    public void setSpare( byte[] field_44_Spare )
     {
         this.field_44_Spare = field_44_Spare;
     }
@@ -1278,6 +1312,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the reserved1 field for the DOP record.
      */
+    @Internal
     public int getReserved1()
     {
         return field_45_reserved1;
@@ -1286,7 +1321,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the reserved1 field for the DOP record.
      */
-    public void setReserved1(int field_45_reserved1)
+    @Internal
+    public void setReserved1( int field_45_reserved1 )
     {
         this.field_45_reserved1 = field_45_reserved1;
     }
@@ -1294,6 +1330,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the reserved2 field for the DOP record.
      */
+    @Internal
     public int getReserved2()
     {
         return field_46_reserved2;
@@ -1302,7 +1339,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the reserved2 field for the DOP record.
      */
-    public void setReserved2(int field_46_reserved2)
+    @Internal
+    public void setReserved2( int field_46_reserved2 )
     {
         this.field_46_reserved2 = field_46_reserved2;
     }
@@ -1310,6 +1348,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the cDBC field for the DOP record.
      */
+    @Internal
     public int getCDBC()
     {
         return field_47_cDBC;
@@ -1318,7 +1357,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the cDBC field for the DOP record.
      */
-    public void setCDBC(int field_47_cDBC)
+    @Internal
+    public void setCDBC( int field_47_cDBC )
     {
         this.field_47_cDBC = field_47_cDBC;
     }
@@ -1326,6 +1366,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the cDBCFtnEdn field for the DOP record.
      */
+    @Internal
     public int getCDBCFtnEdn()
     {
         return field_48_cDBCFtnEdn;
@@ -1334,7 +1375,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the cDBCFtnEdn field for the DOP record.
      */
-    public void setCDBCFtnEdn(int field_48_cDBCFtnEdn)
+    @Internal
+    public void setCDBCFtnEdn( int field_48_cDBCFtnEdn )
     {
         this.field_48_cDBCFtnEdn = field_48_cDBCFtnEdn;
     }
@@ -1342,6 +1384,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the reserved field for the DOP record.
      */
+    @Internal
     public int getReserved()
     {
         return field_49_reserved;
@@ -1350,7 +1393,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the reserved field for the DOP record.
      */
-    public void setReserved(int field_49_reserved)
+    @Internal
+    public void setReserved( int field_49_reserved )
     {
         this.field_49_reserved = field_49_reserved;
     }
@@ -1358,6 +1402,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the nfcFtnRef field for the DOP record.
      */
+    @Internal
     public short getNfcFtnRef()
     {
         return field_50_nfcFtnRef;
@@ -1366,7 +1411,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the nfcFtnRef field for the DOP record.
      */
-    public void setNfcFtnRef(short field_50_nfcFtnRef)
+    @Internal
+    public void setNfcFtnRef( short field_50_nfcFtnRef )
     {
         this.field_50_nfcFtnRef = field_50_nfcFtnRef;
     }
@@ -1374,6 +1420,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the nfcEdnRef field for the DOP record.
      */
+    @Internal
     public short getNfcEdnRef()
     {
         return field_51_nfcEdnRef;
@@ -1382,7 +1429,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the nfcEdnRef field for the DOP record.
      */
-    public void setNfcEdnRef(short field_51_nfcEdnRef)
+    @Internal
+    public void setNfcEdnRef( short field_51_nfcEdnRef )
     {
         this.field_51_nfcEdnRef = field_51_nfcEdnRef;
     }
@@ -1390,6 +1438,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the hpsZoonFontPag field for the DOP record.
      */
+    @Internal
     public short getHpsZoonFontPag()
     {
         return field_52_hpsZoonFontPag;
@@ -1398,7 +1447,8 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the hpsZoonFontPag field for the DOP record.
      */
-    public void setHpsZoonFontPag(short field_52_hpsZoonFontPag)
+    @Internal
+    public void setHpsZoonFontPag( short field_52_hpsZoonFontPag )
     {
         this.field_52_hpsZoonFontPag = field_52_hpsZoonFontPag;
     }
@@ -1406,6 +1456,7 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Get the dywDispPag field for the DOP record.
      */
+    @Internal
     public short getDywDispPag()
     {
         return field_53_dywDispPag;
@@ -1414,24 +1465,27 @@ public abstract class DOPAbstractType implements HDFType {
     /**
      * Set the dywDispPag field for the DOP record.
      */
-    public void setDywDispPag(short field_53_dywDispPag)
+    @Internal
+    public void setDywDispPag( short field_53_dywDispPag )
     {
         this.field_53_dywDispPag = field_53_dywDispPag;
     }
 
     /**
      * Sets the fFacingPages field value.
-     *
+     * 
      */
-    public void setFFacingPages(boolean value)
+    @Internal
+    public void setFFacingPages( boolean value )
     {
         field_1_formatFlags = (byte)fFacingPages.setBoolean(field_1_formatFlags, value);
     }
 
     /**
-     *
+     * 
      * @return  the fFacingPages field value.
      */
+    @Internal
     public boolean isFFacingPages()
     {
         return fFacingPages.isSet(field_1_formatFlags);
@@ -1439,17 +1493,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fWidowControl field value.
-     *
+     * 
      */
-    public void setFWidowControl(boolean value)
+    @Internal
+    public void setFWidowControl( boolean value )
     {
         field_1_formatFlags = (byte)fWidowControl.setBoolean(field_1_formatFlags, value);
     }
 
     /**
-     *
+     * 
      * @return  the fWidowControl field value.
      */
+    @Internal
     public boolean isFWidowControl()
     {
         return fWidowControl.isSet(field_1_formatFlags);
@@ -1457,17 +1513,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fPMHMainDoc field value.
-     *
+     * 
      */
-    public void setFPMHMainDoc(boolean value)
+    @Internal
+    public void setFPMHMainDoc( boolean value )
     {
         field_1_formatFlags = (byte)fPMHMainDoc.setBoolean(field_1_formatFlags, value);
     }
 
     /**
-     *
+     * 
      * @return  the fPMHMainDoc field value.
      */
+    @Internal
     public boolean isFPMHMainDoc()
     {
         return fPMHMainDoc.isSet(field_1_formatFlags);
@@ -1475,17 +1533,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the grfSupression field value.
-     *
+     * 
      */
-    public void setGrfSupression(byte value)
+    @Internal
+    public void setGrfSupression( byte value )
     {
         field_1_formatFlags = (byte)grfSupression.setValue(field_1_formatFlags, value);
     }
 
     /**
-     *
+     * 
      * @return  the grfSupression field value.
      */
+    @Internal
     public byte getGrfSupression()
     {
         return ( byte )grfSupression.getValue(field_1_formatFlags);
@@ -1493,17 +1553,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fpc field value.
-     *
+     * 
      */
-    public void setFpc(byte value)
+    @Internal
+    public void setFpc( byte value )
     {
         field_1_formatFlags = (byte)fpc.setValue(field_1_formatFlags, value);
     }
 
     /**
-     *
+     * 
      * @return  the fpc field value.
      */
+    @Internal
     public byte getFpc()
     {
         return ( byte )fpc.getValue(field_1_formatFlags);
@@ -1511,17 +1573,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the unused1 field value.
-     *
+     * 
      */
-    public void setUnused1(boolean value)
+    @Internal
+    public void setUnused1( boolean value )
     {
         field_1_formatFlags = (byte)unused1.setBoolean(field_1_formatFlags, value);
     }
 
     /**
-     *
+     * 
      * @return  the unused1 field value.
      */
+    @Internal
     public boolean isUnused1()
     {
         return unused1.isSet(field_1_formatFlags);
@@ -1529,17 +1593,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the rncFtn field value.
-     *
+     * 
      */
-    public void setRncFtn(byte value)
+    @Internal
+    public void setRncFtn( byte value )
     {
         field_3_footnoteInfo = (short)rncFtn.setValue(field_3_footnoteInfo, value);
     }
 
     /**
-     *
+     * 
      * @return  the rncFtn field value.
      */
+    @Internal
     public byte getRncFtn()
     {
         return ( byte )rncFtn.getValue(field_3_footnoteInfo);
@@ -1547,17 +1613,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the nFtn field value.
-     *
+     * 
      */
-    public void setNFtn(short value)
+    @Internal
+    public void setNFtn( short value )
     {
         field_3_footnoteInfo = (short)nFtn.setValue(field_3_footnoteInfo, value);
     }
 
     /**
-     *
+     * 
      * @return  the nFtn field value.
      */
+    @Internal
     public short getNFtn()
     {
         return ( short )nFtn.getValue(field_3_footnoteInfo);
@@ -1565,17 +1633,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fOnlyMacPics field value.
-     *
+     * 
      */
-    public void setFOnlyMacPics(boolean value)
+    @Internal
+    public void setFOnlyMacPics( boolean value )
     {
         field_5_docinfo = (byte)fOnlyMacPics.setBoolean(field_5_docinfo, value);
     }
 
     /**
-     *
+     * 
      * @return  the fOnlyMacPics field value.
      */
+    @Internal
     public boolean isFOnlyMacPics()
     {
         return fOnlyMacPics.isSet(field_5_docinfo);
@@ -1583,17 +1653,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fOnlyWinPics field value.
-     *
+     * 
      */
-    public void setFOnlyWinPics(boolean value)
+    @Internal
+    public void setFOnlyWinPics( boolean value )
     {
         field_5_docinfo = (byte)fOnlyWinPics.setBoolean(field_5_docinfo, value);
     }
 
     /**
-     *
+     * 
      * @return  the fOnlyWinPics field value.
      */
+    @Internal
     public boolean isFOnlyWinPics()
     {
         return fOnlyWinPics.isSet(field_5_docinfo);
@@ -1601,17 +1673,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fLabelDoc field value.
-     *
+     * 
      */
-    public void setFLabelDoc(boolean value)
+    @Internal
+    public void setFLabelDoc( boolean value )
     {
         field_5_docinfo = (byte)fLabelDoc.setBoolean(field_5_docinfo, value);
     }
 
     /**
-     *
+     * 
      * @return  the fLabelDoc field value.
      */
+    @Internal
     public boolean isFLabelDoc()
     {
         return fLabelDoc.isSet(field_5_docinfo);
@@ -1619,17 +1693,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fHyphCapitals field value.
-     *
+     * 
      */
-    public void setFHyphCapitals(boolean value)
+    @Internal
+    public void setFHyphCapitals( boolean value )
     {
         field_5_docinfo = (byte)fHyphCapitals.setBoolean(field_5_docinfo, value);
     }
 
     /**
-     *
+     * 
      * @return  the fHyphCapitals field value.
      */
+    @Internal
     public boolean isFHyphCapitals()
     {
         return fHyphCapitals.isSet(field_5_docinfo);
@@ -1637,17 +1713,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fAutoHyphen field value.
-     *
+     * 
      */
-    public void setFAutoHyphen(boolean value)
+    @Internal
+    public void setFAutoHyphen( boolean value )
     {
         field_5_docinfo = (byte)fAutoHyphen.setBoolean(field_5_docinfo, value);
     }
 
     /**
-     *
+     * 
      * @return  the fAutoHyphen field value.
      */
+    @Internal
     public boolean isFAutoHyphen()
     {
         return fAutoHyphen.isSet(field_5_docinfo);
@@ -1655,17 +1733,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fFormNoFields field value.
-     *
+     * 
      */
-    public void setFFormNoFields(boolean value)
+    @Internal
+    public void setFFormNoFields( boolean value )
     {
         field_5_docinfo = (byte)fFormNoFields.setBoolean(field_5_docinfo, value);
     }
 
     /**
-     *
+     * 
      * @return  the fFormNoFields field value.
      */
+    @Internal
     public boolean isFFormNoFields()
     {
         return fFormNoFields.isSet(field_5_docinfo);
@@ -1673,17 +1753,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fLinkStyles field value.
-     *
+     * 
      */
-    public void setFLinkStyles(boolean value)
+    @Internal
+    public void setFLinkStyles( boolean value )
     {
         field_5_docinfo = (byte)fLinkStyles.setBoolean(field_5_docinfo, value);
     }
 
     /**
-     *
+     * 
      * @return  the fLinkStyles field value.
      */
+    @Internal
     public boolean isFLinkStyles()
     {
         return fLinkStyles.isSet(field_5_docinfo);
@@ -1691,17 +1773,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fRevMarking field value.
-     *
+     * 
      */
-    public void setFRevMarking(boolean value)
+    @Internal
+    public void setFRevMarking( boolean value )
     {
         field_5_docinfo = (byte)fRevMarking.setBoolean(field_5_docinfo, value);
     }
 
     /**
-     *
+     * 
      * @return  the fRevMarking field value.
      */
+    @Internal
     public boolean isFRevMarking()
     {
         return fRevMarking.isSet(field_5_docinfo);
@@ -1709,17 +1793,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fBackup field value.
-     *
+     * 
      */
-    public void setFBackup(boolean value)
+    @Internal
+    public void setFBackup( boolean value )
     {
         field_6_docinfo1 = (byte)fBackup.setBoolean(field_6_docinfo1, value);
     }
 
     /**
-     *
+     * 
      * @return  the fBackup field value.
      */
+    @Internal
     public boolean isFBackup()
     {
         return fBackup.isSet(field_6_docinfo1);
@@ -1727,17 +1813,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fExactCWords field value.
-     *
+     * 
      */
-    public void setFExactCWords(boolean value)
+    @Internal
+    public void setFExactCWords( boolean value )
     {
         field_6_docinfo1 = (byte)fExactCWords.setBoolean(field_6_docinfo1, value);
     }
 
     /**
-     *
+     * 
      * @return  the fExactCWords field value.
      */
+    @Internal
     public boolean isFExactCWords()
     {
         return fExactCWords.isSet(field_6_docinfo1);
@@ -1745,17 +1833,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fPagHidden field value.
-     *
+     * 
      */
-    public void setFPagHidden(boolean value)
+    @Internal
+    public void setFPagHidden( boolean value )
     {
         field_6_docinfo1 = (byte)fPagHidden.setBoolean(field_6_docinfo1, value);
     }
 
     /**
-     *
+     * 
      * @return  the fPagHidden field value.
      */
+    @Internal
     public boolean isFPagHidden()
     {
         return fPagHidden.isSet(field_6_docinfo1);
@@ -1763,17 +1853,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fPagResults field value.
-     *
+     * 
      */
-    public void setFPagResults(boolean value)
+    @Internal
+    public void setFPagResults( boolean value )
     {
         field_6_docinfo1 = (byte)fPagResults.setBoolean(field_6_docinfo1, value);
     }
 
     /**
-     *
+     * 
      * @return  the fPagResults field value.
      */
+    @Internal
     public boolean isFPagResults()
     {
         return fPagResults.isSet(field_6_docinfo1);
@@ -1781,17 +1873,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fLockAtn field value.
-     *
+     * 
      */
-    public void setFLockAtn(boolean value)
+    @Internal
+    public void setFLockAtn( boolean value )
     {
         field_6_docinfo1 = (byte)fLockAtn.setBoolean(field_6_docinfo1, value);
     }
 
     /**
-     *
+     * 
      * @return  the fLockAtn field value.
      */
+    @Internal
     public boolean isFLockAtn()
     {
         return fLockAtn.isSet(field_6_docinfo1);
@@ -1799,17 +1893,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fMirrorMargins field value.
-     *
+     * 
      */
-    public void setFMirrorMargins(boolean value)
+    @Internal
+    public void setFMirrorMargins( boolean value )
     {
         field_6_docinfo1 = (byte)fMirrorMargins.setBoolean(field_6_docinfo1, value);
     }
 
     /**
-     *
+     * 
      * @return  the fMirrorMargins field value.
      */
+    @Internal
     public boolean isFMirrorMargins()
     {
         return fMirrorMargins.isSet(field_6_docinfo1);
@@ -1817,17 +1913,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the unused3 field value.
-     *
+     * 
      */
-    public void setUnused3(boolean value)
+    @Internal
+    public void setUnused3( boolean value )
     {
         field_6_docinfo1 = (byte)unused3.setBoolean(field_6_docinfo1, value);
     }
 
     /**
-     *
+     * 
      * @return  the unused3 field value.
      */
+    @Internal
     public boolean isUnused3()
     {
         return unused3.isSet(field_6_docinfo1);
@@ -1835,17 +1933,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fDfltTrueType field value.
-     *
+     * 
      */
-    public void setFDfltTrueType(boolean value)
+    @Internal
+    public void setFDfltTrueType( boolean value )
     {
         field_6_docinfo1 = (byte)fDfltTrueType.setBoolean(field_6_docinfo1, value);
     }
 
     /**
-     *
+     * 
      * @return  the fDfltTrueType field value.
      */
+    @Internal
     public boolean isFDfltTrueType()
     {
         return fDfltTrueType.isSet(field_6_docinfo1);
@@ -1853,17 +1953,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fPagSupressTopSpacing field value.
-     *
+     * 
      */
-    public void setFPagSupressTopSpacing(boolean value)
+    @Internal
+    public void setFPagSupressTopSpacing( boolean value )
     {
         field_7_docinfo2 = (byte)fPagSupressTopSpacing.setBoolean(field_7_docinfo2, value);
     }
 
     /**
-     *
+     * 
      * @return  the fPagSupressTopSpacing field value.
      */
+    @Internal
     public boolean isFPagSupressTopSpacing()
     {
         return fPagSupressTopSpacing.isSet(field_7_docinfo2);
@@ -1871,17 +1973,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fProtEnabled field value.
-     *
+     * 
      */
-    public void setFProtEnabled(boolean value)
+    @Internal
+    public void setFProtEnabled( boolean value )
     {
         field_7_docinfo2 = (byte)fProtEnabled.setBoolean(field_7_docinfo2, value);
     }
 
     /**
-     *
+     * 
      * @return  the fProtEnabled field value.
      */
+    @Internal
     public boolean isFProtEnabled()
     {
         return fProtEnabled.isSet(field_7_docinfo2);
@@ -1889,17 +1993,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fDispFormFldSel field value.
-     *
+     * 
      */
-    public void setFDispFormFldSel(boolean value)
+    @Internal
+    public void setFDispFormFldSel( boolean value )
     {
         field_7_docinfo2 = (byte)fDispFormFldSel.setBoolean(field_7_docinfo2, value);
     }
 
     /**
-     *
+     * 
      * @return  the fDispFormFldSel field value.
      */
+    @Internal
     public boolean isFDispFormFldSel()
     {
         return fDispFormFldSel.isSet(field_7_docinfo2);
@@ -1907,17 +2013,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fRMView field value.
-     *
+     * 
      */
-    public void setFRMView(boolean value)
+    @Internal
+    public void setFRMView( boolean value )
     {
         field_7_docinfo2 = (byte)fRMView.setBoolean(field_7_docinfo2, value);
     }
 
     /**
-     *
+     * 
      * @return  the fRMView field value.
      */
+    @Internal
     public boolean isFRMView()
     {
         return fRMView.isSet(field_7_docinfo2);
@@ -1925,17 +2033,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fRMPrint field value.
-     *
+     * 
      */
-    public void setFRMPrint(boolean value)
+    @Internal
+    public void setFRMPrint( boolean value )
     {
         field_7_docinfo2 = (byte)fRMPrint.setBoolean(field_7_docinfo2, value);
     }
 
     /**
-     *
+     * 
      * @return  the fRMPrint field value.
      */
+    @Internal
     public boolean isFRMPrint()
     {
         return fRMPrint.isSet(field_7_docinfo2);
@@ -1943,17 +2053,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the unused4 field value.
-     *
+     * 
      */
-    public void setUnused4(boolean value)
+    @Internal
+    public void setUnused4( boolean value )
     {
         field_7_docinfo2 = (byte)unused4.setBoolean(field_7_docinfo2, value);
     }
 
     /**
-     *
+     * 
      * @return  the unused4 field value.
      */
+    @Internal
     public boolean isUnused4()
     {
         return unused4.isSet(field_7_docinfo2);
@@ -1961,17 +2073,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fLockRev field value.
-     *
+     * 
      */
-    public void setFLockRev(boolean value)
+    @Internal
+    public void setFLockRev( boolean value )
     {
         field_7_docinfo2 = (byte)fLockRev.setBoolean(field_7_docinfo2, value);
     }
 
     /**
-     *
+     * 
      * @return  the fLockRev field value.
      */
+    @Internal
     public boolean isFLockRev()
     {
         return fLockRev.isSet(field_7_docinfo2);
@@ -1979,17 +2093,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fEmbedFonts field value.
-     *
+     * 
      */
-    public void setFEmbedFonts(boolean value)
+    @Internal
+    public void setFEmbedFonts( boolean value )
     {
         field_7_docinfo2 = (byte)fEmbedFonts.setBoolean(field_7_docinfo2, value);
     }
 
     /**
-     *
+     * 
      * @return  the fEmbedFonts field value.
      */
+    @Internal
     public boolean isFEmbedFonts()
     {
         return fEmbedFonts.isSet(field_7_docinfo2);
@@ -1997,17 +2113,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the oldfNoTabForInd field value.
-     *
+     * 
      */
-    public void setOldfNoTabForInd(boolean value)
+    @Internal
+    public void setOldfNoTabForInd( boolean value )
     {
         field_8_docinfo3 = (short)oldfNoTabForInd.setBoolean(field_8_docinfo3, value);
     }
 
     /**
-     *
+     * 
      * @return  the oldfNoTabForInd field value.
      */
+    @Internal
     public boolean isOldfNoTabForInd()
     {
         return oldfNoTabForInd.isSet(field_8_docinfo3);
@@ -2015,17 +2133,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the oldfNoSpaceRaiseLower field value.
-     *
+     * 
      */
-    public void setOldfNoSpaceRaiseLower(boolean value)
+    @Internal
+    public void setOldfNoSpaceRaiseLower( boolean value )
     {
         field_8_docinfo3 = (short)oldfNoSpaceRaiseLower.setBoolean(field_8_docinfo3, value);
     }
 
     /**
-     *
+     * 
      * @return  the oldfNoSpaceRaiseLower field value.
      */
+    @Internal
     public boolean isOldfNoSpaceRaiseLower()
     {
         return oldfNoSpaceRaiseLower.isSet(field_8_docinfo3);
@@ -2033,17 +2153,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the oldfSuppressSpbfAfterPageBreak field value.
-     *
+     * 
      */
-    public void setOldfSuppressSpbfAfterPageBreak(boolean value)
+    @Internal
+    public void setOldfSuppressSpbfAfterPageBreak( boolean value )
     {
         field_8_docinfo3 = (short)oldfSuppressSpbfAfterPageBreak.setBoolean(field_8_docinfo3, value);
     }
 
     /**
-     *
+     * 
      * @return  the oldfSuppressSpbfAfterPageBreak field value.
      */
+    @Internal
     public boolean isOldfSuppressSpbfAfterPageBreak()
     {
         return oldfSuppressSpbfAfterPageBreak.isSet(field_8_docinfo3);
@@ -2051,17 +2173,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the oldfWrapTrailSpaces field value.
-     *
+     * 
      */
-    public void setOldfWrapTrailSpaces(boolean value)
+    @Internal
+    public void setOldfWrapTrailSpaces( boolean value )
     {
         field_8_docinfo3 = (short)oldfWrapTrailSpaces.setBoolean(field_8_docinfo3, value);
     }
 
     /**
-     *
+     * 
      * @return  the oldfWrapTrailSpaces field value.
      */
+    @Internal
     public boolean isOldfWrapTrailSpaces()
     {
         return oldfWrapTrailSpaces.isSet(field_8_docinfo3);
@@ -2069,17 +2193,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the oldfMapPrintTextColor field value.
-     *
+     * 
      */
-    public void setOldfMapPrintTextColor(boolean value)
+    @Internal
+    public void setOldfMapPrintTextColor( boolean value )
     {
         field_8_docinfo3 = (short)oldfMapPrintTextColor.setBoolean(field_8_docinfo3, value);
     }
 
     /**
-     *
+     * 
      * @return  the oldfMapPrintTextColor field value.
      */
+    @Internal
     public boolean isOldfMapPrintTextColor()
     {
         return oldfMapPrintTextColor.isSet(field_8_docinfo3);
@@ -2087,17 +2213,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the oldfNoColumnBalance field value.
-     *
+     * 
      */
-    public void setOldfNoColumnBalance(boolean value)
+    @Internal
+    public void setOldfNoColumnBalance( boolean value )
     {
         field_8_docinfo3 = (short)oldfNoColumnBalance.setBoolean(field_8_docinfo3, value);
     }
 
     /**
-     *
+     * 
      * @return  the oldfNoColumnBalance field value.
      */
+    @Internal
     public boolean isOldfNoColumnBalance()
     {
         return oldfNoColumnBalance.isSet(field_8_docinfo3);
@@ -2105,17 +2233,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the oldfConvMailMergeEsc field value.
-     *
+     * 
      */
-    public void setOldfConvMailMergeEsc(boolean value)
+    @Internal
+    public void setOldfConvMailMergeEsc( boolean value )
     {
         field_8_docinfo3 = (short)oldfConvMailMergeEsc.setBoolean(field_8_docinfo3, value);
     }
 
     /**
-     *
+     * 
      * @return  the oldfConvMailMergeEsc field value.
      */
+    @Internal
     public boolean isOldfConvMailMergeEsc()
     {
         return oldfConvMailMergeEsc.isSet(field_8_docinfo3);
@@ -2123,17 +2253,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the oldfSupressTopSpacing field value.
-     *
+     * 
      */
-    public void setOldfSupressTopSpacing(boolean value)
+    @Internal
+    public void setOldfSupressTopSpacing( boolean value )
     {
         field_8_docinfo3 = (short)oldfSupressTopSpacing.setBoolean(field_8_docinfo3, value);
     }
 
     /**
-     *
+     * 
      * @return  the oldfSupressTopSpacing field value.
      */
+    @Internal
     public boolean isOldfSupressTopSpacing()
     {
         return oldfSupressTopSpacing.isSet(field_8_docinfo3);
@@ -2141,17 +2273,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the oldfOrigWordTableRules field value.
-     *
+     * 
      */
-    public void setOldfOrigWordTableRules(boolean value)
+    @Internal
+    public void setOldfOrigWordTableRules( boolean value )
     {
         field_8_docinfo3 = (short)oldfOrigWordTableRules.setBoolean(field_8_docinfo3, value);
     }
 
     /**
-     *
+     * 
      * @return  the oldfOrigWordTableRules field value.
      */
+    @Internal
     public boolean isOldfOrigWordTableRules()
     {
         return oldfOrigWordTableRules.isSet(field_8_docinfo3);
@@ -2159,17 +2293,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the oldfTransparentMetafiles field value.
-     *
+     * 
      */
-    public void setOldfTransparentMetafiles(boolean value)
+    @Internal
+    public void setOldfTransparentMetafiles( boolean value )
     {
         field_8_docinfo3 = (short)oldfTransparentMetafiles.setBoolean(field_8_docinfo3, value);
     }
 
     /**
-     *
+     * 
      * @return  the oldfTransparentMetafiles field value.
      */
+    @Internal
     public boolean isOldfTransparentMetafiles()
     {
         return oldfTransparentMetafiles.isSet(field_8_docinfo3);
@@ -2177,17 +2313,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the oldfShowBreaksInFrames field value.
-     *
+     * 
      */
-    public void setOldfShowBreaksInFrames(boolean value)
+    @Internal
+    public void setOldfShowBreaksInFrames( boolean value )
     {
         field_8_docinfo3 = (short)oldfShowBreaksInFrames.setBoolean(field_8_docinfo3, value);
     }
 
     /**
-     *
+     * 
      * @return  the oldfShowBreaksInFrames field value.
      */
+    @Internal
     public boolean isOldfShowBreaksInFrames()
     {
         return oldfShowBreaksInFrames.isSet(field_8_docinfo3);
@@ -2195,17 +2333,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the oldfSwapBordersFacingPgs field value.
-     *
+     * 
      */
-    public void setOldfSwapBordersFacingPgs(boolean value)
+    @Internal
+    public void setOldfSwapBordersFacingPgs( boolean value )
     {
         field_8_docinfo3 = (short)oldfSwapBordersFacingPgs.setBoolean(field_8_docinfo3, value);
     }
 
     /**
-     *
+     * 
      * @return  the oldfSwapBordersFacingPgs field value.
      */
+    @Internal
     public boolean isOldfSwapBordersFacingPgs()
     {
         return oldfSwapBordersFacingPgs.isSet(field_8_docinfo3);
@@ -2213,17 +2353,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the unused5 field value.
-     *
+     * 
      */
-    public void setUnused5(byte value)
+    @Internal
+    public void setUnused5( byte value )
     {
         field_8_docinfo3 = (short)unused5.setValue(field_8_docinfo3, value);
     }
 
     /**
-     *
+     * 
      * @return  the unused5 field value.
      */
+    @Internal
     public byte getUnused5()
     {
         return ( byte )unused5.getValue(field_8_docinfo3);
@@ -2231,17 +2373,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the rncEdn field value.
-     *
+     * 
      */
-    public void setRncEdn(byte value)
+    @Internal
+    public void setRncEdn( byte value )
     {
         field_23_Edn = (short)rncEdn.setValue(field_23_Edn, value);
     }
 
     /**
-     *
+     * 
      * @return  the rncEdn field value.
      */
+    @Internal
     public byte getRncEdn()
     {
         return ( byte )rncEdn.getValue(field_23_Edn);
@@ -2249,17 +2393,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the nEdn field value.
-     *
+     * 
      */
-    public void setNEdn(short value)
+    @Internal
+    public void setNEdn( short value )
     {
         field_23_Edn = (short)nEdn.setValue(field_23_Edn, value);
     }
 
     /**
-     *
+     * 
      * @return  the nEdn field value.
      */
+    @Internal
     public short getNEdn()
     {
         return ( short )nEdn.getValue(field_23_Edn);
@@ -2267,17 +2413,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the epc field value.
-     *
+     * 
      */
-    public void setEpc(byte value)
+    @Internal
+    public void setEpc( byte value )
     {
         field_24_Edn1 = (short)epc.setValue(field_24_Edn1, value);
     }
 
     /**
-     *
+     * 
      * @return  the epc field value.
      */
+    @Internal
     public byte getEpc()
     {
         return ( byte )epc.getValue(field_24_Edn1);
@@ -2285,17 +2433,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the nfcFtnRef1 field value.
-     *
+     * 
      */
-    public void setNfcFtnRef1(byte value)
+    @Internal
+    public void setNfcFtnRef1( byte value )
     {
         field_24_Edn1 = (short)nfcFtnRef1.setValue(field_24_Edn1, value);
     }
 
     /**
-     *
+     * 
      * @return  the nfcFtnRef1 field value.
      */
+    @Internal
     public byte getNfcFtnRef1()
     {
         return ( byte )nfcFtnRef1.getValue(field_24_Edn1);
@@ -2303,17 +2453,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the nfcEdnRef1 field value.
-     *
+     * 
      */
-    public void setNfcEdnRef1(byte value)
+    @Internal
+    public void setNfcEdnRef1( byte value )
     {
         field_24_Edn1 = (short)nfcEdnRef1.setValue(field_24_Edn1, value);
     }
 
     /**
-     *
+     * 
      * @return  the nfcEdnRef1 field value.
      */
+    @Internal
     public byte getNfcEdnRef1()
     {
         return ( byte )nfcEdnRef1.getValue(field_24_Edn1);
@@ -2321,17 +2473,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fPrintFormData field value.
-     *
+     * 
      */
-    public void setFPrintFormData(boolean value)
+    @Internal
+    public void setFPrintFormData( boolean value )
     {
         field_24_Edn1 = (short)fPrintFormData.setBoolean(field_24_Edn1, value);
     }
 
     /**
-     *
+     * 
      * @return  the fPrintFormData field value.
      */
+    @Internal
     public boolean isFPrintFormData()
     {
         return fPrintFormData.isSet(field_24_Edn1);
@@ -2339,17 +2493,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fSaveFormData field value.
-     *
+     * 
      */
-    public void setFSaveFormData(boolean value)
+    @Internal
+    public void setFSaveFormData( boolean value )
     {
         field_24_Edn1 = (short)fSaveFormData.setBoolean(field_24_Edn1, value);
     }
 
     /**
-     *
+     * 
      * @return  the fSaveFormData field value.
      */
+    @Internal
     public boolean isFSaveFormData()
     {
         return fSaveFormData.isSet(field_24_Edn1);
@@ -2357,17 +2513,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fShadeFormData field value.
-     *
+     * 
      */
-    public void setFShadeFormData(boolean value)
+    @Internal
+    public void setFShadeFormData( boolean value )
     {
         field_24_Edn1 = (short)fShadeFormData.setBoolean(field_24_Edn1, value);
     }
 
     /**
-     *
+     * 
      * @return  the fShadeFormData field value.
      */
+    @Internal
     public boolean isFShadeFormData()
     {
         return fShadeFormData.isSet(field_24_Edn1);
@@ -2375,17 +2533,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fWCFtnEdn field value.
-     *
+     * 
      */
-    public void setFWCFtnEdn(boolean value)
+    @Internal
+    public void setFWCFtnEdn( boolean value )
     {
         field_24_Edn1 = (short)fWCFtnEdn.setBoolean(field_24_Edn1, value);
     }
 
     /**
-     *
+     * 
      * @return  the fWCFtnEdn field value.
      */
+    @Internal
     public boolean isFWCFtnEdn()
     {
         return fWCFtnEdn.isSet(field_24_Edn1);
@@ -2393,17 +2553,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the wvkSaved field value.
-     *
+     * 
      */
-    public void setWvkSaved(byte value)
+    @Internal
+    public void setWvkSaved( byte value )
     {
         field_32_view = (short)wvkSaved.setValue(field_32_view, value);
     }
 
     /**
-     *
+     * 
      * @return  the wvkSaved field value.
      */
+    @Internal
     public byte getWvkSaved()
     {
         return ( byte )wvkSaved.getValue(field_32_view);
@@ -2411,17 +2573,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the wScaleSaved field value.
-     *
+     * 
      */
-    public void setWScaleSaved(short value)
+    @Internal
+    public void setWScaleSaved( short value )
     {
         field_32_view = (short)wScaleSaved.setValue(field_32_view, value);
     }
 
     /**
-     *
+     * 
      * @return  the wScaleSaved field value.
      */
+    @Internal
     public short getWScaleSaved()
     {
         return ( short )wScaleSaved.getValue(field_32_view);
@@ -2429,17 +2593,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the zkSaved field value.
-     *
+     * 
      */
-    public void setZkSaved(byte value)
+    @Internal
+    public void setZkSaved( byte value )
     {
         field_32_view = (short)zkSaved.setValue(field_32_view, value);
     }
 
     /**
-     *
+     * 
      * @return  the zkSaved field value.
      */
+    @Internal
     public byte getZkSaved()
     {
         return ( byte )zkSaved.getValue(field_32_view);
@@ -2447,17 +2613,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fRotateFontW6 field value.
-     *
+     * 
      */
-    public void setFRotateFontW6(boolean value)
+    @Internal
+    public void setFRotateFontW6( boolean value )
     {
         field_32_view = (short)fRotateFontW6.setBoolean(field_32_view, value);
     }
 
     /**
-     *
+     * 
      * @return  the fRotateFontW6 field value.
      */
+    @Internal
     public boolean isFRotateFontW6()
     {
         return fRotateFontW6.isSet(field_32_view);
@@ -2465,17 +2633,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the iGutterPos field value.
-     *
+     * 
      */
-    public void setIGutterPos(boolean value)
+    @Internal
+    public void setIGutterPos( boolean value )
     {
         field_32_view = (short)iGutterPos.setBoolean(field_32_view, value);
     }
 
     /**
-     *
+     * 
      * @return  the iGutterPos field value.
      */
+    @Internal
     public boolean isIGutterPos()
     {
         return iGutterPos.isSet(field_32_view);
@@ -2483,17 +2653,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fNoTabForInd field value.
-     *
+     * 
      */
-    public void setFNoTabForInd(boolean value)
+    @Internal
+    public void setFNoTabForInd( boolean value )
     {
-        field_33_docinfo4 = fNoTabForInd.setBoolean(field_33_docinfo4, value);
+        field_33_docinfo4 = (int)fNoTabForInd.setBoolean(field_33_docinfo4, value);
     }
 
     /**
-     *
+     * 
      * @return  the fNoTabForInd field value.
      */
+    @Internal
     public boolean isFNoTabForInd()
     {
         return fNoTabForInd.isSet(field_33_docinfo4);
@@ -2501,17 +2673,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fNoSpaceRaiseLower field value.
-     *
+     * 
      */
-    public void setFNoSpaceRaiseLower(boolean value)
+    @Internal
+    public void setFNoSpaceRaiseLower( boolean value )
     {
-        field_33_docinfo4 = fNoSpaceRaiseLower.setBoolean(field_33_docinfo4, value);
+        field_33_docinfo4 = (int)fNoSpaceRaiseLower.setBoolean(field_33_docinfo4, value);
     }
 
     /**
-     *
+     * 
      * @return  the fNoSpaceRaiseLower field value.
      */
+    @Internal
     public boolean isFNoSpaceRaiseLower()
     {
         return fNoSpaceRaiseLower.isSet(field_33_docinfo4);
@@ -2519,17 +2693,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fSupressSpdfAfterPageBreak field value.
-     *
+     * 
      */
-    public void setFSupressSpdfAfterPageBreak(boolean value)
+    @Internal
+    public void setFSupressSpdfAfterPageBreak( boolean value )
     {
-        field_33_docinfo4 = fSupressSpdfAfterPageBreak.setBoolean(field_33_docinfo4, value);
+        field_33_docinfo4 = (int)fSupressSpdfAfterPageBreak.setBoolean(field_33_docinfo4, value);
     }
 
     /**
-     *
+     * 
      * @return  the fSupressSpdfAfterPageBreak field value.
      */
+    @Internal
     public boolean isFSupressSpdfAfterPageBreak()
     {
         return fSupressSpdfAfterPageBreak.isSet(field_33_docinfo4);
@@ -2537,17 +2713,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fWrapTrailSpaces field value.
-     *
+     * 
      */
-    public void setFWrapTrailSpaces(boolean value)
+    @Internal
+    public void setFWrapTrailSpaces( boolean value )
     {
-        field_33_docinfo4 = fWrapTrailSpaces.setBoolean(field_33_docinfo4, value);
+        field_33_docinfo4 = (int)fWrapTrailSpaces.setBoolean(field_33_docinfo4, value);
     }
 
     /**
-     *
+     * 
      * @return  the fWrapTrailSpaces field value.
      */
+    @Internal
     public boolean isFWrapTrailSpaces()
     {
         return fWrapTrailSpaces.isSet(field_33_docinfo4);
@@ -2555,17 +2733,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fMapPrintTextColor field value.
-     *
+     * 
      */
-    public void setFMapPrintTextColor(boolean value)
+    @Internal
+    public void setFMapPrintTextColor( boolean value )
     {
-        field_33_docinfo4 = fMapPrintTextColor.setBoolean(field_33_docinfo4, value);
+        field_33_docinfo4 = (int)fMapPrintTextColor.setBoolean(field_33_docinfo4, value);
     }
 
     /**
-     *
+     * 
      * @return  the fMapPrintTextColor field value.
      */
+    @Internal
     public boolean isFMapPrintTextColor()
     {
         return fMapPrintTextColor.isSet(field_33_docinfo4);
@@ -2573,17 +2753,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fNoColumnBalance field value.
-     *
+     * 
      */
-    public void setFNoColumnBalance(boolean value)
+    @Internal
+    public void setFNoColumnBalance( boolean value )
     {
-        field_33_docinfo4 = fNoColumnBalance.setBoolean(field_33_docinfo4, value);
+        field_33_docinfo4 = (int)fNoColumnBalance.setBoolean(field_33_docinfo4, value);
     }
 
     /**
-     *
+     * 
      * @return  the fNoColumnBalance field value.
      */
+    @Internal
     public boolean isFNoColumnBalance()
     {
         return fNoColumnBalance.isSet(field_33_docinfo4);
@@ -2591,17 +2773,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fConvMailMergeEsc field value.
-     *
+     * 
      */
-    public void setFConvMailMergeEsc(boolean value)
+    @Internal
+    public void setFConvMailMergeEsc( boolean value )
     {
-        field_33_docinfo4 = fConvMailMergeEsc.setBoolean(field_33_docinfo4, value);
+        field_33_docinfo4 = (int)fConvMailMergeEsc.setBoolean(field_33_docinfo4, value);
     }
 
     /**
-     *
+     * 
      * @return  the fConvMailMergeEsc field value.
      */
+    @Internal
     public boolean isFConvMailMergeEsc()
     {
         return fConvMailMergeEsc.isSet(field_33_docinfo4);
@@ -2609,17 +2793,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fSupressTopSpacing field value.
-     *
+     * 
      */
-    public void setFSupressTopSpacing(boolean value)
+    @Internal
+    public void setFSupressTopSpacing( boolean value )
     {
-        field_33_docinfo4 = fSupressTopSpacing.setBoolean(field_33_docinfo4, value);
+        field_33_docinfo4 = (int)fSupressTopSpacing.setBoolean(field_33_docinfo4, value);
     }
 
     /**
-     *
+     * 
      * @return  the fSupressTopSpacing field value.
      */
+    @Internal
     public boolean isFSupressTopSpacing()
     {
         return fSupressTopSpacing.isSet(field_33_docinfo4);
@@ -2627,17 +2813,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fOrigWordTableRules field value.
-     *
+     * 
      */
-    public void setFOrigWordTableRules(boolean value)
+    @Internal
+    public void setFOrigWordTableRules( boolean value )
     {
-        field_33_docinfo4 = fOrigWordTableRules.setBoolean(field_33_docinfo4, value);
+        field_33_docinfo4 = (int)fOrigWordTableRules.setBoolean(field_33_docinfo4, value);
     }
 
     /**
-     *
+     * 
      * @return  the fOrigWordTableRules field value.
      */
+    @Internal
     public boolean isFOrigWordTableRules()
     {
         return fOrigWordTableRules.isSet(field_33_docinfo4);
@@ -2645,17 +2833,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fTransparentMetafiles field value.
-     *
+     * 
      */
-    public void setFTransparentMetafiles(boolean value)
+    @Internal
+    public void setFTransparentMetafiles( boolean value )
     {
-        field_33_docinfo4 = fTransparentMetafiles.setBoolean(field_33_docinfo4, value);
+        field_33_docinfo4 = (int)fTransparentMetafiles.setBoolean(field_33_docinfo4, value);
     }
 
     /**
-     *
+     * 
      * @return  the fTransparentMetafiles field value.
      */
+    @Internal
     public boolean isFTransparentMetafiles()
     {
         return fTransparentMetafiles.isSet(field_33_docinfo4);
@@ -2663,17 +2853,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fShowBreaksInFrames field value.
-     *
+     * 
      */
-    public void setFShowBreaksInFrames(boolean value)
+    @Internal
+    public void setFShowBreaksInFrames( boolean value )
     {
-        field_33_docinfo4 = fShowBreaksInFrames.setBoolean(field_33_docinfo4, value);
+        field_33_docinfo4 = (int)fShowBreaksInFrames.setBoolean(field_33_docinfo4, value);
     }
 
     /**
-     *
+     * 
      * @return  the fShowBreaksInFrames field value.
      */
+    @Internal
     public boolean isFShowBreaksInFrames()
     {
         return fShowBreaksInFrames.isSet(field_33_docinfo4);
@@ -2681,17 +2873,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fSwapBordersFacingPgs field value.
-     *
+     * 
      */
-    public void setFSwapBordersFacingPgs(boolean value)
+    @Internal
+    public void setFSwapBordersFacingPgs( boolean value )
     {
-        field_33_docinfo4 = fSwapBordersFacingPgs.setBoolean(field_33_docinfo4, value);
+        field_33_docinfo4 = (int)fSwapBordersFacingPgs.setBoolean(field_33_docinfo4, value);
     }
 
     /**
-     *
+     * 
      * @return  the fSwapBordersFacingPgs field value.
      */
+    @Internal
     public boolean isFSwapBordersFacingPgs()
     {
         return fSwapBordersFacingPgs.isSet(field_33_docinfo4);
@@ -2699,17 +2893,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fSuppressTopSPacingMac5 field value.
-     *
+     * 
      */
-    public void setFSuppressTopSPacingMac5(boolean value)
+    @Internal
+    public void setFSuppressTopSPacingMac5( boolean value )
     {
-        field_33_docinfo4 = fSuppressTopSPacingMac5.setBoolean(field_33_docinfo4, value);
+        field_33_docinfo4 = (int)fSuppressTopSPacingMac5.setBoolean(field_33_docinfo4, value);
     }
 
     /**
-     *
+     * 
      * @return  the fSuppressTopSPacingMac5 field value.
      */
+    @Internal
     public boolean isFSuppressTopSPacingMac5()
     {
         return fSuppressTopSPacingMac5.isSet(field_33_docinfo4);
@@ -2717,17 +2913,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fTruncDxaExpand field value.
-     *
+     * 
      */
-    public void setFTruncDxaExpand(boolean value)
+    @Internal
+    public void setFTruncDxaExpand( boolean value )
     {
-        field_33_docinfo4 = fTruncDxaExpand.setBoolean(field_33_docinfo4, value);
+        field_33_docinfo4 = (int)fTruncDxaExpand.setBoolean(field_33_docinfo4, value);
     }
 
     /**
-     *
+     * 
      * @return  the fTruncDxaExpand field value.
      */
+    @Internal
     public boolean isFTruncDxaExpand()
     {
         return fTruncDxaExpand.isSet(field_33_docinfo4);
@@ -2735,17 +2933,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fPrintBodyBeforeHdr field value.
-     *
+     * 
      */
-    public void setFPrintBodyBeforeHdr(boolean value)
+    @Internal
+    public void setFPrintBodyBeforeHdr( boolean value )
     {
-        field_33_docinfo4 = fPrintBodyBeforeHdr.setBoolean(field_33_docinfo4, value);
+        field_33_docinfo4 = (int)fPrintBodyBeforeHdr.setBoolean(field_33_docinfo4, value);
     }
 
     /**
-     *
+     * 
      * @return  the fPrintBodyBeforeHdr field value.
      */
+    @Internal
     public boolean isFPrintBodyBeforeHdr()
     {
         return fPrintBodyBeforeHdr.isSet(field_33_docinfo4);
@@ -2753,17 +2953,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fNoLeading field value.
-     *
+     * 
      */
-    public void setFNoLeading(boolean value)
+    @Internal
+    public void setFNoLeading( boolean value )
     {
-        field_33_docinfo4 = fNoLeading.setBoolean(field_33_docinfo4, value);
+        field_33_docinfo4 = (int)fNoLeading.setBoolean(field_33_docinfo4, value);
     }
 
     /**
-     *
+     * 
      * @return  the fNoLeading field value.
      */
+    @Internal
     public boolean isFNoLeading()
     {
         return fNoLeading.isSet(field_33_docinfo4);
@@ -2771,17 +2973,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fMWSmallCaps field value.
-     *
+     * 
      */
-    public void setFMWSmallCaps(boolean value)
+    @Internal
+    public void setFMWSmallCaps( boolean value )
     {
-        field_33_docinfo4 = fMWSmallCaps.setBoolean(field_33_docinfo4, value);
+        field_33_docinfo4 = (int)fMWSmallCaps.setBoolean(field_33_docinfo4, value);
     }
 
     /**
-     *
+     * 
      * @return  the fMWSmallCaps field value.
      */
+    @Internal
     public boolean isFMWSmallCaps()
     {
         return fMWSmallCaps.isSet(field_33_docinfo4);
@@ -2789,17 +2993,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the lvl field value.
-     *
+     * 
      */
-    public void setLvl(byte value)
+    @Internal
+    public void setLvl( byte value )
     {
         field_37_docinfo5 = (short)lvl.setValue(field_37_docinfo5, value);
     }
 
     /**
-     *
+     * 
      * @return  the lvl field value.
      */
+    @Internal
     public byte getLvl()
     {
         return ( byte )lvl.getValue(field_37_docinfo5);
@@ -2807,17 +3013,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fGramAllDone field value.
-     *
+     * 
      */
-    public void setFGramAllDone(boolean value)
+    @Internal
+    public void setFGramAllDone( boolean value )
     {
         field_37_docinfo5 = (short)fGramAllDone.setBoolean(field_37_docinfo5, value);
     }
 
     /**
-     *
+     * 
      * @return  the fGramAllDone field value.
      */
+    @Internal
     public boolean isFGramAllDone()
     {
         return fGramAllDone.isSet(field_37_docinfo5);
@@ -2825,17 +3033,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fGramAllClean field value.
-     *
+     * 
      */
-    public void setFGramAllClean(boolean value)
+    @Internal
+    public void setFGramAllClean( boolean value )
     {
         field_37_docinfo5 = (short)fGramAllClean.setBoolean(field_37_docinfo5, value);
     }
 
     /**
-     *
+     * 
      * @return  the fGramAllClean field value.
      */
+    @Internal
     public boolean isFGramAllClean()
     {
         return fGramAllClean.isSet(field_37_docinfo5);
@@ -2843,17 +3053,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fSubsetFonts field value.
-     *
+     * 
      */
-    public void setFSubsetFonts(boolean value)
+    @Internal
+    public void setFSubsetFonts( boolean value )
     {
         field_37_docinfo5 = (short)fSubsetFonts.setBoolean(field_37_docinfo5, value);
     }
 
     /**
-     *
+     * 
      * @return  the fSubsetFonts field value.
      */
+    @Internal
     public boolean isFSubsetFonts()
     {
         return fSubsetFonts.isSet(field_37_docinfo5);
@@ -2861,17 +3073,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fHideLastVersion field value.
-     *
+     * 
      */
-    public void setFHideLastVersion(boolean value)
+    @Internal
+    public void setFHideLastVersion( boolean value )
     {
         field_37_docinfo5 = (short)fHideLastVersion.setBoolean(field_37_docinfo5, value);
     }
 
     /**
-     *
+     * 
      * @return  the fHideLastVersion field value.
      */
+    @Internal
     public boolean isFHideLastVersion()
     {
         return fHideLastVersion.isSet(field_37_docinfo5);
@@ -2879,17 +3093,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fHtmlDoc field value.
-     *
+     * 
      */
-    public void setFHtmlDoc(boolean value)
+    @Internal
+    public void setFHtmlDoc( boolean value )
     {
         field_37_docinfo5 = (short)fHtmlDoc.setBoolean(field_37_docinfo5, value);
     }
 
     /**
-     *
+     * 
      * @return  the fHtmlDoc field value.
      */
+    @Internal
     public boolean isFHtmlDoc()
     {
         return fHtmlDoc.isSet(field_37_docinfo5);
@@ -2897,17 +3113,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fSnapBorder field value.
-     *
+     * 
      */
-    public void setFSnapBorder(boolean value)
+    @Internal
+    public void setFSnapBorder( boolean value )
     {
         field_37_docinfo5 = (short)fSnapBorder.setBoolean(field_37_docinfo5, value);
     }
 
     /**
-     *
+     * 
      * @return  the fSnapBorder field value.
      */
+    @Internal
     public boolean isFSnapBorder()
     {
         return fSnapBorder.isSet(field_37_docinfo5);
@@ -2915,17 +3133,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fIncludeHeader field value.
-     *
+     * 
      */
-    public void setFIncludeHeader(boolean value)
+    @Internal
+    public void setFIncludeHeader( boolean value )
     {
         field_37_docinfo5 = (short)fIncludeHeader.setBoolean(field_37_docinfo5, value);
     }
 
     /**
-     *
+     * 
      * @return  the fIncludeHeader field value.
      */
+    @Internal
     public boolean isFIncludeHeader()
     {
         return fIncludeHeader.isSet(field_37_docinfo5);
@@ -2933,17 +3153,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fIncludeFooter field value.
-     *
+     * 
      */
-    public void setFIncludeFooter(boolean value)
+    @Internal
+    public void setFIncludeFooter( boolean value )
     {
         field_37_docinfo5 = (short)fIncludeFooter.setBoolean(field_37_docinfo5, value);
     }
 
     /**
-     *
+     * 
      * @return  the fIncludeFooter field value.
      */
+    @Internal
     public boolean isFIncludeFooter()
     {
         return fIncludeFooter.isSet(field_37_docinfo5);
@@ -2951,17 +3173,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fForcePageSizePag field value.
-     *
+     * 
      */
-    public void setFForcePageSizePag(boolean value)
+    @Internal
+    public void setFForcePageSizePag( boolean value )
     {
         field_37_docinfo5 = (short)fForcePageSizePag.setBoolean(field_37_docinfo5, value);
     }
 
     /**
-     *
+     * 
      * @return  the fForcePageSizePag field value.
      */
+    @Internal
     public boolean isFForcePageSizePag()
     {
         return fForcePageSizePag.isSet(field_37_docinfo5);
@@ -2969,17 +3193,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fMinFontSizePag field value.
-     *
+     * 
      */
-    public void setFMinFontSizePag(boolean value)
+    @Internal
+    public void setFMinFontSizePag( boolean value )
     {
         field_37_docinfo5 = (short)fMinFontSizePag.setBoolean(field_37_docinfo5, value);
     }
 
     /**
-     *
+     * 
      * @return  the fMinFontSizePag field value.
      */
+    @Internal
     public boolean isFMinFontSizePag()
     {
         return fMinFontSizePag.isSet(field_37_docinfo5);
@@ -2987,17 +3213,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fHaveVersions field value.
-     *
+     * 
      */
-    public void setFHaveVersions(boolean value)
+    @Internal
+    public void setFHaveVersions( boolean value )
     {
         field_38_docinfo6 = (short)fHaveVersions.setBoolean(field_38_docinfo6, value);
     }
 
     /**
-     *
+     * 
      * @return  the fHaveVersions field value.
      */
+    @Internal
     public boolean isFHaveVersions()
     {
         return fHaveVersions.isSet(field_38_docinfo6);
@@ -3005,17 +3233,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fAutoVersions field value.
-     *
+     * 
      */
-    public void setFAutoVersions(boolean value)
+    @Internal
+    public void setFAutoVersions( boolean value )
     {
         field_38_docinfo6 = (short)fAutoVersions.setBoolean(field_38_docinfo6, value);
     }
 
     /**
-     *
+     * 
      * @return  the fAutoVersions field value.
      */
+    @Internal
     public boolean isFAutoVersions()
     {
         return fAutoVersions.isSet(field_38_docinfo6);
@@ -3023,17 +3253,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fVirusPrompted field value.
-     *
+     * 
      */
-    public void setFVirusPrompted(boolean value)
+    @Internal
+    public void setFVirusPrompted( boolean value )
     {
-        field_43_virusinfo = fVirusPrompted.setBoolean(field_43_virusinfo, value);
+        field_43_virusinfo = (int)fVirusPrompted.setBoolean(field_43_virusinfo, value);
     }
 
     /**
-     *
+     * 
      * @return  the fVirusPrompted field value.
      */
+    @Internal
     public boolean isFVirusPrompted()
     {
         return fVirusPrompted.isSet(field_43_virusinfo);
@@ -3041,17 +3273,19 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the fVirusLoadSafe field value.
-     *
+     * 
      */
-    public void setFVirusLoadSafe(boolean value)
+    @Internal
+    public void setFVirusLoadSafe( boolean value )
     {
-        field_43_virusinfo = fVirusLoadSafe.setBoolean(field_43_virusinfo, value);
+        field_43_virusinfo = (int)fVirusLoadSafe.setBoolean(field_43_virusinfo, value);
     }
 
     /**
-     *
+     * 
      * @return  the fVirusLoadSafe field value.
      */
+    @Internal
     public boolean isFVirusLoadSafe()
     {
         return fVirusLoadSafe.isSet(field_43_virusinfo);
@@ -3059,19 +3293,22 @@ public abstract class DOPAbstractType implements HDFType {
 
     /**
      * Sets the KeyVirusSession30 field value.
-     *
+     * 
      */
-    public void setKeyVirusSession30(int value)
+    @Internal
+    public void setKeyVirusSession30( int value )
     {
-        field_43_virusinfo = KeyVirusSession30.setValue(field_43_virusinfo, value);
+        field_43_virusinfo = (int)KeyVirusSession30.setValue(field_43_virusinfo, value);
     }
 
     /**
-     *
+     * 
      * @return  the KeyVirusSession30 field value.
      */
+    @Internal
     public int getKeyVirusSession30()
     {
-        return KeyVirusSession30.getValue(field_43_virusinfo);
+        return ( int )KeyVirusSession30.getValue(field_43_virusinfo);
     }
-}
+
+}  // END OF CLASS
index 0dc18659d53317c259cb247342bccf93057a28cc..5de8e75ba4daee3de5af8d344474e2fa1930a4ea 100644 (file)
@@ -39,7 +39,7 @@ public final class TestDocumentProperties
     _documentProperties.serialize(buf, 0);
 
     DocumentProperties newDocProperties =
-      new DocumentProperties(buf, 0);
+      new DocumentProperties(buf, 0, size);
 
     Field[] fields = DocumentProperties.class.getSuperclass().getDeclaredFields();
     AccessibleObject.setAccessible(fields, true);
@@ -71,7 +71,7 @@ public final class TestDocumentProperties
 
     _hWPFDocFixture.setUp();
 
-    _documentProperties = new DocumentProperties(_hWPFDocFixture._tableStream, _hWPFDocFixture._fib.getFcDop());
+    _documentProperties = new DocumentProperties(_hWPFDocFixture._tableStream, _hWPFDocFixture._fib.getFcDop(), _hWPFDocFixture._fib.getLcbDop());
   }
 
   protected void tearDown()
index c271cc66f0e9cf60a4dc28771df2760b66132bdb..cd239c1b280582a64dfd0b576473adb6e88a27f7 100644 (file)
 ==================================================================== */
 package org.apache.poi.hwpf.usermodel;
 
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 
-import org.apache.poi.util.LittleEndian;
-
-import junit.framework.AssertionFailedError;
 import junit.framework.TestCase;
 
-import org.apache.poi.hwpf.model.SubdocumentType;
-
-import org.apache.poi.hwpf.model.FileInformationBlock;
-
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.poi.POIDataSamples;
 import org.apache.poi.hwpf.HWPFDocument;
@@ -39,8 +33,12 @@ import org.apache.poi.hwpf.HWPFTestDataSamples;
 import org.apache.poi.hwpf.extractor.Word6Extractor;
 import org.apache.poi.hwpf.extractor.WordExtractor;
 import org.apache.poi.hwpf.model.FieldsDocumentPart;
+import org.apache.poi.hwpf.model.FileInformationBlock;
 import org.apache.poi.hwpf.model.PlexOfField;
+import org.apache.poi.hwpf.model.SubdocumentType;
+import org.apache.poi.hwpf.model.io.HWPFOutputStream;
 import org.apache.poi.util.IOUtils;
+import org.apache.poi.util.LittleEndian;
 
 /**
  * Test different problems reported in Apache Bugzilla
@@ -549,11 +547,13 @@ public class TestBugs extends TestCase
     /**
      * [RESOLVED FIXED] Bug 51604 - replace text fails for doc ( poi 3.8 beta
      * release from download site )
+     * 
+     * @throws IOException
+     * @throws FileNotFoundException
      */
-    public void test51604p2()
+    public void test51604p2() throws FileNotFoundException, IOException
     {
-        HWPFDocument doc = HWPFTestDataSamples
-                .openSampleFile( "Bug51604.doc" );
+        HWPFDocument doc = HWPFTestDataSamples.openSampleFile( "Bug51604.doc" );
 
         Range range = doc.getRange();
         int numParagraph = range.numParagraphs();
@@ -583,7 +583,49 @@ public class TestBugs extends TestCase
 
             totalLength += partLength;
         }
+    }
+
+    /**
+     * [RESOLVED FIXED] Bug 51604 - replace text fails for doc ( poi 3.8 beta
+     * release from download site )
+     */
+    public void test51604p3() throws IOException
+    {
+        HWPFDocument doc = HWPFTestDataSamples.openSampleFile( "Bug51604.doc" );
+
+        byte[] originalData = new byte[doc.getFileInformationBlock()
+                .getLcbDop()];
+        System.arraycopy( doc.getTableStream(), doc.getFileInformationBlock()
+                .getFcDop(), originalData, 0, originalData.length );
+
+        HWPFOutputStream outputStream = new HWPFOutputStream();
+        doc.getDocProperties().writeTo( outputStream );
+        final byte[] oldData = outputStream.toByteArray();
+
+        assertEquals( Arrays.toString( originalData ),
+                Arrays.toString( oldData ) );
+
+        Range range = doc.getRange();
+        int numParagraph = range.numParagraphs();
+        for ( int i = 0; i < numParagraph; i++ )
+        {
+            Paragraph paragraph = range.getParagraph( i );
+            int numCharRuns = paragraph.numCharacterRuns();
+            for ( int j = 0; j < numCharRuns; j++ )
+            {
+                CharacterRun charRun = paragraph.getCharacterRun( j );
+                String text = charRun.text();
+                if ( text.contains( "Header" ) )
+                    charRun.replaceText( text, "added" );
+            }
+        }
+
+        doc = HWPFTestDataSamples.writeOutAndReadBack( doc );
+
+        outputStream = new HWPFOutputStream();
+        doc.getDocProperties().writeTo( outputStream );
+        final byte[] newData = outputStream.toByteArray();
 
-        assertEquals( doc.getText().length(), totalLength );
+        assertEquals( Arrays.toString( oldData ), Arrays.toString( newData ) );
     }
 }