📄 sheetdrawingwriter.java
字号:
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi
// Source File Name: SheetDrawingWriter.java
package jxl.biff.drawing;
import common.Logger;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import jxl.WorkbookSettings;
import jxl.biff.IntegerHelper;
import jxl.write.biff.File;
// Referenced classes of package jxl.biff.drawing:
// Chart, DrawingGroupObject, DgContainer, Dg,
// SpgrContainer, SpContainer, Spgr, Sp,
// MsoDrawingRecord, EscherContainer, Origin, ShapeType
public class SheetDrawingWriter
{
private static Logger logger;
private ArrayList drawings;
private boolean drawingsModified;
private Chart charts[];
private WorkbookSettings workbookSettings;
static Class class$jxl$biff$drawing$SheetDrawingWriter; /* synthetic field */
public SheetDrawingWriter(WorkbookSettings ws)
{
charts = new Chart[0];
}
public void setDrawings(ArrayList dr, boolean mod)
{
drawings = dr;
drawingsModified = mod;
}
public void write(File outputFile)
throws IOException
{
if(drawings.size() == 0 && charts.length == 0)
return;
boolean modified = drawingsModified;
int numImages = drawings.size();
Iterator i = drawings.iterator();
do
{
if(!i.hasNext() || modified)
break;
DrawingGroupObject d = (DrawingGroupObject)i.next();
if(d.getOrigin() != Origin.READ)
modified = true;
} while(true);
if(numImages > 0 && !modified)
{
DrawingGroupObject d2 = (DrawingGroupObject)drawings.get(0);
if(!d2.isFirst())
modified = true;
}
if(numImages == 0 && charts.length == 1 && charts[0].getMsoDrawingRecord() == null)
modified = false;
if(!modified)
{
writeUnmodified(outputFile);
return;
}
Object spContainerData[] = new Object[numImages + charts.length];
int length = 0;
EscherContainer firstSpContainer = null;
for(int i = 0; i < numImages; i++)
{
DrawingGroupObject drawing = (DrawingGroupObject)drawings.get(i);
EscherContainer spc = drawing.getSpContainer();
if(spc == null)
continue;
byte data[] = spc.getData();
spContainerData[i] = data;
if(i == 0)
firstSpContainer = spc;
else
length += data.length;
}
for(int i = 0; i < charts.length; i++)
{
EscherContainer spContainer = charts[i].getSpContainer();
byte data[] = spContainer.getBytes();
data = spContainer.setHeaderData(data);
spContainerData[i + numImages] = data;
if(i == 0 && numImages == 0)
firstSpContainer = spContainer;
else
length += data.length;
}
DgContainer dgContainer = new DgContainer();
Dg dg = new Dg(numImages + charts.length);
dgContainer.add(dg);
SpgrContainer spgrContainer = new SpgrContainer();
SpContainer spContainer = new SpContainer();
Spgr spgr = new Spgr();
spContainer.add(spgr);
Sp sp = new Sp(ShapeType.MIN, 1024, 5);
spContainer.add(sp);
spgrContainer.add(spContainer);
spgrContainer.add(firstSpContainer);
dgContainer.add(spgrContainer);
byte firstMsoData[] = dgContainer.getData();
int len = IntegerHelper.getInt(firstMsoData[4], firstMsoData[5], firstMsoData[6], firstMsoData[7]);
IntegerHelper.getFourBytes(len + length, firstMsoData, 4);
len = IntegerHelper.getInt(firstMsoData[28], firstMsoData[29], firstMsoData[30], firstMsoData[31]);
IntegerHelper.getFourBytes(len + length, firstMsoData, 28);
if(numImages > 0 && ((DrawingGroupObject)drawings.get(0)).isFormObject())
{
byte msodata2[] = new byte[firstMsoData.length - 8];
System.arraycopy(firstMsoData, 0, msodata2, 0, msodata2.length);
firstMsoData = msodata2;
}
MsoDrawingRecord msoDrawingRecord = new MsoDrawingRecord(firstMsoData);
outputFile.write(msoDrawingRecord);
if(numImages > 0)
{
DrawingGroupObject firstDrawing = (DrawingGroupObject)drawings.get(0);
firstDrawing.writeAdditionalRecords(outputFile);
} else
{
Chart chart = charts[0];
ObjRecord objRecord = chart.getObjRecord();
outputFile.write(objRecord);
outputFile.write(chart);
}
for(int i = 1; i < spContainerData.length; i++)
{
byte bytes[] = (byte[])spContainerData[i];
if(i < numImages && ((DrawingGroupObject)drawings.get(i)).isFormObject())
{
byte bytes2[] = new byte[bytes.length - 8];
System.arraycopy(bytes, 0, bytes2, 0, bytes2.length);
bytes = bytes2;
}
msoDrawingRecord = new MsoDrawingRecord(bytes);
outputFile.write(msoDrawingRecord);
if(i < numImages)
{
DrawingGroupObject d = (DrawingGroupObject)drawings.get(i);
d.writeAdditionalRecords(outputFile);
} else
{
Chart chart = charts[i - numImages];
ObjRecord objRecord = chart.getObjRecord();
outputFile.write(objRecord);
outputFile.write(chart);
}
}
DrawingGroupObject dgo2;
for(Iterator i = drawings.iterator(); i.hasNext(); dgo2.writeTailRecords(outputFile))
dgo2 = (DrawingGroupObject)i.next();
}
private void writeUnmodified(File outputFile)
throws IOException
{
if(charts.length == 0 && drawings.size() == 0)
return;
if(charts.length == 0 && drawings.size() != 0)
{
DrawingGroupObject d;
for(Iterator i = drawings.iterator(); i.hasNext(); d.writeAdditionalRecords(outputFile))
{
d = (DrawingGroupObject)i.next();
outputFile.write(d.getMsoDrawingRecord());
}
DrawingGroupObject d;
for(Iterator i = drawings.iterator(); i.hasNext(); d.writeTailRecords(outputFile))
d = (DrawingGroupObject)i.next();
return;
}
if(drawings.size() == 0 && charts.length != 0)
{
Chart curChart = null;
for(int i = 0; i < charts.length; i++)
{
curChart = charts[i];
if(curChart.getMsoDrawingRecord() != null)
outputFile.write(curChart.getMsoDrawingRecord());
if(curChart.getObjRecord() != null)
outputFile.write(curChart.getObjRecord());
outputFile.write(curChart);
}
return;
}
int numDrawings = drawings.size();
int length = 0;
EscherContainer spContainers[] = new EscherContainer[numDrawings + charts.length];
boolean isFormObject[] = new boolean[numDrawings + charts.length];
for(int i = 0; i < numDrawings; i++)
{
DrawingGroupObject d = (DrawingGroupObject)drawings.get(i);
spContainers[i] = d.getSpContainer();
if(i > 0)
length += spContainers[i].getLength();
if(d.isFormObject())
isFormObject[i] = true;
}
for(int i = 0; i < charts.length; i++)
{
spContainers[i + numDrawings] = charts[i].getSpContainer();
length += spContainers[i + numDrawings].getLength();
}
DgContainer dgContainer = new DgContainer();
Dg dg = new Dg(numDrawings + charts.length);
dgContainer.add(dg);
SpgrContainer spgrContainer = new SpgrContainer();
SpContainer spContainer = new SpContainer();
Spgr spgr = new Spgr();
spContainer.add(spgr);
Sp sp = new Sp(ShapeType.MIN, 1024, 5);
spContainer.add(sp);
spgrContainer.add(spContainer);
spgrContainer.add(spContainers[0]);
dgContainer.add(spgrContainer);
byte firstMsoData[] = dgContainer.getData();
int len = IntegerHelper.getInt(firstMsoData[4], firstMsoData[5], firstMsoData[6], firstMsoData[7]);
IntegerHelper.getFourBytes(len + length, firstMsoData, 4);
len = IntegerHelper.getInt(firstMsoData[28], firstMsoData[29], firstMsoData[30], firstMsoData[31]);
IntegerHelper.getFourBytes(len + length, firstMsoData, 28);
if(isFormObject[0])
{
byte cbytes[] = new byte[firstMsoData.length - 8];
System.arraycopy(firstMsoData, 0, cbytes, 0, cbytes.length);
firstMsoData = cbytes;
}
MsoDrawingRecord msoDrawingRecord = new MsoDrawingRecord(firstMsoData);
outputFile.write(msoDrawingRecord);
DrawingGroupObject dgo = (DrawingGroupObject)drawings.get(0);
dgo.writeAdditionalRecords(outputFile);
for(int i = 1; i < spContainers.length; i++)
{
byte bytes[] = spContainers[i].getBytes();
byte bytes2[] = spContainers[i].setHeaderData(bytes);
if(isFormObject[i])
{
byte cbytes[] = new byte[bytes2.length - 8];
System.arraycopy(bytes2, 0, cbytes, 0, cbytes.length);
bytes2 = cbytes;
}
msoDrawingRecord = new MsoDrawingRecord(bytes2);
outputFile.write(msoDrawingRecord);
if(i < numDrawings)
{
dgo = (DrawingGroupObject)drawings.get(i);
dgo.writeAdditionalRecords(outputFile);
} else
{
Chart chart = charts[i - numDrawings];
ObjRecord objRecord = chart.getObjRecord();
outputFile.write(objRecord);
outputFile.write(chart);
}
}
DrawingGroupObject dgo2;
for(Iterator i = drawings.iterator(); i.hasNext(); dgo2.writeTailRecords(outputFile))
dgo2 = (DrawingGroupObject)i.next();
}
public void setCharts(Chart ch[])
{
charts = ch;
}
public Chart[] getCharts()
{
return charts;
}
static Class class$(String x0)
{
return Class.forName(x0);
ClassNotFoundException x1;
x1;
throw new NoClassDefFoundError(x1.getMessage());
}
static
{
logger = Logger.getLogger(class$jxl$biff$drawing$SheetDrawingWriter != null ? class$jxl$biff$drawing$SheetDrawingWriter : (class$jxl$biff$drawing$SheetDrawingWriter = class$("jxl.biff.drawing.SheetDrawingWriter")));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -