You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2019/09/24 23:26:00 UTC

svn commit: r1867502 [2/20] - in /poi/site/publish: ./ components/ components/hmef/ components/hpbf/ components/hpsf/ components/poifs/ components/slideshow/ components/spreadsheet/ devel/ devel/plan/ devel/references/ skin/ skin/images/

Modified: poi/site/publish/components/hpsf/how-to.html
URL: http://svn.apache.org/viewvc/poi/site/publish/components/hpsf/how-to.html?rev=1867502&r1=1867501&r2=1867502&view=diff
==============================================================================
--- poi/site/publish/components/hpsf/how-to.html (original)
+++ poi/site/publish/components/hpsf/how-to.html Tue Sep 24 23:26:00 2019
@@ -407,24 +407,62 @@ document.write("Last Published: " + docu
       source code of the sample application is available in the
       <em>examples</em> section of the POI source tree as
       <em>ReadTitle.java</em>.</p>
-<pre class="code">
-import java.io.*;
-import org.apache.poi.hpsf.*;
-import org.apache.poi.poifs.eventfilesystem.*;
-
-// ...
-
-public static void main(String[] args)
-    throws IOException
-{
-    final String filename = args[0];
-    POIFSReader r = new POIFSReader();
-    r.registerListener(new MyPOIFSReaderListener(),
-                       "\005SummaryInformation");
-    r.read(new FileInputStream(filename));
-}</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import java.io.*;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import org.apache.poi.hpsf.*;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import org.apache.poi.poifs.eventfilesystem.*;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">// ...</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">public static void main(String[] args)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    throws IOException</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">{</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    final String filename = args[0];</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    POIFSReader r = new POIFSReader();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    r.registerListener(new MyPOIFSReaderListener(),</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">                       "\005SummaryInformation");</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    r.read(new FileInputStream(filename));</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">}</span>
+</div>
+</div>
 <p>The first interesting statement is</p>
-<pre class="code">POIFSReader r = new POIFSReader();</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">POIFSReader r = new POIFSReader();</span>
+</div>
+</div>
 <p>It creates a
       <span class="codefrag">org.apache.poi.poifs.eventfilesystem.POIFSReader</span> instance
       which we shall need to read the POI filesystem. Before the application
@@ -432,9 +470,17 @@ public static void main(String[] args)
       <span class="codefrag">POIFSReader</span> which documents we are interested in. In this
       case the application should do something with the document
       <em>\005SummaryInformation</em>.</p>
-<pre class="code">
-r.registerListener(new MyPOIFSReaderListener(),
-                   "\005SummaryInformation");</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">r.registerListener(new MyPOIFSReaderListener(),</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">                   "\005SummaryInformation");</span>
+</div>
+</div>
 <p>This method call registers a
       <span class="codefrag">org.apache.poi.poifs.eventfilesystem.POIFSReaderListener</span>
       with the <span class="codefrag">POIFSReader</span>. The <span class="codefrag">POIFSReaderListener</span>
