first commit
This commit is contained in:
111
hrmsEjb/jxl/biff/drawing/Chart.java
Normal file
111
hrmsEjb/jxl/biff/drawing/Chart.java
Normal file
@@ -0,0 +1,111 @@
|
||||
package jxl.biff.drawing;
|
||||
|
||||
import common.Assert;
|
||||
import common.Logger;
|
||||
import jxl.WorkbookSettings;
|
||||
import jxl.biff.ByteData;
|
||||
import jxl.biff.IndexMapping;
|
||||
import jxl.biff.IntegerHelper;
|
||||
import jxl.biff.Type;
|
||||
import jxl.read.biff.File;
|
||||
|
||||
public class Chart implements ByteData, EscherStream {
|
||||
private static final Logger logger = Logger.getLogger(Chart.class);
|
||||
|
||||
private MsoDrawingRecord msoDrawingRecord;
|
||||
|
||||
private ObjRecord objRecord;
|
||||
|
||||
private int startpos;
|
||||
|
||||
private int endpos;
|
||||
|
||||
private File file;
|
||||
|
||||
private DrawingData drawingData;
|
||||
|
||||
private int drawingNumber;
|
||||
|
||||
private byte[] data;
|
||||
|
||||
private boolean initialized;
|
||||
|
||||
private WorkbookSettings workbookSettings;
|
||||
|
||||
public Chart(MsoDrawingRecord mso, ObjRecord obj, DrawingData dd, int sp, int ep, File f, WorkbookSettings ws) {
|
||||
this.msoDrawingRecord = mso;
|
||||
this.objRecord = obj;
|
||||
this.startpos = sp;
|
||||
this.endpos = ep;
|
||||
this.file = f;
|
||||
this.workbookSettings = ws;
|
||||
if (this.msoDrawingRecord != null) {
|
||||
this.drawingData = dd;
|
||||
this.drawingData.addData(this.msoDrawingRecord.getRecord().getData());
|
||||
this.drawingNumber = this.drawingData.getNumDrawings() - 1;
|
||||
}
|
||||
this.initialized = false;
|
||||
Assert.verify(((mso != null && obj != null) || (mso == null && obj == null)));
|
||||
}
|
||||
|
||||
public byte[] getBytes() {
|
||||
if (!this.initialized)
|
||||
initialize();
|
||||
return this.data;
|
||||
}
|
||||
|
||||
public byte[] getData() {
|
||||
return this.msoDrawingRecord.getRecord().getData();
|
||||
}
|
||||
|
||||
private void initialize() {
|
||||
this.data = this.file.read(this.startpos, this.endpos - this.startpos);
|
||||
this.initialized = true;
|
||||
}
|
||||
|
||||
public void rationalize(IndexMapping xfMapping, IndexMapping fontMapping, IndexMapping formatMapping) {
|
||||
if (!this.initialized)
|
||||
initialize();
|
||||
int pos = 0;
|
||||
int code = 0;
|
||||
int length = 0;
|
||||
Type type = null;
|
||||
while (pos < this.data.length) {
|
||||
code = IntegerHelper.getInt(this.data[pos], this.data[pos + 1]);
|
||||
length = IntegerHelper.getInt(this.data[pos + 2], this.data[pos + 3]);
|
||||
type = Type.getType(code);
|
||||
if (type == Type.FONTX) {
|
||||
int fontind = IntegerHelper.getInt(this.data[pos + 4], this.data[pos + 5]);
|
||||
IntegerHelper.getTwoBytes(fontMapping.getNewIndex(fontind), this.data, pos + 4);
|
||||
} else if (type == Type.FBI) {
|
||||
int fontind = IntegerHelper.getInt(this.data[pos + 12], this.data[pos + 13]);
|
||||
IntegerHelper.getTwoBytes(fontMapping.getNewIndex(fontind), this.data, pos + 12);
|
||||
} else if (type == Type.IFMT) {
|
||||
int formind = IntegerHelper.getInt(this.data[pos + 4], this.data[pos + 5]);
|
||||
IntegerHelper.getTwoBytes(formatMapping.getNewIndex(formind), this.data, pos + 4);
|
||||
} else if (type == Type.ALRUNS) {
|
||||
int numRuns = IntegerHelper.getInt(this.data[pos + 4], this.data[pos + 5]);
|
||||
int fontPos = pos + 6;
|
||||
for (int i = 0; i < numRuns; i++) {
|
||||
int fontind = IntegerHelper.getInt(this.data[fontPos + 2], this.data[fontPos + 3]);
|
||||
IntegerHelper.getTwoBytes(fontMapping.getNewIndex(fontind), this.data, fontPos + 2);
|
||||
fontPos += 4;
|
||||
}
|
||||
}
|
||||
pos += length + 4;
|
||||
}
|
||||
}
|
||||
|
||||
EscherContainer getSpContainer() {
|
||||
EscherContainer spContainer = this.drawingData.getSpContainer(this.drawingNumber);
|
||||
return spContainer;
|
||||
}
|
||||
|
||||
MsoDrawingRecord getMsoDrawingRecord() {
|
||||
return this.msoDrawingRecord;
|
||||
}
|
||||
|
||||
ObjRecord getObjRecord() {
|
||||
return this.objRecord;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user