mirror of https://github.com/apache/poi.git
Support for DocumentAtom
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353715 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
f52e1b0daf
commit
c2a52394df
|
@ -0,0 +1,191 @@
|
||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
Copyright 2002-2004 Apache Software Foundation
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
package org.apache.poi.hslf.record;
|
||||||
|
|
||||||
|
import org.apache.poi.util.LittleEndian;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A Document Atom (type 1001). Holds misc information on the PowerPoint
|
||||||
|
* document, lots of them size and scale related.
|
||||||
|
*
|
||||||
|
* @author Nick Burch
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class DocumentAtom extends RecordAtom
|
||||||
|
{
|
||||||
|
private byte[] _header;
|
||||||
|
private static long _type = 1001l;
|
||||||
|
|
||||||
|
private long slideSizeX; // PointAtom, assume 1st 4 bytes = X
|
||||||
|
private long slideSizeY; // PointAtom, assume 2nd 4 bytes = Y
|
||||||
|
private long notesSizeX; // PointAtom, assume 1st 4 bytes = X
|
||||||
|
private long notesSizeY; // PointAtom, assume 2nd 4 bytes = Y
|
||||||
|
private long serverZoomFrom; // RatioAtom, assume 1st 4 bytes = from
|
||||||
|
private long serverZoomTo; // RatioAtom, assume 2nd 4 bytes = to
|
||||||
|
|
||||||
|
private long notesMasterPersist; // ref to NotesMaster, 0 if none
|
||||||
|
private long handoutMasterPersist; // ref to HandoutMaster, 0 if none
|
||||||
|
|
||||||
|
private int firstSlideNum;
|
||||||
|
private int slideSizeType; // see DocumentAtom.SlideSize
|
||||||
|
|
||||||
|
private byte saveWithFonts;
|
||||||
|
private byte omitTitlePlace;
|
||||||
|
private byte rightToLeft;
|
||||||
|
private byte showComments;
|
||||||
|
|
||||||
|
private byte[] reserved;
|
||||||
|
|
||||||
|
|
||||||
|
public long getSlideSizeX() { return slideSizeX; }
|
||||||
|
public long getSlideSizeY() { return slideSizeY; }
|
||||||
|
public long getNotesSizeX() { return notesSizeX; }
|
||||||
|
public long getNotesSizeY() { return notesSizeY; }
|
||||||
|
public void setSlideSizeX(long x) { slideSizeX = x; }
|
||||||
|
public void setSlideSizeY(long y) { slideSizeY = y; }
|
||||||
|
public void setNotesSizeX(long x) { notesSizeX = x; }
|
||||||
|
public void setNotesSizeY(long y) { notesSizeY = y; }
|
||||||
|
|
||||||
|
public long getServerZoomFrom() { return serverZoomFrom; }
|
||||||
|
public long getServerZoomTo() { return serverZoomTo; }
|
||||||
|
public void setServerZoomFrom(long zoom) { serverZoomFrom = zoom; }
|
||||||
|
public void setServerZoomTo(long zoom) { serverZoomTo = zoom; }
|
||||||
|
|
||||||
|
/** Returns a reference to the NotesMaster, or 0 if none */
|
||||||
|
public long getNotesMasterPersist() { return notesMasterPersist; }
|
||||||
|
/** Returns a reference to the HandoutMaster, or 0 if none */
|
||||||
|
public long getHandoutMasterPersist() { return handoutMasterPersist; }
|
||||||
|
|
||||||
|
public int getFirstSlideNum() { return firstSlideNum; }
|
||||||
|
|
||||||
|
/** The Size of the Document's slides, @see DocumentAtom.SlideSize for values */
|
||||||
|
public int getSlideSizeType() { return slideSizeType; }
|
||||||
|
|
||||||
|
/** Was the document saved with True Type fonts embeded? */
|
||||||
|
public boolean getSaveWithFonts() {
|
||||||
|
if(saveWithFonts == 0) { return false; } else { return true; } }
|
||||||
|
/** Have the placeholders on the title slide been omitted? */
|
||||||
|
public boolean getOmitTitlePlace() {
|
||||||
|
if(omitTitlePlace == 0) { return false; } else { return true; } }
|
||||||
|
/** Is this a Bi-Directional PPT Doc? */
|
||||||
|
public boolean getRightToLeft() {
|
||||||
|
if(rightToLeft == 0) { return false; } else { return true; } }
|
||||||
|
/** Are comment shapes visible? */
|
||||||
|
public boolean getShowComments() {
|
||||||
|
if(showComments == 0) { return false; } else { return true; } }
|
||||||
|
|
||||||
|
|
||||||
|
/* *************** record code follows ********************** */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For the Document Atom
|
||||||
|
*/
|
||||||
|
protected DocumentAtom(byte[] source, int start, int len) {
|
||||||
|
// Sanity Checking
|
||||||
|
if(len < 48) { len = 48; }
|
||||||
|
|
||||||
|
// Get the header
|
||||||
|
_header = new byte[8];
|
||||||
|
System.arraycopy(source,start,_header,0,8);
|
||||||
|
|
||||||
|
// Get the sizes and zoom ratios
|
||||||
|
slideSizeX = LittleEndian.getInt(source,start+0+8);
|
||||||
|
slideSizeY = LittleEndian.getInt(source,start+4+8);
|
||||||
|
notesSizeX = LittleEndian.getInt(source,start+8+8);
|
||||||
|
notesSizeY = LittleEndian.getInt(source,start+12+8);
|
||||||
|
serverZoomFrom = LittleEndian.getInt(source,start+16+8);
|
||||||
|
serverZoomTo = LittleEndian.getInt(source,start+20+8);
|
||||||
|
|
||||||
|
// Get the master persists
|
||||||
|
notesMasterPersist = LittleEndian.getInt(source,start+24+8);
|
||||||
|
handoutMasterPersist = LittleEndian.getInt(source,start+28+8);
|
||||||
|
|
||||||
|
// Get the ID of the first slide
|
||||||
|
firstSlideNum = (int)LittleEndian.getShort(source,start+32+8);
|
||||||
|
|
||||||
|
// Get the slide size type
|
||||||
|
slideSizeType = (int)LittleEndian.getShort(source,start+34+8);
|
||||||
|
|
||||||
|
// Get the booleans as bytes
|
||||||
|
saveWithFonts = source[start+36+8];
|
||||||
|
omitTitlePlace = source[start+37+8];
|
||||||
|
rightToLeft = source[start+38+8];
|
||||||
|
showComments = source[start+39+8];
|
||||||
|
|
||||||
|
// If there's any other bits of data, keep them about
|
||||||
|
reserved = new byte[len-40-8];
|
||||||
|
System.arraycopy(source,start+48,reserved,0,reserved.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We are of type 1001
|
||||||
|
*/
|
||||||
|
public long getRecordType() { return _type; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write the contents of the record back, so it can be written
|
||||||
|
* to disk
|
||||||
|
*/
|
||||||
|
public void writeOut(OutputStream out) throws IOException {
|
||||||
|
// Header
|
||||||
|
out.write(_header);
|
||||||
|
|
||||||
|
// The sizes and zoom ratios
|
||||||
|
writeLittleEndian((int)slideSizeX,out);
|
||||||
|
writeLittleEndian((int)slideSizeY,out);
|
||||||
|
writeLittleEndian((int)notesSizeX,out);
|
||||||
|
writeLittleEndian((int)notesSizeY,out);
|
||||||
|
writeLittleEndian((int)serverZoomFrom,out);
|
||||||
|
writeLittleEndian((int)serverZoomTo,out);
|
||||||
|
|
||||||
|
// The master persists
|
||||||
|
writeLittleEndian((int)notesMasterPersist,out);
|
||||||
|
writeLittleEndian((int)handoutMasterPersist,out);
|
||||||
|
|
||||||
|
// The ID of the first slide
|
||||||
|
writeLittleEndian((short)firstSlideNum,out);
|
||||||
|
|
||||||
|
// The slide size type
|
||||||
|
writeLittleEndian((short)slideSizeType,out);
|
||||||
|
|
||||||
|
// The booleans as bytes
|
||||||
|
out.write(saveWithFonts);
|
||||||
|
out.write(omitTitlePlace);
|
||||||
|
out.write(rightToLeft);
|
||||||
|
out.write(showComments);
|
||||||
|
|
||||||
|
// Reserved data
|
||||||
|
out.write(reserved);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds the different Slide Size values
|
||||||
|
*/
|
||||||
|
public static final class SlideSize {
|
||||||
|
public static final int ON_SCREEN = 0;
|
||||||
|
public static final int LETTER_SIZED_PAPER = 1;
|
||||||
|
public static final int A4_SIZED_PAPER = 2;
|
||||||
|
public static final int ON_35MM = 3;
|
||||||
|
public static final int OVERHEAD = 4;
|
||||||
|
public static final int BANNER = 5;
|
||||||
|
public static final int CUSTOM = 6;
|
||||||
|
}
|
||||||
|
}
|
|
@ -133,6 +133,11 @@ public abstract class Record
|
||||||
toReturn = new DummyPositionSensitiveRecordWithChildren(b,start,len);
|
toReturn = new DummyPositionSensitiveRecordWithChildren(b,start,len);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// DocumentAtom
|
||||||
|
case 1001:
|
||||||
|
toReturn = new DocumentAtom(b,start,len);
|
||||||
|
break;
|
||||||
|
|
||||||
// "Slide"
|
// "Slide"
|
||||||
case 1006:
|
case 1006:
|
||||||
toReturn = new Slide(b,start,len);
|
toReturn = new Slide(b,start,len);
|
||||||
|
|
Loading…
Reference in New Issue