Search in sources :

Example 21 with HSLFSlideShowImpl

use of org.apache.poi.hslf.usermodel.HSLFSlideShowImpl 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 22 with HSLFSlideShowImpl

use of org.apache.poi.hslf.usermodel.HSLFSlideShowImpl in project poi by apache.

the class UserEditAndPersistListing 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 ss = new HSLFSlideShowImpl(args[0]);
    fileContents = ss.getUnderlyingBytes();
    System.out.println("");
    // Find any persist ones first
    int pos = 0;
    for (Record r : ss.getRecords()) {
        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
            Map<Integer, Integer> sheetOffsets = pph.getSlideLocationsLookup();
            for (int id : pph.getKnownSlideIDs()) {
                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();
    }
    System.out.println("");
    pos = 0;
    // Now look for UserEditAtoms
    for (Record r : ss.getRecords()) {
        if (r instanceof UserEditAtom) {
            UserEditAtom uea = (UserEditAtom) r;
            System.out.println("Found UserEditAtom at " + pos + " (" + Integer.toHexString(pos) + ")");
            System.out.println("  lastUserEditAtomOffset = " + uea.getLastUserEditAtomOffset());
            System.out.println("  persistPointersOffset  = " + uea.getPersistPointersOffset());
            System.out.println("  docPersistRef          = " + uea.getDocPersistRef());
            System.out.println("  maxPersistWritten      = " + uea.getMaxPersistWritten());
        }
        // Increase the position by the on disk size
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        r.writeOut(baos);
        pos += baos.size();
    }
    System.out.println("");
    // Query the CurrentUserAtom
    CurrentUserAtom cua = ss.getCurrentUserAtom();
    System.out.println("Checking Current User Atom");
    System.out.println("  Thinks the CurrentEditOffset is " + cua.getCurrentEditOffset());
    System.out.println("");
    ss.close();
}
Also used : PositionDependentRecord(org.apache.poi.hslf.record.PositionDependentRecord) PersistPtrHolder(org.apache.poi.hslf.record.PersistPtrHolder) Record(org.apache.poi.hslf.record.Record) PositionDependentRecord(org.apache.poi.hslf.record.PositionDependentRecord) ByteArrayOutputStream(java.io.ByteArrayOutputStream) UserEditAtom(org.apache.poi.hslf.record.UserEditAtom) CurrentUserAtom(org.apache.poi.hslf.record.CurrentUserAtom) HSLFSlideShowImpl(org.apache.poi.hslf.usermodel.HSLFSlideShowImpl)

Example 23 with HSLFSlideShowImpl

use of org.apache.poi.hslf.usermodel.HSLFSlideShowImpl in project poi by apache.

the class SLWTTextListing 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);
    }
    HSLFSlideShowImpl ss = new HSLFSlideShowImpl(args[0]);
    // Find the documents, and then their SLWT
    Record[] records = ss.getRecords();
    for (int i = 0; i < records.length; i++) {
        if (records[i] instanceof Document) {
            Record docRecord = records[i];
            Record[] docChildren = docRecord.getChildRecords();
            for (int j = 0; j < docChildren.length; j++) {
                if (docChildren[j] instanceof SlideListWithText) {
                    System.out.println("Found SLWT at pos " + j + " in the Document at " + i);
                    System.out.println("  Has " + docChildren[j].getChildRecords().length + " children");
                    // Grab the SlideAtomSet's, which contain
                    //  a SlidePersistAtom and then a bunch of text
                    //  + related records
                    SlideListWithText slwt = (SlideListWithText) docChildren[j];
                    SlideListWithText.SlideAtomsSet[] thisSets = slwt.getSlideAtomsSets();
                    System.out.println("  Has " + thisSets.length + " AtomSets in it");
                    // Loop over the sets, showing what they contain
                    for (int k = 0; k < thisSets.length; k++) {
                        SlidePersistAtom spa = thisSets[k].getSlidePersistAtom();
                        System.out.println("    " + k + " has slide id " + spa.getSlideIdentifier());
                        System.out.println("    " + k + " has ref id " + spa.getRefID());
                        // Loop over the records, printing the text
                        Record[] slwtc = thisSets[k].getSlideRecords();
                        for (int l = 0; l < slwtc.length; l++) {
                            String text = null;
                            if (slwtc[l] instanceof TextBytesAtom) {
                                TextBytesAtom tba = (TextBytesAtom) slwtc[l];
                                text = tba.getText();
                            }
                            if (slwtc[l] instanceof TextCharsAtom) {
                                TextCharsAtom tca = (TextCharsAtom) slwtc[l];
                                text = tca.getText();
                            }
                            if (text != null) {
                                text = text.replace('\r', '\n');
                                System.out.println("        ''" + text + "''");
                            }
                        }
                    }
                }
            }
        }
    }
    ss.close();
}
Also used : SlideListWithText(org.apache.poi.hslf.record.SlideListWithText) SlidePersistAtom(org.apache.poi.hslf.record.SlidePersistAtom) Record(org.apache.poi.hslf.record.Record) TextCharsAtom(org.apache.poi.hslf.record.TextCharsAtom) Document(org.apache.poi.hslf.record.Document) TextBytesAtom(org.apache.poi.hslf.record.TextBytesAtom) HSLFSlideShowImpl(org.apache.poi.hslf.usermodel.HSLFSlideShowImpl)

