📄 ppdrawinggroup.java
字号:
/** Licensed to the Apache Software Foundation (ASF) under one or more* contributor license agreements. See the NOTICE file distributed with* this work for additional information regarding copyright ownership.* The ASF licenses this file to You 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.ddf.*;import org.apache.poi.util.LittleEndian;import java.io.OutputStream;import java.io.IOException;import java.io.ByteArrayOutputStream;import java.util.List;import java.util.Iterator;/** * Container records which always exists inside Document. * It always acts as a holder for escher DGG container * which may contain which Escher BStore container information * about pictures containes in the presentation (if any). * * @author Yegor Kozlov */public class PPDrawingGroup extends RecordAtom { private byte[] _header; private EscherContainerRecord dggContainer; protected PPDrawingGroup(byte[] source, int start, int len) { // Get the header _header = new byte[8]; System.arraycopy(source,start,_header,0,8); // Get the contents for now byte[] contents = new byte[len]; System.arraycopy(source,start,contents,0,len); DefaultEscherRecordFactory erf = new DefaultEscherRecordFactory(); EscherRecord child = erf.createRecord(contents, 0); child.fillFields( contents, 0, erf ); dggContainer = (EscherContainerRecord)child.getChild(0); } /** * We are type 1035 */ public long getRecordType() { return RecordTypes.PPDrawingGroup.typeID; } /** * We're pretending to be an atom, so return null */ public Record[] getChildRecords() { return null; } public void writeOut(OutputStream out) throws IOException { ByteArrayOutputStream bout = new ByteArrayOutputStream(); List child = dggContainer.getChildRecords(); for (int i = 0; i < child.size(); i++) { EscherRecord r = (EscherRecord)child.get(i); if (r.getRecordId() == EscherContainerRecord.BSTORE_CONTAINER){ EscherContainerRecord bstore = (EscherContainerRecord)r; ByteArrayOutputStream b2 = new ByteArrayOutputStream(); List blip = bstore.getChildRecords(); for (Iterator it=blip.iterator(); it.hasNext();) { EscherBSERecord bse = (EscherBSERecord)it.next(); byte[] b = new byte[36+8]; bse.serialize(0, b); b2.write(b); } byte[] bstorehead = new byte[8]; LittleEndian.putShort(bstorehead, 0, bstore.getOptions()); LittleEndian.putShort(bstorehead, 2, bstore.getRecordId()); LittleEndian.putInt(bstorehead, 4, b2.size()); bout.write(bstorehead); bout.write(b2.toByteArray()); } else { bout.write(r.serialize()); } } int size = bout.size(); // Update the size (header bytes 5-8) LittleEndian.putInt(_header,4,size+8); // Write out our header out.write(_header); byte[] dgghead = new byte[8]; LittleEndian.putShort(dgghead, 0, dggContainer.getOptions()); LittleEndian.putShort(dgghead, 2, dggContainer.getRecordId()); LittleEndian.putInt(dgghead, 4, size); out.write(dgghead); // Finally, write out the children out.write(bout.toByteArray()); } public EscherContainerRecord getDggContainer(){ return dggContainer; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -