use of org.apache.poi.hslf.usermodel.HSLFSlideShow in project poi by apache.
the class ImageExtractor method main.
public static void main(String[] args) throws IOException {
if (args.length < 1) {
System.err.println("Usage:");
System.err.println("\tImageExtractor <file>");
return;
}
HSLFSlideShow ppt = new HSLFSlideShow(new HSLFSlideShowImpl(args[0]));
//extract all pictures contained in the presentation
int i = 0;
for (HSLFPictureData pict : ppt.getPictureData()) {
// picture data
byte[] data = pict.getData();
PictureType type = pict.getType();
FileOutputStream out = new FileOutputStream("pict_" + i++ + type.extension);
out.write(data);
out.close();
}
ppt.close();
}
use of org.apache.poi.hslf.usermodel.HSLFSlideShow in project poi by apache.
the class MovieShape method getPath.
/**
* @return UNC or local path to a video file
*/
@SuppressWarnings("resource")
public String getPath() {
ExObjRefAtom oe = getClientDataRecord(RecordTypes.ExObjRefAtom.typeID);
int idx = oe.getExObjIdRef();
HSLFSlideShow ppt = getSheet().getSlideShow();
ExObjList lst = (ExObjList) ppt.getDocumentRecord().findFirstOfType(RecordTypes.ExObjList.typeID);
if (lst == null) {
return null;
}
Record[] r = lst.getChildRecords();
for (int i = 0; i < r.length; i++) {
if (r[i] instanceof ExMCIMovie) {
ExMCIMovie mci = (ExMCIMovie) r[i];
ExVideoContainer exVideo = mci.getExVideo();
int objectId = exVideo.getExMediaAtom().getObjectId();
if (objectId == idx) {
return exVideo.getPathAtom().getText();
}
}
}
return null;
}
use of org.apache.poi.hslf.usermodel.HSLFSlideShow in project poi by apache.
the class OLEShape method getObjectData.
/**
* Returns unique identifier for the OLE object.
*
* @return the unique identifier for the OLE object
*/
@SuppressWarnings("resource")
public HSLFObjectData getObjectData() {
HSLFSlideShow ppt = getSheet().getSlideShow();
HSLFObjectData[] ole = ppt.getEmbeddedObjects();
//persist reference
ExEmbed exEmbed = getExEmbed();
HSLFObjectData data = null;
if (exEmbed != null) {
int ref = exEmbed.getExOleObjAtom().getObjStgDataRef();
for (int i = 0; i < ole.length; i++) {
if (ole[i].getExOleObjStg().getPersistId() == ref) {
data = ole[i];
}
}
}
if (data == null) {
LOG.log(POILogger.WARN, "OLE data not found");
}
return data;
}
use of org.apache.poi.hslf.usermodel.HSLFSlideShow in project poi by apache.
the class OLEShape method getExEmbed.
/**
* Return the record container for this embedded object.
*
* <p>
* It contains:
* 1. ExEmbedAtom.(4045)
* 2. ExOleObjAtom (4035)
* 3. CString (4026), Instance MenuName (1) used for menus and the Links dialog box.
* 4. CString (4026), Instance ProgID (2) that stores the OLE Programmatic Identifier.
* A ProgID is a string that uniquely identifies a given object.
* 5. CString (4026), Instance ClipboardName (3) that appears in the paste special dialog.
* 6. MetaFile( 4033), optional
* </p>
*/
@SuppressWarnings("resource")
public ExEmbed getExEmbed() {
if (_exEmbed == null) {
HSLFSlideShow ppt = getSheet().getSlideShow();
ExObjList lst = ppt.getDocumentRecord().getExObjList(false);
if (lst == null) {
LOG.log(POILogger.WARN, "ExObjList not found");
return null;
}
int id = getObjectID();
Record[] ch = lst.getChildRecords();
for (int i = 0; i < ch.length; i++) {
if (ch[i] instanceof ExEmbed) {
ExEmbed embd = (ExEmbed) ch[i];
if (embd.getExOleObjAtom().getObjID() == id)
_exEmbed = embd;
}
}
}
return _exEmbed;
}
use of org.apache.poi.hslf.usermodel.HSLFSlideShow in project poi by apache.
the class SlideIdListing method main.
public static void main(String[] args) throws IOException {
if (args.length < 1) {
System.err.println("Need to give a filename");
System.exit(1);
}
// Create the slideshow object, for normal working with
HSLFSlideShowImpl hss = new HSLFSlideShowImpl(args[0]);
HSLFSlideShow ss = new HSLFSlideShow(hss);
// Grab the base contents
fileContents = hss.getUnderlyingBytes();
Record[] records = hss.getRecords();
Record[] latestRecords = ss.getMostRecentCoreRecords();
// Grab any records that interest us
Document document = null;
for (int i = 0; i < latestRecords.length; i++) {
if (latestRecords[i] instanceof Document) {
document = (Document) latestRecords[i];
}
}
System.out.println("");
// Look for SlidePersistAtoms, and report what they have to
// say about possible slide IDs
SlideListWithText[] slwts = document.getSlideListWithTexts();
for (int i = 0; i < slwts.length; i++) {
Record[] cr = slwts[i].getChildRecords();
for (int j = 0; j < cr.length; j++) {
if (cr[j] instanceof SlidePersistAtom) {
SlidePersistAtom spa = (SlidePersistAtom) cr[j];
System.out.println("SlidePersistAtom knows about slide:");
System.out.println("\t" + spa.getRefID());
System.out.println("\t" + spa.getSlideIdentifier());
}
}
}
System.out.println("");
// Look for latest core records that are slides or notes
for (int i = 0; i < latestRecords.length; i++) {
if (latestRecords[i] instanceof Slide) {
Slide s = (Slide) latestRecords[i];
SlideAtom sa = s.getSlideAtom();
System.out.println("Found the latest version of a slide record:");
System.out.println("\tCore ID is " + s.getSheetId());
System.out.println("\t(Core Records count is " + i + ")");
System.out.println("\tDisk Position is " + s.getLastOnDiskOffset());
System.out.println("\tMaster ID is " + sa.getMasterID());
System.out.println("\tNotes ID is " + sa.getNotesID());
}
}
System.out.println("");
for (int i = 0; i < latestRecords.length; i++) {
if (latestRecords[i] instanceof Notes) {
Notes n = (Notes) latestRecords[i];
NotesAtom na = n.getNotesAtom();
System.out.println("Found the latest version of a notes record:");
System.out.println("\tCore ID is " + n.getSheetId());
System.out.println("\t(Core Records count is " + i + ")");
System.out.println("\tDisk Position is " + n.getLastOnDiskOffset());
System.out.println("\tMatching slide is " + na.getSlideID());
}
}
System.out.println("");
// Find any persist ones first
int pos = 0;
for (int i = 0; i < records.length; i++) {
Record r = records[i];
if (r.getRecordType() == 6001l) {
// PersistPtrFullBlock
System.out.println("Found PersistPtrFullBlock at " + pos + " (" + Integer.toHexString(pos) + ")");
}
if (r.getRecordType() == 6002l) {
// PersistPtrIncrementalBlock
System.out.println("Found PersistPtrIncrementalBlock at " + pos + " (" + Integer.toHexString(pos) + ")");
PersistPtrHolder pph = (PersistPtrHolder) r;
// Check the sheet offsets
int[] sheetIDs = pph.getKnownSlideIDs();
Map<Integer, Integer> sheetOffsets = pph.getSlideLocationsLookup();
for (int j = 0; j < sheetIDs.length; j++) {
Integer id = sheetIDs[j];
Integer offset = sheetOffsets.get(id);
System.out.println(" Knows about sheet " + id);
System.out.println(" That sheet lives at " + offset);
Record atPos = findRecordAtPos(offset.intValue());
System.out.println(" The record at that pos is of type " + atPos.getRecordType());
System.out.println(" The record at that pos has class " + atPos.getClass().getName());
if (!(atPos instanceof PositionDependentRecord)) {
System.out.println(" ** The record class isn't position aware! **");
}
}
}
// Increase the position by the on disk size
ByteArrayOutputStream baos = new ByteArrayOutputStream();
r.writeOut(baos);
pos += baos.size();
}
ss.close();
System.out.println("");
}
Aggregations