Fix the indenting on write(), which has been messed up for an age
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@576475 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
58eb278989
commit
7c257557fa
@ -356,95 +356,111 @@ public class HSLFSlideShow extends POIDocument
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writes out the slideshow file the is represented by an instance of
|
* Writes out the slideshow file the is represented by an instance
|
||||||
* this class
|
* of this class.
|
||||||
* @param out The OutputStream to write to.
|
* It will write out the common OLE2 streams. If you require all
|
||||||
* @throws IOException If there is an unexpected IOException from the passed
|
* streams to be written out, pass in preserveNodes
|
||||||
* in OutputStream
|
* @param out The OutputStream to write to.
|
||||||
*/
|
* @throws IOException If there is an unexpected IOException from
|
||||||
public void write(OutputStream out) throws IOException {
|
* the passed in OutputStream
|
||||||
// Get a new Filesystem to write into
|
*/
|
||||||
POIFSFileSystem outFS = new POIFSFileSystem();
|
public void write(OutputStream out) throws IOException {
|
||||||
|
// Write out, but only the common streams
|
||||||
|
write(out,false);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Writes out the slideshow file the is represented by an instance
|
||||||
|
* of this class.
|
||||||
|
* If you require all streams to be written out (eg Marcos, embeded
|
||||||
|
* documents), then set preserveNodes to true
|
||||||
|
* @param out The OutputStream to write to.
|
||||||
|
* @param preserveNodes Should all OLE2 streams be written back out, or only the common ones?
|
||||||
|
* @throws IOException If there is an unexpected IOException from
|
||||||
|
* the passed in OutputStream
|
||||||
|
*/
|
||||||
|
public void write(OutputStream out, boolean preserveNodes) throws IOException {
|
||||||
|
// Get a new Filesystem to write into
|
||||||
|
POIFSFileSystem outFS = new POIFSFileSystem();
|
||||||
|
|
||||||
// Write out the Property Streams
|
// Write out the Property Streams
|
||||||
writeProperties(outFS);
|
writeProperties(outFS);
|
||||||
|
|
||||||
|
|
||||||
// For position dependent records, hold where they were and now are
|
// For position dependent records, hold where they were and now are
|
||||||
// As we go along, update, and hand over, to any Position Dependent
|
// As we go along, update, and hand over, to any Position Dependent
|
||||||
// records we happen across
|
// records we happen across
|
||||||
Hashtable oldToNewPositions = new Hashtable();
|
Hashtable oldToNewPositions = new Hashtable();
|
||||||
|
|
||||||
// First pass - figure out where all the position dependent
|
|
||||||
// records are going to end up, in the new scheme
|
|
||||||
// (Annoyingly, some powerpoing files have PersistPtrHolders
|
|
||||||
// that reference slides after the PersistPtrHolder)
|
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
||||||
for(int i=0; i<_records.length; i++) {
|
|
||||||
if(_records[i] instanceof PositionDependentRecord) {
|
|
||||||
PositionDependentRecord pdr = (PositionDependentRecord)_records[i];
|
|
||||||
int oldPos = pdr.getLastOnDiskOffset();
|
|
||||||
int newPos = baos.size();
|
|
||||||
pdr.setLastOnDiskOffset(newPos);
|
|
||||||
oldToNewPositions.put(new Integer(oldPos),new Integer(newPos));
|
|
||||||
//System.out.println(oldPos + " -> " + newPos);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Dummy write out, so the position winds on properly
|
|
||||||
_records[i].writeOut(baos);
|
|
||||||
}
|
|
||||||
|
|
||||||
// No go back through, actually writing ourselves out
|
// First pass - figure out where all the position dependent
|
||||||
baos.reset();
|
// records are going to end up, in the new scheme
|
||||||
for(int i=0; i<_records.length; i++) {
|
// (Annoyingly, some powerpoing files have PersistPtrHolders
|
||||||
// For now, we're only handling PositionDependentRecord's that
|
// that reference slides after the PersistPtrHolder)
|
||||||
// happen at the top level.
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
// In future, we'll need the handle them everywhere, but that's
|
for(int i=0; i<_records.length; i++) {
|
||||||
// a bit trickier
|
if(_records[i] instanceof PositionDependentRecord) {
|
||||||
if(_records[i] instanceof PositionDependentRecord) {
|
PositionDependentRecord pdr = (PositionDependentRecord)_records[i];
|
||||||
// We've already figured out their new location, and
|
int oldPos = pdr.getLastOnDiskOffset();
|
||||||
// told them that
|
int newPos = baos.size();
|
||||||
// Tell them of the positions of the other records though
|
pdr.setLastOnDiskOffset(newPos);
|
||||||
PositionDependentRecord pdr = (PositionDependentRecord)_records[i];
|
oldToNewPositions.put(new Integer(oldPos),new Integer(newPos));
|
||||||
pdr.updateOtherRecordReferences(oldToNewPositions);
|
//System.out.println(oldPos + " -> " + newPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Whatever happens, write out that record tree
|
// Dummy write out, so the position winds on properly
|
||||||
_records[i].writeOut(baos);
|
_records[i].writeOut(baos);
|
||||||
}
|
}
|
||||||
// Update our cached copy of the bytes that make up the PPT stream
|
|
||||||
_docstream = baos.toByteArray();
|
|
||||||
|
|
||||||
// Write the PPT stream into the POIFS layer
|
// No go back through, actually writing ourselves out
|
||||||
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
|
baos.reset();
|
||||||
outFS.createDocument(bais,"PowerPoint Document");
|
for(int i=0; i<_records.length; i++) {
|
||||||
|
// For now, we're only handling PositionDependentRecord's that
|
||||||
|
// happen at the top level.
|
||||||
|
// In future, we'll need the handle them everywhere, but that's
|
||||||
|
// a bit trickier
|
||||||
|
if(_records[i] instanceof PositionDependentRecord) {
|
||||||
|
// We've already figured out their new location, and
|
||||||
|
// told them that
|
||||||
|
// Tell them of the positions of the other records though
|
||||||
|
PositionDependentRecord pdr = (PositionDependentRecord)_records[i];
|
||||||
|
pdr.updateOtherRecordReferences(oldToNewPositions);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Whatever happens, write out that record tree
|
||||||
|
_records[i].writeOut(baos);
|
||||||
|
}
|
||||||
|
// Update our cached copy of the bytes that make up the PPT stream
|
||||||
|
_docstream = baos.toByteArray();
|
||||||
|
|
||||||
|
// Write the PPT stream into the POIFS layer
|
||||||
|
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
|
||||||
|
outFS.createDocument(bais,"PowerPoint Document");
|
||||||
|
|
||||||
|
|
||||||
// Update and write out the Current User atom
|
// Update and write out the Current User atom
|
||||||
int oldLastUserEditAtomPos = (int)currentUser.getCurrentEditOffset();
|
int oldLastUserEditAtomPos = (int)currentUser.getCurrentEditOffset();
|
||||||
Integer newLastUserEditAtomPos = (Integer)oldToNewPositions.get(new Integer(oldLastUserEditAtomPos));
|
Integer newLastUserEditAtomPos = (Integer)oldToNewPositions.get(new Integer(oldLastUserEditAtomPos));
|
||||||
if(newLastUserEditAtomPos == null) {
|
if(newLastUserEditAtomPos == null) {
|
||||||
throw new HSLFException("Couldn't find the new location of the UserEditAtom that used to be at " + oldLastUserEditAtomPos);
|
throw new HSLFException("Couldn't find the new location of the UserEditAtom that used to be at " + oldLastUserEditAtomPos);
|
||||||
}
|
}
|
||||||
currentUser.setCurrentEditOffset(newLastUserEditAtomPos.intValue());
|
currentUser.setCurrentEditOffset(newLastUserEditAtomPos.intValue());
|
||||||
currentUser.writeToFS(outFS);
|
currentUser.writeToFS(outFS);
|
||||||
|
|
||||||
|
|
||||||
// Write any pictures, into another stream
|
// Write any pictures, into another stream
|
||||||
if (_pictures != null) {
|
if (_pictures != null) {
|
||||||
ByteArrayOutputStream pict = new ByteArrayOutputStream();
|
ByteArrayOutputStream pict = new ByteArrayOutputStream();
|
||||||
for (int i = 0; i < _pictures.length; i++ ) {
|
for (int i = 0; i < _pictures.length; i++ ) {
|
||||||
_pictures[i].write(pict);
|
_pictures[i].write(pict);
|
||||||
}
|
}
|
||||||
outFS.createDocument(
|
outFS.createDocument(
|
||||||
new ByteArrayInputStream(pict.toByteArray()), "Pictures"
|
new ByteArrayInputStream(pict.toByteArray()), "Pictures"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the POIFSFileSystem object out to the underlying stream
|
// Send the POIFSFileSystem object out to the underlying stream
|
||||||
outFS.writeFilesystem(out);
|
outFS.writeFilesystem(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ******************* adding methods follow ********************* */
|
/* ******************* adding methods follow ********************* */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user