Search in sources :

Example 61 with HSLFSlideShow

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();
}
Also used : PictureType(org.apache.poi.sl.usermodel.PictureData.PictureType) FileOutputStream(java.io.FileOutputStream) HSLFPictureData(org.apache.poi.hslf.usermodel.HSLFPictureData) HSLFSlideShow(org.apache.poi.hslf.usermodel.HSLFSlideShow) HSLFSlideShowImpl(org.apache.poi.hslf.usermodel.HSLFSlideShowImpl)

Example 62 with HSLFSlideShow

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;
}
Also used : ExObjList(org.apache.poi.hslf.record.ExObjList) ExObjRefAtom(org.apache.poi.hslf.record.ExObjRefAtom) HSLFEscherClientDataRecord(org.apache.poi.hslf.record.HSLFEscherClientDataRecord) Record(org.apache.poi.hslf.record.Record) EscherContainerRecord(org.apache.poi.ddf.EscherContainerRecord) HSLFSlideShow(org.apache.poi.hslf.usermodel.HSLFSlideShow) ExVideoContainer(org.apache.poi.hslf.record.ExVideoContainer) ExMCIMovie(org.apache.poi.hslf.record.ExMCIMovie)

Example 63 with HSLFSlideShow

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;
}
Also used : ExEmbed(org.apache.poi.hslf.record.ExEmbed) HSLFObjectData(org.apache.poi.hslf.usermodel.HSLFObjectData) HSLFSlideShow(org.apache.poi.hslf.usermodel.HSLFSlideShow)

Example 64 with HSLFSlideShow

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;
}
Also used : ExObjList(org.apache.poi.hslf.record.ExObjList) ExEmbed(org.apache.poi.hslf.record.ExEmbed) HSLFEscherClientDataRecord(org.apache.poi.hslf.record.HSLFEscherClientDataRecord) Record(org.apache.poi.hslf.record.Record) EscherContainerRecord(org.apache.poi.ddf.EscherContainerRecord) EscherSpRecord(org.apache.poi.ddf.EscherSpRecord) HSLFSlideShow(org.apache.poi.hslf.usermodel.HSLFSlideShow)

Example 65 with HSLFSlideShow

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("");
}
Also used : SlideListWithText(org.apache.poi.hslf.record.SlideListWithText) SlidePersistAtom(org.apache.poi.hslf.record.SlidePersistAtom) PersistPtrHolder(org.apache.poi.hslf.record.PersistPtrHolder) ByteArrayOutputStream(java.io.ByteArrayOutputStream) Document(org.apache.poi.hslf.record.Document) HSLFSlideShow(org.apache.poi.hslf.usermodel.HSLFSlideShow) HSLFSlideShowImpl(org.apache.poi.hslf.usermodel.HSLFSlideShowImpl) NotesAtom(org.apache.poi.hslf.record.NotesAtom) PositionDependentRecord(org.apache.poi.hslf.record.PositionDependentRecord) SlideAtom(org.apache.poi.hslf.record.SlideAtom) Slide(org.apache.poi.hslf.record.Slide) Record(org.apache.poi.hslf.record.Record) PositionDependentRecord(org.apache.poi.hslf.record.PositionDependentRecord) Notes(org.apache.poi.hslf.record.Notes)

Aggregations

HSLFSlideShow (org.apache.poi.hslf.usermodel.HSLFSlideShow)69 Test (org.junit.Test)42 HSLFSlide (org.apache.poi.hslf.usermodel.HSLFSlide)39 HSLFShape (org.apache.poi.hslf.usermodel.HSLFShape)17 ByteArrayInputStream (java.io.ByteArrayInputStream)12 ByteArrayOutputStream (java.io.ByteArrayOutputStream)12 InputStream (java.io.InputStream)10 FileOutputStream (java.io.FileOutputStream)9 HSLFTextRun (org.apache.poi.hslf.usermodel.HSLFTextRun)9 HSLFTextParagraph (org.apache.poi.hslf.usermodel.HSLFTextParagraph)8 Rectangle2D (java.awt.geom.Rectangle2D)7 FileInputStream (java.io.FileInputStream)7 HSLFPictureData (org.apache.poi.hslf.usermodel.HSLFPictureData)7 HSSFWorkbook (org.apache.poi.hssf.usermodel.HSSFWorkbook)7 HWPFDocument (org.apache.poi.hwpf.HWPFDocument)7 HSLFSlideShowImpl (org.apache.poi.hslf.usermodel.HSLFSlideShowImpl)6 HSLFTextBox (org.apache.poi.hslf.usermodel.HSLFTextBox)5 POIDataSamples (org.apache.poi.POIDataSamples)4 Record (org.apache.poi.hslf.record.Record)4 HSLFHyperlink (org.apache.poi.hslf.usermodel.HSLFHyperlink)4