@@ -449,42 +495,105 @@ r.registerListener(new MyPOIFSReaderList
       <em>ReadTitle.java</em> source file.</p>
 <p>Now everything is prepared and reading the POI filesystem can
       start:</p>
-<pre class="code">r.read(new FileInputStream(filename));</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">r.read(new FileInputStream(filename));</span>
+</div>
+</div>
 <p>The following source code fragment shows the
       <span class="codefrag">MyPOIFSReaderListener</span> class and how it retrieves the
       title.</p>
-<pre class="code">
-static class MyPOIFSReaderListener implements POIFSReaderListener
-{
-    public void processPOIFSReaderEvent(POIFSReaderEvent event)
-    {
-        SummaryInformation si = null;
-        try
-        {
-            si = (SummaryInformation)
-                 PropertySetFactory.create(event.getStream());
-        }
-        catch (Exception ex)
-        {
-            throw new RuntimeException
-                ("Property set stream \"" +
-                 event.getPath() + event.getName() + "\": " + ex);
-        }
-        final String title = si.getTitle();
-        if (title != null)
-            System.out.println("Title: \"" + title + "\"");
-        else
-            System.out.println("Document has no title.");
-    }
-}
-</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">static class MyPOIFSReaderListener implements POIFSReaderListener</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">{</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    public void processPOIFSReaderEvent(POIFSReaderEvent event)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    {</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        SummaryInformation si = null;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        try</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        {</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">            si = (SummaryInformation)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">                 PropertySetFactory.create(event.getStream());</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        }</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        catch (Exception ex)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        {</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">            throw new RuntimeException</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">                ("Property set stream \"" +</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">                 event.getPath() + event.getName() + "\": " + ex);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        }</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        final String title = si.getTitle();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        if (title != null)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">            System.out.println("Title: \"" + title + "\"");</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        else</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">            System.out.println("Document has no title.");</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    }</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">}</span>
+</div>
+</div>
 <p>The line</p>
-<pre class="code">SummaryInformation si = null;</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">SummaryInformation si = null;</span>
+</div>
+</div>
 <p>declares a <span class="codefrag">SummaryInformation</span> variable and initializes it
       with <span class="codefrag">null</span>. We need an instance of this class to access the
       title. The instance is created in a <span class="codefrag">try</span> block:</p>
-<pre class="code">si = (SummaryInformation)
-                 PropertySetFactory.create(event.getStream());</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">si = (SummaryInformation)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">                 PropertySetFactory.create(event.getStream());</span>
+</div>
+</div>
 <p>The expression <span class="codefrag">event.getStream()</span> returns the input stream
       containing the bytes of the property set stream named
       <em>\005SummaryInformation</em>. This stream is passed into the
@@ -501,11 +610,23 @@ static class MyPOIFSReaderListener imple
 <p>If all goes well, the sample application retrieves the title and prints
      it to the standard output. As you can see you must be prepared for the
       case that the POI filesystem does not have a title.</p>
-<pre class="code">final String title = si.getTitle();
-if (title != null)
-    System.out.println("Title: \"" + title + "\"");
-else
-    System.out.println("Document has no title.");</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">final String title = si.getTitle();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">if (title != null)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    System.out.println("Title: \"" + title + "\"");</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">else</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    System.out.println("Document has no title.");</span>
+</div>
+</div>
 <p>Please note that a POI filesystem does not necessarily contain the
       <em>\005SummaryInformation</em> stream. The documents created by the
       Microsoft Office suite have one, as far as I know. However, an Excel
@@ -650,9 +771,17 @@ else
      <span class="codefrag">SummaryInformation</span>.</div>
 </div>
 <p>The first step is to read the POI filesystem into memory:</p>
-<pre class="code">InputStream is = new FileInputStream(poiFilesystem);
-POIFSFileSystem poifs = new POIFSFileSystem(is);
-is.close();</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">InputStream is = new FileInputStream(poiFilesystem);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">POIFSFileSystem poifs = new POIFSFileSystem(is);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">is.close();</span>
+</div>
+</div>
 <p>The code snippet above assumes that the variable
      <span class="codefrag">poiFilesystem</span> holds the name of a disk file. It reads the
      file from an input stream and creates a <span class="codefrag">POIFSFileSystem</span>
@@ -665,26 +794,68 @@ is.close();</pre>
      application should be able to deal with that situation. The following
      code does so by creating a new <span class="codefrag">DocumentSummaryInformation</span> if
      there is none in the POI filesystem:</p>
-<pre class="code">DirectoryEntry dir = poifs.getRoot();
-DocumentSummaryInformation dsi;
-try
-{
-    DocumentEntry dsiEntry = (DocumentEntry)
-        dir.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
-    DocumentInputStream dis = new DocumentInputStream(dsiEntry);
-    PropertySet ps = new PropertySet(dis);
-    dis.close();
-    dsi = new DocumentSummaryInformation(ps);
-}
-catch (FileNotFoundException ex)
-{
-    /* There is no document summary information. We have to create a
-     * new one. */
-    dsi = PropertySetFactory.newDocumentSummaryInformation();
-}
-    </pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">DirectoryEntry dir = poifs.getRoot();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">DocumentSummaryInformation dsi;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">try</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">{</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    DocumentEntry dsiEntry = (DocumentEntry)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        dir.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    DocumentInputStream dis = new DocumentInputStream(dsiEntry);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    PropertySet ps = new PropertySet(dis);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    dis.close();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    dsi = new DocumentSummaryInformation(ps);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">}</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">catch (FileNotFoundException ex)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">{</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    /* There is no document summary information. We have to create a</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">     * new one. */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    dsi = PropertySetFactory.newDocumentSummaryInformation();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">}</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    </span>
+</div>
+</div>
 <p>In the source code above the statement</p>
-<pre class="code">DirectoryEntry dir = poifs.getRoot();</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">DirectoryEntry dir = poifs.getRoot();</span>
+</div>
+</div>
 <p>gets hold of the POI filesystem's root directory as a
      <span class="codefrag">DirectoryEntry</span>. The <span class="codefrag">getEntry()</span> method of this
      class is used to access a file or directory entry in a directory. However,
@@ -692,8 +863,14 @@ catch (FileNotFoundException ex)
      <span class="codefrag">FileNotFoundException</span> will be thrown. Therefore opening the
      document summary information entry should be done in a <span class="codefrag">try</span>
      block:</p>
-<pre class="code">    DocumentEntry dsiEntry = (DocumentEntry)
-        dir.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> DocumentEntry dsiEntry = (DocumentEntry)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">     dir.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);</span>
+</div>
+</div>
 <p>
 <span class="codefrag">DocumentSummaryInformation.DEFAULT_STREAM_NAME</span> represents
      the string "\005DocumentSummaryInformation", i.e. the standard name of a
@@ -701,12 +878,24 @@ catch (FileNotFoundException ex)
      <span class="codefrag">getEntry()</span> method returns a <span class="codefrag">DocumentEntry</span>. To
      read the <span class="codefrag">DocumentEntry</span>'s contents, create a
      <span class="codefrag">DocumentInputStream</span>:</p>
-<pre class="code">     DocumentInputStream dis = new DocumentInputStream(dsiEntry);</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> DocumentInputStream dis = new DocumentInputStream(dsiEntry);</span>
+</div>
+</div>
 <p>Up to this point we have used POI's <a href="../poifs/index.html">POIFS component</a>. Now HPSF enters the
      stage. A property set is created from the input stream's data:</p>
-<pre class="code">    PropertySet ps = new PropertySet(dis);
-    dis.close();
-    dsi = new DocumentSummaryInformation(ps);    </pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> PropertySet ps = new PropertySet(dis);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> dis.close();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> dsi = new DocumentSummaryInformation(ps);    </span>
+</div>
+</div>
 <p>If the data really constitutes a property set, a
      <span class="codefrag">PropertySet</span> object is created. Otherwise a
      <span class="codefrag">NoPropertySetStreamException</span> is thrown. After having read the
@@ -722,12 +911,20 @@ catch (FileNotFoundException ex)
      <span class="codefrag">PropertySetFactory</span>'s method
      <span class="codefrag">newDocumentSummaryInformation()</span> establishes a new and empty
      <span class="codefrag">DocumentSummaryInformation</span> instance:</p>
-<pre class="code">    dsi = PropertySetFactory.newDocumentSummaryInformation();</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> dsi = PropertySetFactory.newDocumentSummaryInformation();</span>
+</div>
+</div>
 <p>Whether we read the document summary information from the POI filesystem
      or created it from scratch, in either case we now have a
      <span class="codefrag">DocumentSummaryInformation</span> instance we can write to. Writing
      is quite simple, as the following line of code shows:</p>
-<pre class="code">dsi.setCategory("POI example");</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">dsi.setCategory("POI example");</span>
+</div>
+</div>
 <p>This statement sets the "category" property to "POI example". Any
      former "category" value will be lost. If there hasn't been a "category"
      property yet, a new one will be created.</p>
@@ -738,7 +935,11 @@ catch (FileNotFoundException ex)
 <p>Once all properties are set as needed, they should be stored into the
      file on disk. The first step is to write the
      <span class="codefrag">DocumentSummaryInformation</span> into the POI filesystem:</p>
-<pre class="code">dsi.write(dir, DocumentSummaryInformation.DEFAULT_STREAM_NAME);</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">dsi.write(dir, DocumentSummaryInformation.DEFAULT_STREAM_NAME);</span>
+</div>
+</div>
 <p>The <span class="codefrag">DocumentSummaryInformation</span>'s <span class="codefrag">write()</span>
      method takes two parameters: The first is the <span class="codefrag">DirectoryEntry</span>
      in the POI filesystem, the second is the name of the stream to create in
@@ -755,34 +956,82 @@ catch (FileNotFoundException ex)
      that in production-quality code you should never write directly to the
      origin file, because in case of an error everything would be lost. Here it
      is done this way to keep the example short.</p>
-<pre class="code">OutputStream out = new FileOutputStream(poiFilesystem);
-poifs.writeFilesystem(out);
-out.close();</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">OutputStream out = new FileOutputStream(poiFilesystem);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">poifs.writeFilesystem(out);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">out.close();</span>
+</div>
+</div>
 <a name="User-Defined+Properties"></a>
 <h4>User-Defined Properties</h4>
 <p>If you compare the source code excerpts above with the file containing
       the full source code, you will notice that I left out some following
       lines of code. The are dealing with the special topic of custom
       properties.</p>
-<pre class="code">DocumentSummaryInformation dsi = ...
-...
-CustomProperties customProperties = dsi.getCustomProperties();
-if (customProperties == null)
-    customProperties = new CustomProperties();
-
-/* Insert some custom properties into the container. */
-customProperties.put("Key 1", "Value 1");
-customProperties.put("Schl&uuml;ssel 2", "Wert 2");
-customProperties.put("Sample Number", new Integer(12345));
-customProperties.put("Sample Boolean", new Boolean(true));
-customProperties.put("Sample Date", new Date());
-
-/* Read a custom property. */
-Object value = customProperties.get("Sample Number");
-
-/* Write the custom properties back to the document summary
- * information. */
-dsi.setCustomProperties(customProperties);</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">DocumentSummaryInformation dsi = ...</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">...</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">CustomProperties customProperties = dsi.getCustomProperties();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">if (customProperties == null)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    customProperties = new CustomProperties();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">/* Insert some custom properties into the container. */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">customProperties.put("Key 1", "Value 1");</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">customProperties.put("Schl&uuml;ssel 2", "Wert 2");</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">customProperties.put("Sample Number", new Integer(12345));</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">customProperties.put("Sample Boolean", new Boolean(true));</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">customProperties.put("Sample Date", new Date());</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">/* Read a custom property. */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">Object value = customProperties.get("Sample Number");</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">/* Write the custom properties back to the document summary</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> * information. */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">dsi.setCustomProperties(customProperties);</span>
+</div>
+</div>
 <p>Custom properties are properties the user can define himself. Using for
       example Microsoft Word he can define these extra properties and give
       each of them a <strong>name</strong>, a <strong>type</strong> and a
@@ -881,11 +1130,23 @@ dsi.setCustomProperties(customProperties
       program can be found as <em>ReadCustomPropertySets.java</em> in the
       <em>examples</em> area of the POI source code tree. Here are the key
       sections:</p>
-<pre class="code">import java.io.*;
-import java.util.*;
-import org.apache.poi.hpsf.*;
-import org.apache.poi.poifs.eventfilesystem.*;
-import org.apache.poi.util.HexDump;</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import java.io.*;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import java.util.*;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import org.apache.poi.hpsf.*;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import org.apache.poi.poifs.eventfilesystem.*;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import org.apache.poi.util.HexDump;</span>
+</div>
+</div>
 <p>The most important package the application needs is
      <span class="codefrag">org.apache.poi.hpsf.*</span>. This package contains the HPSF
      classes. Most classes named below are from the HPSF package. Of course we
@@ -894,16 +1155,38 @@ import org.apache.poi.util.HexDump;</pre
      we use the <span class="codefrag">List</span> and <span class="codefrag">Iterator</span> class. The class
      <span class="codefrag">org.apache.poi.util.HexDump</span> provides a methods to dump byte
      arrays as nicely formatted strings.</p>
-<pre class="code">public static void main(String[] args)
-    throws IOException
-{
-    final String filename = args[0];
-    POIFSReader r = new POIFSReader();
-
-    /* Register a listener for *all* documents. */
-    r.registerListener(new MyPOIFSReaderListener());
-    r.read(new FileInputStream(filename));
-}</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">public static void main(String[] args)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    throws IOException</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">{</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    final String filename = args[0];</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    POIFSReader r = new POIFSReader();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    /* Register a listener for *all* documents. */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    r.registerListener(new MyPOIFSReaderListener());</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    r.read(new FileInputStream(filename));</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">}</span>
+</div>
+</div>
 <p>The <span class="codefrag">POIFSReader</span> is set up in a way that the listener
      <span class="codefrag">MyPOIFSReaderListener</span> is called on every file in the POI file
     system.</p>
@@ -911,31 +1194,83 @@ import org.apache.poi.util.HexDump;</pre
 <h4>The Property Set</h4>
 <p>The listener class tries to create a <span class="codefrag">PropertySet</span> from each
      stream using the <span class="codefrag">PropertySetFactory.create()</span> method:</p>
-<pre class="code">static class MyPOIFSReaderListener implements POIFSReaderListener
-{
-    public void processPOIFSReaderEvent(POIFSReaderEvent event)
-    {
-        PropertySet ps = null;
-        try
-        {
-            ps = PropertySetFactory.create(event.getStream());
-        }
-        catch (NoPropertySetStreamException ex)
-        {
-            out("No property set stream: \"" + event.getPath() +
-                event.getName() + "\"");
-            return;
-        }
-        catch (Exception ex)
-        {
-            throw new RuntimeException
-                ("Property set stream \"" +
-                 event.getPath() + event.getName() + "\": " + ex);
-        }
-
-        /* Print the name of the property set stream: */
-        out("Property set stream \"" + event.getPath() +
-            event.getName() + "\":");</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">static class MyPOIFSReaderListener implements POIFSReaderListener</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">{</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    public void processPOIFSReaderEvent(POIFSReaderEvent event)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    {</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        PropertySet ps = null;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        try</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        {</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">            ps = PropertySetFactory.create(event.getStream());</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        }</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        catch (NoPropertySetStreamException ex)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        {</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">            out("No property set stream: \"" + event.getPath() +</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">                event.getName() + "\"");</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">            return;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        }</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        catch (Exception ex)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        {</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">            throw new RuntimeException</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">                ("Property set stream \"" +</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">                 event.getPath() + event.getName() + "\": " + ex);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        }</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        /* Print the name of the property set stream: */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        out("Property set stream \"" + event.getPath() +</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">            event.getName() + "\":");</span>
+</div>
+</div>
 <p>Creating the <span class="codefrag">PropertySet</span> is done in a <span class="codefrag">try</span>
      block, because not each stream in the POI file system contains a property
      set. If it is some other file, the
@@ -949,20 +1284,50 @@ import org.apache.poi.util.HexDump;</pre
 <h4>The Sections</h4>
 <p>The next step is to print the number of sections followed by the
      sections themselves:</p>
-<pre class="code">/* Print the number of sections: */
-final long sectionCount = ps.getSectionCount();
-out("   No. of sections: " + sectionCount);
-
-/* Print the list of sections: */
-List sections = ps.getSections();
-int nr = 0;
-for (Iterator i = sections.iterator(); i.hasNext();)
-{
-    /* Print a single section: */
-    Section sec = (Section) i.next();
-
-    // See below for the complete loop body.
-}</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">/* Print the number of sections: */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">final long sectionCount = ps.getSectionCount();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">out("   No. of sections: " + sectionCount);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">/* Print the list of sections: */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">List sections = ps.getSections();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">int nr = 0;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">for (Iterator i = sections.iterator(); i.hasNext();)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">{</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    /* Print a single section: */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    Section sec = (Section) i.next();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    // See below for the complete loop body.</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">}</span>
+</div>
+</div>
 <p>The <span class="codefrag">PropertySet</span>'s method <span class="codefrag">getSectionCount()</span>
       returns the number of sections.</p>
 <p>To retrieve the sections, use the <span class="codefrag">getSections()</span>
@@ -971,29 +1336,77 @@ for (Iterator i = sections.iterator(); i
 <p>The sample code shows a loop that retrieves the <span class="codefrag">Section</span>
       objects one by one and prints some information about each one. Here is
       the complete body of the loop:</p>
-<pre class="code">/* Print a single section: */
-Section sec = (Section) i.next();
-out("   Section " + nr++ + ":");
-String s = hex(sec.getFormatID().getBytes());
-s = s.substring(0, s.length() - 1);
-out("      Format ID: " + s);
-
-/* Print the number of properties in this section. */
-int propertyCount = sec.getPropertyCount();
-out("      No. of properties: " + propertyCount);
-
-/* Print the properties: */
-Property[] properties = sec.getProperties();
-for (int i2 = 0; i2 &lt; properties.length; i2++)
-{
-    /* Print a single property: */
-    Property p = properties[i2];
-    int id = p.getID();
-    long type = p.getType();
-    Object value = p.getValue();
-    out("      Property ID: " + id + ", type: " + type +
-        ", value: " + value);
-}</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">/* Print a single section: */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">Section sec = (Section) i.next();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">out("   Section " + nr++ + ":");</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">String s = hex(sec.getFormatID().getBytes());</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">s = s.substring(0, s.length() - 1);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">out("      Format ID: " + s);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">/* Print the number of properties in this section. */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">int propertyCount = sec.getPropertyCount();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">out("      No. of properties: " + propertyCount);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">/* Print the properties: */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">Property[] properties = sec.getProperties();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">for (int i2 = 0; i2 &lt; properties.length; i2++)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">{</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    /* Print a single property: */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    Property p = properties[i2];</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    int id = p.getID();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    long type = p.getType();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    Object value = p.getValue();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    out("      Property ID: " + id + ", type: " + type +</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        ", value: " + value);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">}</span>
+</div>
+</div>
 <a name="The+Section%27s+Format+ID"></a>
 <h4>The Section's Format ID</h4>
 <p>The first method called on the <span class="codefrag">Section</span> instance is
@@ -1004,9 +1417,17 @@ for (int i2 = 0; i2 &lt; properties.leng
       should have defined a unique format ID and, when reading a property set
       stream, should check the format ID is equal to that unique format ID. The
       sample program just prints the format ID it finds in a section:</p>
-<pre class="code">String s = hex(sec.getFormatID().getBytes());
-s = s.substring(0, s.length() - 1);
-out("      Format ID: " + s);</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">String s = hex(sec.getFormatID().getBytes());</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">s = s.substring(0, s.length() - 1);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">out("      Format ID: " + s);</span>
+</div>
+</div>
 <p>As you can see, the <span class="codefrag">getFormatID()</span> method returns a
       <span class="codefrag">ClassID</span> object. An array containing the bytes can be
       retrieved with <span class="codefrag">ClassID.getBytes()</span>. In order to get a nicely
@@ -1021,26 +1442,58 @@ out("      Format ID: " + s);</pre>
       properties are available in the section via the
       <span class="codefrag">Section.getPropertyCount()</span>. The sample application uses this
       method to print the number of properties to the standard output:</p>
-<pre class="code">int propertyCount = sec.getPropertyCount();
-out("      No. of properties: " + propertyCount);</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">int propertyCount = sec.getPropertyCount();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">out("      No. of properties: " + propertyCount);</span>
+</div>
+</div>
 <p>Now its time to get to the properties themselves. You can retrieve a
       section's properties with the method
       <span class="codefrag">Section.getProperties()</span>:</p>
-<pre class="code">Property[] properties = sec.getProperties();</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">Property[] properties = sec.getProperties();</span>
+</div>
+</div>
 <p>As you can see the result is an array of <span class="codefrag">Property</span>
       objects. This class has three methods to retrieve a property's ID, its
       type, and its value. The following code snippet shows how to call
       them:</p>
-<pre class="code">for (int i2 = 0; i2 &lt; properties.length; i2++)
-{
-    /* Print a single property: */
-    Property p = properties[i2];
-    int id = p.getID();
-    long type = p.getType();
-    Object value = p.getValue();
-    out("      Property ID: " + id + ", type: " + type +
-        ", value: " + value);
-}</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">for (int i2 = 0; i2 &lt; properties.length; i2++)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">{</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    /* Print a single property: */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    Property p = properties[i2];</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    int id = p.getID();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    long type = p.getType();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    Object value = p.getValue();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    out("      Property ID: " + id + ", type: " + type +</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        ", value: " + value);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">}</span>
+</div>
+</div>
 <a name="Sample+Output"></a>
 <h4>Sample Output</h4>
 <p>The output of the sample program might look like the following. It
@@ -1049,60 +1502,170 @@ out("      No. of properties: " + proper
       second section of this HOW-TO the application does not have any code
       which is specific to the <span class="codefrag">SummaryInformation</span> and
       <span class="codefrag">DocumentSummaryInformation</span> classes.</p>
-<pre class="code">Property set stream "/SummaryInformation":
-   No. of sections: 1
-   Section 0:
-      Format ID: 00000000 F2 9F 85 E0 4F F9 10 68 AB 91 08 00 2B 27 B3 D9 ....O..h....+'..
-      No. of properties: 17
-      Property ID: 1, type: 2, value: 1252
-      Property ID: 2, type: 30, value: Titel
-      Property ID: 3, type: 30, value: Thema
-      Property ID: 4, type: 30, value: Rainer Klute (Autor)
-      Property ID: 5, type: 30, value: Test (Stichw&ouml;rter)
-      Property ID: 6, type: 30, value: This is a document for testing HPSF
-      Property ID: 7, type: 30, value: Normal.dot
-      Property ID: 8, type: 30, value: Unknown User
-      Property ID: 9, type: 30, value: 3
-      Property ID: 18, type: 30, value: Microsoft Word 9.0
-      Property ID: 12, type: 64, value: Mon Jan 01 00:59:25 CET 1601
-      Property ID: 13, type: 64, value: Thu Jul 18 16:22:00 CEST 2002
-      Property ID: 14, type: 3, value: 1
-      Property ID: 15, type: 3, value: 20
-      Property ID: 16, type: 3, value: 93
-      Property ID: 19, type: 3, value: 0
-      Property ID: 17, type: 71, value: [B@13582d
-Property set stream "/DocumentSummaryInformation":
-   No. of sections: 2
-   Section 0:
-      Format ID: 00000000 D5 CD D5 02 2E 9C 10 1B 93 97 08 00 2B 2C F9 AE ............+,..
-      No. of properties: 14
-      Property ID: 1, type: 2, value: 1252
-      Property ID: 2, type: 30, value: Test
-      Property ID: 14, type: 30, value: Rainer Klute (Manager)
-      Property ID: 15, type: 30, value: Rainer Klute IT-Consulting GmbH
-      Property ID: 5, type: 3, value: 3
-      Property ID: 6, type: 3, value: 2
-      Property ID: 17, type: 3, value: 111
-      Property ID: 23, type: 3, value: 592636
-      Property ID: 11, type: 11, value: false
-      Property ID: 16, type: 11, value: false
-      Property ID: 19, type: 11, value: false
-      Property ID: 22, type: 11, value: false
-      Property ID: 13, type: 4126, value: [B@56a499
-      Property ID: 12, type: 4108, value: [B@506411
-   Section 1:
-      Format ID: 00000000 D5 CD D5 05 2E 9C 10 1B 93 97 08 00 2B 2C F9 AE ............+,..
-      No. of properties: 7
-      Property ID: 0, type: 0, value: {6=Test-JaNein, 5=Test-Zahl, 4=Test-Datum, 3=Test-Text, 2=_PID_LINKBASE}
-      Property ID: 1, type: 2, value: 1252
-      Property ID: 2, type: 65, value: [B@c9ba38
-      Property ID: 3, type: 30, value: This is some text.
-      Property ID: 4, type: 64, value: Wed Jul 17 00:00:00 CEST 2002
-      Property ID: 5, type: 3, value: 27
-      Property ID: 6, type: 11, value: true
-No property set stream: "/WordDocument"
-No property set stream: "/CompObj"
-No property set stream: "/1Table"</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">Property set stream "/SummaryInformation":</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">   No. of sections: 1</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">   Section 0:</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Format ID: 00000000 F2 9F 85 E0 4F F9 10 68 AB 91 08 00 2B 27 B3 D9 ....O..h....+'..</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      No. of properties: 17</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 1, type: 2, value: 1252</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 2, type: 30, value: Titel</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 3, type: 30, value: Thema</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 4, type: 30, value: Rainer Klute (Autor)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 5, type: 30, value: Test (Stichw&ouml;rter)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 6, type: 30, value: This is a document for testing HPSF</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 7, type: 30, value: Normal.dot</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 8, type: 30, value: Unknown User</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 9, type: 30, value: 3</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 18, type: 30, value: Microsoft Word 9.0</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 12, type: 64, value: Mon Jan 01 00:59:25 CET 1601</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 13, type: 64, value: Thu Jul 18 16:22:00 CEST 2002</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 14, type: 3, value: 1</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 15, type: 3, value: 20</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 16, type: 3, value: 93</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 19, type: 3, value: 0</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 17, type: 71, value: [B@13582d</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">Property set stream "/DocumentSummaryInformation":</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">   No. of sections: 2</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">   Section 0:</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Format ID: 00000000 D5 CD D5 02 2E 9C 10 1B 93 97 08 00 2B 2C F9 AE ............+,..</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      No. of properties: 14</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 1, type: 2, value: 1252</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 2, type: 30, value: Test</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 14, type: 30, value: Rainer Klute (Manager)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 15, type: 30, value: Rainer Klute IT-Consulting GmbH</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 5, type: 3, value: 3</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 6, type: 3, value: 2</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 17, type: 3, value: 111</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 23, type: 3, value: 592636</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 11, type: 11, value: false</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 16, type: 11, value: false</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 19, type: 11, value: false</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 22, type: 11, value: false</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 13, type: 4126, value: [B@56a499</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 12, type: 4108, value: [B@506411</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">   Section 1:</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Format ID: 00000000 D5 CD D5 05 2E 9C 10 1B 93 97 08 00 2B 2C F9 AE ............+,..</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      No. of properties: 7</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 0, type: 0, value: {6=Test-JaNein, 5=Test-Zahl, 4=Test-Datum, 3=Test-Text, 2=_PID_LINKBASE}</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 1, type: 2, value: 1252</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 2, type: 65, value: [B@c9ba38</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 3, type: 30, value: This is some text.</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 4, type: 64, value: Wed Jul 17 00:00:00 CEST 2002</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 5, type: 3, value: 27</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">      Property ID: 6, type: 11, value: true</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">No property set stream: "/WordDocument"</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">No property set stream: "/CompObj"</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">No property set stream: "/1Table"</span>
+</div>
+</div>
 <p>There are some interesting items to note:</p>
 <ul>
       
@@ -1153,7 +1716,11 @@ No property set stream: "/1Table"</pre>
       <span class="codefrag">org.apache.poi.hpsf.wellknown</span> package defines constants
       for the "well-known" property IDs. For example, there is the
       definition</p>
-<pre class="code">public final static int PID_AUTHOR = 4;</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">public final static int PID_AUTHOR = 4;</span>
+</div>
+</div>
 <p>These definitions allow you to use symbolic names instead of
       numbers.</p>
 <p>In order to provide support for the other way, too, - i.e. to map
@@ -1458,108 +2025,306 @@ No property set stream: "/1Table"</pre>
 <p>Here's the application's source code. You can also find it in the
       "examples" section of the POI source code distribution. Explanations are
       following below.</p>
-<pre class="code">package org.apache.poi.hpsf.examples;
-
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.apache.poi.hpsf.Property;
-import org.apache.poi.hpsf.PropertySet;
-import org.apache.poi.hpsf.Section;
-import org.apache.poi.hpsf.Section;
-import org.apache.poi.hpsf.SummaryInformation;
-import org.apache.poi.hpsf.Variant;
-import org.apache.poi.hpsf.WritingNotSupportedException;
-import org.apache.poi.hpsf.wellknown.PropertyIDMap;
-import org.apache.poi.hpsf.wellknown.SectionIDMap;
-import org.apache.poi.poifs.filesystem.POIFSFileSystem;
-
-/**
- * &lt;p&gt;This class is a simple sample application showing how to create a property
- * set and write it to disk.&lt;/p&gt;
- *
- * @author Rainer Klute
- * @since 2003-09-12
- */
-public class WriteTitle
-{
-    /**
-     * &lt;p&gt;Runs the example program.&lt;/p&gt;
-     *
-     * @param args Command-line arguments. The first and only command-line
-     * argument is the name of the POI file system to create.
-     * @throws IOException if any I/O exception occurs.
-     * @throws WritingNotSupportedException if HPSF does not (yet) support
-     * writing a certain property type.
-     */
-    public static void main(final String[] args)
-    throws WritingNotSupportedException, IOException
-    {
-        /* Check whether we have exactly one command-line argument. */
-        if (args.length != 1)
-        {
-            System.err.println("Usage: " + WriteTitle.class.getName() +
-                               "destinationPOIFS");
-            System.exit(1);
-        }
-
-        final String fileName = args[0];
-
-        /* Create a mutable property set. Initially it contains a single section
-         * with no properties. */
-        final PropertySet mps = new PropertySet();
-
-        /* Retrieve the section the property set already contains. */
-        final Section ms = mps.getSections().get(0);
-
-        /* Turn the property set into a summary information property. This is
-         * done by setting the format ID of its first section to
-         * SectionIDMap.SUMMARY_INFORMATION_ID. */
-        ms.setFormatID(SectionIDMap.SUMMARY_INFORMATION_ID);
-
-        /* Create an empty property. */
-        final Property p = new Property();
-
-        /* Fill the property with appropriate settings so that it specifies the
-         * document's title. */
-        p.setID(PropertyIDMap.PID_TITLE);
-        p.setType(Variant.VT_LPWSTR);
-        p.setValue("Sample title");
-
-        /* Place the property into the section. */
-        ms.setProperty(p);
-
-        /* Create the POI file system the property set is to be written to. */
-        final POIFSFileSystem poiFs = new POIFSFileSystem();
-
-        /* For writing the property set into a POI file system it has to be
-         * handed over to the POIFS.createDocument() method as an input stream
-         * which produces the bytes making out the property set stream. */
-        final InputStream is = mps.toInputStream();
-
-        /* Create the summary information property set in the POI file
-         * system. It is given the default name most (if not all) summary
-         * information property sets have. */
-        poiFs.createDocument(is, SummaryInformation.DEFAULT_STREAM_NAME);
-
-        /* Write the whole POI file system to a disk file. */
-        poiFs.writeFilesystem(new FileOutputStream(fileName));
-    }
-
-}</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">package org.apache.poi.hpsf.examples;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import java.io.FileOutputStream;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import java.io.IOException;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import java.io.InputStream;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import org.apache.poi.hpsf.Property;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import org.apache.poi.hpsf.PropertySet;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import org.apache.poi.hpsf.Section;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import org.apache.poi.hpsf.Section;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import org.apache.poi.hpsf.SummaryInformation;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import org.apache.poi.hpsf.Variant;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import org.apache.poi.hpsf.WritingNotSupportedException;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import org.apache.poi.hpsf.wellknown.PropertyIDMap;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import org.apache.poi.hpsf.wellknown.SectionIDMap;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import org.apache.poi.poifs.filesystem.POIFSFileSystem;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">/**</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> * &lt;p&gt;This class is a simple sample application showing how to create a property</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> * set and write it to disk.&lt;/p&gt;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> *</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> * @author Rainer Klute</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> * @since 2003-09-12</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">public class WriteTitle</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">{</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    /**</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">     * &lt;p&gt;Runs the example program.&lt;/p&gt;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">     *</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">     * @param args Command-line arguments. The first and only command-line</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">     * argument is the name of the POI file system to create.</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">     * @throws IOException if any I/O exception occurs.</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">     * @throws WritingNotSupportedException if HPSF does not (yet) support</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">     * writing a certain property type.</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">     */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    public static void main(final String[] args)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    throws WritingNotSupportedException, IOException</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    {</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        /* Check whether we have exactly one command-line argument. */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        if (args.length != 1)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        {</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">            System.err.println("Usage: " + WriteTitle.class.getName() +</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">                               "destinationPOIFS");</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">            System.exit(1);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        }</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        final String fileName = args[0];</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        /* Create a mutable property set. Initially it contains a single section</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">         * with no properties. */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        final PropertySet mps = new PropertySet();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        /* Retrieve the section the property set already contains. */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        final Section ms = mps.getSections().get(0);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        /* Turn the property set into a summary information property. This is</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">         * done by setting the format ID of its first section to</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">         * SectionIDMap.SUMMARY_INFORMATION_ID. */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        ms.setFormatID(SectionIDMap.SUMMARY_INFORMATION_ID);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        /* Create an empty property. */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        final Property p = new Property();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        /* Fill the property with appropriate settings so that it specifies the</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">         * document's title. */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        p.setID(PropertyIDMap.PID_TITLE);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        p.setType(Variant.VT_LPWSTR);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        p.setValue("Sample title");</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        /* Place the property into the section. */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        ms.setProperty(p);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        /* Create the POI file system the property set is to be written to. */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        final POIFSFileSystem poiFs = new POIFSFileSystem();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        /* For writing the property set into a POI file system it has to be</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">         * handed over to the POIFS.createDocument() method as an input stream</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">         * which produces the bytes making out the property set stream. */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        final InputStream is = mps.toInputStream();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        /* Create the summary information property set in the POI file</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">         * system. It is given the default name most (if not all) summary</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">         * information property sets have. */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        poiFs.createDocument(is, SummaryInformation.DEFAULT_STREAM_NAME);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        /* Write the whole POI file system to a disk file. */</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">        poiFs.writeFilesystem(new FileOutputStream(fileName));</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    }</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">}</span>
+</div>
+</div>
 <p>The application first checks that there is exactly one single argument
       on the command line: the name of the file to write. If this single
       argument is present, the application stores it in the
       <span class="codefrag">fileName</span> variable. It will be used in the end when the POI
       file system is written to a disk file.</p>
-<pre class="code">if (args.length != 1)
-{
-    System.err.println("Usage: " + WriteTitle.class.getName() +
-                       "destinationPOIFS");
-    System.exit(1);
-}
-final String fileName = args[0];</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">if (args.length != 1)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">{</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    System.err.println("Usage: " + WriteTitle.class.getName() +</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">                       "destinationPOIFS");</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">    System.exit(1);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">}</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">final String fileName = args[0];</span>
+</div>
+</div>
 <p>Let's create a property set now. We cannot use the
       <span class="codefrag">PropertySet</span> class, because it is read-only. It does not have
       a constructor creating an empty property set, and it does not have any
@@ -1567,7 +2332,11 @@ final String fileName = args[0];</pre>
       properties into it.</p>
 <p>The class to use is <span class="codefrag">PropertySet</span>. The sample application calls its no-args
       constructor in order to establish an empty property set:</p>
-<pre class="code">final PropertySet mps = new PropertySet();</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">final PropertySet mps = new PropertySet();</span>
+</div>
+</div>
 <p>As said, we have an empty property set now. Later we will put some
       contents into it.</p>
 <p>The <span class="codefrag">PropertySet</span> created by the no-args constructor
@@ -1576,7 +2345,11 @@ final String fileName = args[0];</pre>
       replace it by another section. We can also add further sections to the
       property set. The sample application decides to retrieve the section
       being already there:</p>
-<pre class="code">final Section ms = mps.getSections().get(0);</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">final Section ms = mps.getSections().get(0);</span>
+</div>
+</div>
 <p>The <span class="codefrag">getSections()</span> method returns the property set's
       sections as a list, i.e. an instance of
       <span class="codefrag">java.util.List</span>. Calling <span class="codefrag">get(0)</span> returns the
@@ -1584,7 +2357,11 @@ final String fileName = args[0];</pre>
 <p>The alternative to retrieving the <span class="codefrag">Section</span> being
       already there would have been to create an new
       <span class="codefrag">Section</span> like this:</p>
-<pre class="code">Section s = new Section();</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">Section s = new Section();</span>
+</div>
+</div>
 <p>The <span class="codefrag">Section</span> the sample application retrieved from
       the <span class="codefrag">PropertySet</span> is still empty. It contains no
       properties and does not have a format ID. As you have read <a href="#sec3">above</a> the format ID of the first section in a
@@ -1596,14 +2373,30 @@ final String fileName = args[0];</pre>
       constant <span class="codefrag">SectionIDMap.SUMMARY_INFORMATION_ID</span>. The sample
       application writes it to the section using the
       <span class="codefrag">setFormatID(byte[])</span> method:</p>
-<pre class="code">ms.setFormatID(SectionIDMap.SUMMARY_INFORMATION_ID);</pre>
-<pre class="code">final Property p = new Property();</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">ms.setFormatID(SectionIDMap.SUMMARY_INFORMATION_ID);</span>
+</div>
+</div>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">final Property p = new Property();</span>
+</div>
+</div>
 <p>A <span class="codefrag">Property</span> object must have an ID, a type, and a
       value (see <a href="#sec3">above</a> for details). The class
       provides methods to set these attributes:</p>
-<pre class="code">p.setID(PropertyIDMap.PID_TITLE);
-p.setType(Variant.VT_LPWSTR);
-p.setValue("Sample title");</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">p.setID(PropertyIDMap.PID_TITLE);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">p.setType(Variant.VT_LPWSTR);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">p.setValue("Sample title");</span>
+</div>
+</div>
 <p>The <span class="codefrag">Property</span> class has a constructor which you can
       use to pass in all three attributes in a single call. See the Javadoc API
       documentation for details!</p>
@@ -1614,24 +2407,40 @@ p.setValue("Sample title");</pre>
       we wanted to keep things simple.</p>
 <p>The property set has to be written to a POI file system. The following
       statement creates it.</p>
-<pre class="code">final POIFSFileSystem poiFs = new POIFSFileSystem();</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">final POIFSFileSystem poiFs = new POIFSFileSystem();</span>
+</div>
+</div>
 <p>Writing the property set includes the step of converting it into a
       sequence of bytes. The <span class="codefrag">PropertySet</span> class has the
       method <span class="codefrag">toInputStream()</span> for this purpose. It returns the
       bytes making out the property set stream as an
       <span class="codefrag">InputStream</span>:</p>
-<pre class="code">final InputStream is = mps.toInputStream();</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">final InputStream is = mps.toInputStream();</span>
+</div>
+</div>
 <p>If you'd read from this input stream you'd receive all the property
       set's bytes. However, it is very likely that you'll never do
       that. Instead you'll pass the input stream to the
       <span class="codefrag">POIFSFileSystem.createDocument()</span> method, like this:</p>
-<pre class="code">poiFs.createDocument(is, SummaryInformation.DEFAULT_STREAM_NAME);</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">poiFs.createDocument(is, SummaryInformation.DEFAULT_STREAM_NAME);</span>
+</div>
+</div>
 <p>Besides the <span class="codefrag">InputStream</span> <span class="codefrag">createDocument()</span>
       takes a second parameter: the name of the document to be created. For a
       SummaryInformation property set stream the default name is available as
       the constant <span class="codefrag">SummaryInformation.DEFAULT_STREAM_NAME</span>.</p>
 <p>The last step is to write the POI file system to a disk file:</p>
-<pre class="code">poiFs.writeFilesystem(new FileOutputStream(fileName));</pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">poiFs.writeFilesystem(new FileOutputStream(fileName));</span>
+</div>
+</div>
 <a name="Further+Reading"></a>
 <h3 class="boxed">Further Reading</h3>
 <p>There are still some aspects of HSPF left which are not covered by this

Modified: poi/site/publish/components/index.html
URL: http://svn.apache.org/viewvc/poi/site/publish/components/index.html?rev=1867502&r1=1867501&r2=1867502&view=diff
==============================================================================
--- poi/site/publish/components/index.html (original)
+++ poi/site/publish/components/index.html Tue Sep 24 23:26:00 2019
@@ -631,7 +631,7 @@ document.write("Last Published: " + docu
 <td colspan="1" rowspan="1">poi-ooxml</td>
           <td colspan="1" rowspan="1"><a href="https://search.maven.org/#search|gav|1|g:org.apache.poi AND a:poi">poi</a>,
               <a href="https://search.maven.org/#search|gav|1|g:org.apache.poi AND a:poi-ooxml-schemas">poi-ooxml-schemas</a>,
-              <a href="https://search.maven.org/#artifactdetails|org.apache.commons|commons-compress|1.18|jar">commons-compress</a> (since POI 4.0.0)<br>
+              <a href="https://search.maven.org/#artifactdetails|org.apache.commons|commons-compress|1.19|jar">commons-compress</a> (since POI 4.0.0)<br>
               For SVG support:
               <a href="https://search.maven.org/#search|gav|1|g:org.apache.xmlgraphics AND a:batik-all">batik-all</a>,
               <a href="https://search.maven.org/#search|gav|1|g:xml-apis AND a:xml-apis-ext">xml-apis-ext</a>,
@@ -674,9 +674,9 @@ document.write("Last Published: " + docu
           <td colspan="1" rowspan="1"><a href="https://search.maven.org/#artifactdetails|org.apache.xmlbeans|xmlbeans|3.1.0|jar">xmlbeans</a>
 <br>
           For signing: 
-          <a href="https://search.maven.org/#artifactdetails|org.bouncycastle|bcpkix-jdk15on|1.61|jar">bcpkix-jdk15on</a>,
-          <a href="https://search.maven.org/#artifactdetails|org.bouncycastle|bcprov-jdk15on|1.61|jar">bcprov-jdk15on</a>,
-          <a href="https://search.maven.org/#artifactdetails|org.apache.santuario|xmlsec|2.1.2|bundle">xmlsec</a>,
+          <a href="https://search.maven.org/#artifactdetails|org.bouncycastle|bcpkix-jdk15on|1.62|jar">bcpkix-jdk15on</a>,
+          <a href="https://search.maven.org/#artifactdetails|org.bouncycastle|bcprov-jdk15on|1.62|jar">bcprov-jdk15on</a>,
+          <a href="https://search.maven.org/#artifactdetails|org.apache.santuario|xmlsec|2.1.3|bundle">xmlsec</a>,
           <a href="https://search.maven.org/#artifactdetails|org.slf4j|slf4j-api|1.7.26|jar">slf4j-api</a>
           </td>
           <td colspan="1" rowspan="1"><a href="https://search.maven.org/#artifactdetails|org.apache.poi|ooxml-security|1.1|jar">ooxml-security-1.1.jar</a></td>



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