Example 24 with HSLFSlideShowImpl

use of org.apache.poi.hslf.usermodel.HSLFSlideShowImpl 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)

Example 25 with HSLFSlideShowImpl

use of org.apache.poi.hslf.usermodel.HSLFSlideShowImpl in project poi by apache.

the class TestDocumentEncryption method cryptoAPIDecryptionOther.

@Test
public void cryptoAPIDecryptionOther() throws Exception {
    Biff8EncryptionKey.setCurrentUserPassword("hello");
    String[] encPpts = { "Password_Protected-56-hello.ppt", "Password_Protected-hello.ppt", "Password_Protected-np-hello.ppt" };
    for (String pptFile : encPpts) {
        try {
            NPOIFSFileSystem fs = new NPOIFSFileSystem(slTests.getFile(pptFile), true);
            HSLFSlideShowImpl hss = new HSLFSlideShowImpl(fs);
            new HSLFSlideShow(hss).close();
            fs.close();
        } catch (EncryptedPowerPointFileException e) {
            fail(pptFile + " can't be decrypted");
        }
    }
}
Also used : NPOIFSFileSystem(org.apache.poi.poifs.filesystem.NPOIFSFileSystem) EncryptedPowerPointFileException(org.apache.poi.hslf.exceptions.EncryptedPowerPointFileException) HSLFSlideShow(org.apache.poi.hslf.usermodel.HSLFSlideShow) HSLFSlideShowImpl(org.apache.poi.hslf.usermodel.HSLFSlideShowImpl) Test(org.junit.Test)

Aggregations

HSLFSlideShowImpl (org.apache.poi.hslf.usermodel.HSLFSlideShowImpl)27 Test (org.junit.Test)11 Record (org.apache.poi.hslf.record.Record)9 ByteArrayOutputStream (java.io.ByteArrayOutputStream)8 HSLFSlideShow (org.apache.poi.hslf.usermodel.HSLFSlideShow)7 ByteArrayInputStream (java.io.ByteArrayInputStream)6 NPOIFSFileSystem (org.apache.poi.poifs.filesystem.NPOIFSFileSystem)5 POIFSFileSystem (org.apache.poi.poifs.filesystem.POIFSFileSystem)5 SlideListWithText (org.apache.poi.hslf.record.SlideListWithText)4 HSLFPictureData (org.apache.poi.hslf.usermodel.HSLFPictureData)4 Before (org.junit.Before)4 InputStream (java.io.InputStream)3 POIDataSamples (org.apache.poi.POIDataSamples)3 Document (org.apache.poi.hslf.record.Document)3 PersistPtrHolder (org.apache.poi.hslf.record.PersistPtrHolder)3 TextBytesAtom (org.apache.poi.hslf.record.TextBytesAtom)3 TextCharsAtom (org.apache.poi.hslf.record.TextCharsAtom)3 File (java.io.File)2 CurrentUserAtom (org.apache.poi.hslf.record.CurrentUserAtom)2 Notes (org.apache.poi.hslf.record.Notes)2