use of org.apache.poi.hslf.record.SlidePersistAtom in project poi by apache.
the class HSLFTextParagraph method getRecords.
private static Record[] getRecords(Record[] records, int[] startIdx, TextHeaderAtom headerAtom) {
if (records == null) {
throw new NullPointerException("records need to be set.");
}
for (; startIdx[0] < records.length; startIdx[0]++) {
Record r = records[startIdx[0]];
if (r instanceof TextHeaderAtom && (headerAtom == null || r == headerAtom)) {
break;
}
}
if (startIdx[0] >= records.length) {
logger.log(POILogger.INFO, "header atom wasn't found - container might contain only an OutlineTextRefAtom");
return new Record[0];
}
int length;
for (length = 1; startIdx[0] + length < records.length; length++) {
Record r = records[startIdx[0] + length];
if (r instanceof TextHeaderAtom || r instanceof SlidePersistAtom) {
break;
}
}
Record[] result = new Record[length];
System.arraycopy(records, startIdx[0], result, 0, length);
startIdx[0] += length;
return result;
}
use of org.apache.poi.hslf.record.SlidePersistAtom 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();
}
use of org.apache.poi.hslf.record.SlidePersistAtom 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