sonar fix
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1734809 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
9bf1bf60b2
commit
045123e198
@ -17,63 +17,64 @@
|
|||||||
|
|
||||||
package org.apache.poi.hslf.dev;
|
package org.apache.poi.hslf.dev;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
import java.io.OutputStreamWriter;
|
import java.io.OutputStreamWriter;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
import java.io.Writer;
|
import java.io.Writer;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
|
|
||||||
import org.apache.poi.hslf.record.RecordTypes;
|
import org.apache.poi.hslf.record.RecordTypes;
|
||||||
import org.apache.poi.poifs.filesystem.DocumentEntry;
|
import org.apache.poi.poifs.filesystem.DirectoryNode;
|
||||||
import org.apache.poi.poifs.filesystem.DocumentInputStream;
|
|
||||||
import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
|
import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
|
||||||
|
import org.apache.poi.util.IOUtils;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndian;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility class which dumps raw contents of a ppt file into XML format
|
* Utility class which dumps raw contents of a ppt file into XML format
|
||||||
*
|
|
||||||
* @author Yegor Kozlov
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public final class PPTXMLDump {
|
public final class PPTXMLDump {
|
||||||
public static final int HEADER_SIZE = 8; //size of the record header
|
private static final int HEADER_SIZE = 8; //size of the record header
|
||||||
public static final int PICT_HEADER_SIZE = 25; //size of the picture header
|
private static final int PICT_HEADER_SIZE = 25; //size of the picture header
|
||||||
public final static String PPDOC_ENTRY = "PowerPoint Document";
|
private static final String PPDOC_ENTRY = "PowerPoint Document";
|
||||||
public final static String PICTURES_ENTRY = "Pictures";
|
private static final String PICTURES_ENTRY = "Pictures";
|
||||||
public final static String CR = System.getProperty("line.separator");
|
private static final String CR = System.getProperty("line.separator");
|
||||||
|
|
||||||
protected Writer out;
|
private Writer out;
|
||||||
protected byte[] docstream;
|
private byte[] docstream;
|
||||||
protected byte[] pictstream;
|
private byte[] pictstream;
|
||||||
protected boolean hexHeader = true;
|
private boolean hexHeader = true;
|
||||||
|
|
||||||
public PPTXMLDump(File ppt) throws IOException {
|
public PPTXMLDump(File ppt) throws IOException {
|
||||||
NPOIFSFileSystem fs = new NPOIFSFileSystem(ppt, true);
|
NPOIFSFileSystem fs = new NPOIFSFileSystem(ppt, true);
|
||||||
DocumentInputStream is = null;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
//read the document entry from OLE file system
|
docstream = readEntry(fs, PPDOC_ENTRY);
|
||||||
DocumentEntry entry = (DocumentEntry)fs.getRoot().getEntry(PPDOC_ENTRY);
|
pictstream = readEntry(fs, PICTURES_ENTRY);
|
||||||
docstream = new byte[entry.getSize()];
|
|
||||||
is = fs.createDocumentInputStream(PPDOC_ENTRY);
|
|
||||||
is.read(docstream);
|
|
||||||
is.close();
|
|
||||||
|
|
||||||
entry = (DocumentEntry)fs.getRoot().getEntry(PICTURES_ENTRY);
|
|
||||||
pictstream = new byte[entry.getSize()];
|
|
||||||
is = fs.createDocumentInputStream(PICTURES_ENTRY);
|
|
||||||
is.read(pictstream);
|
|
||||||
} catch(FileNotFoundException e){
|
|
||||||
//silently catch errors if the presentation does not contain pictures
|
|
||||||
} finally {
|
} finally {
|
||||||
if (is != null) is.close();
|
|
||||||
fs.close();
|
fs.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static byte[] readEntry(NPOIFSFileSystem fs, String entry)
|
||||||
|
throws IOException {
|
||||||
|
DirectoryNode dn = fs.getRoot();
|
||||||
|
if (!dn.hasEntry(entry)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
InputStream is = dn.createDocumentInputStream(entry);
|
||||||
|
try {
|
||||||
|
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||||
|
IOUtils.copy(is, bos);
|
||||||
|
return bos.toByteArray();
|
||||||
|
} finally {
|
||||||
|
is.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dump the structure of the supplied PPT file into XML
|
* Dump the structure of the supplied PPT file into XML
|
||||||
* @param outWriter <code>Writer</code> to write out
|
* @param outWriter <code>Writer</code> to write out
|
||||||
@ -111,7 +112,9 @@ public final class PPTXMLDump {
|
|||||||
public void dump(byte[] data, int offset, int length, int padding) throws IOException {
|
public void dump(byte[] data, int offset, int length, int padding) throws IOException {
|
||||||
int pos = offset;
|
int pos = offset;
|
||||||
while (pos <= (offset + length - HEADER_SIZE)){
|
while (pos <= (offset + length - HEADER_SIZE)){
|
||||||
if (pos < 0) break;
|
if (pos < 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
//read record header
|
//read record header
|
||||||
int info = LittleEndian.getUShort(data, pos);
|
int info = LittleEndian.getUShort(data, pos);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user