001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017:
018: /* $Id: Overlay.java 426576 2006-07-28 15:44:37Z jeremias $ */
019:
020: package org.apache.fop.render.afp.modca;
021:
022: import java.io.ByteArrayOutputStream;
023: import java.io.IOException;
024: import java.io.OutputStream;
025: import java.util.Iterator;
026:
027: /**
028: */
029: public class Overlay extends AbstractPageObject {
030:
031: /**
032: * Construct a new overlay object for the specified name argument, the overlay
033: * name should be an 8 character identifier.
034: *
035: * @param name
036: * the name of the page.
037: * @param width
038: * the width of the page.
039: * @param height
040: * the height of the page.
041: * @param rotation
042: * the rotation of the page.
043: */
044: public Overlay(String name, int width, int height, int rotation) {
045:
046: super (name, width, height, rotation);
047:
048: }
049:
050: /**
051: * Accessor method to write the AFP datastream for the overlay.
052: *
053: * @param os The stream to write to
054: * @throws java.io.IOException
055: */
056: public void writeDataStream(OutputStream os) throws IOException {
057:
058: writeStart(os);
059:
060: _activeEnvironmentGroup.writeDataStream(os);
061:
062: writeObjectList(_segments, os);
063:
064: writeObjectList(_tagLogicalElements, os);
065:
066: writeObjectList(_objects, os);
067:
068: writeEnd(os);
069:
070: }
071:
072: /**
073: * Helper method to write the start of the overlay.
074: * @param os The stream to write to
075: */
076: private void writeStart(OutputStream os) throws IOException {
077:
078: byte[] data = new byte[17];
079:
080: data[0] = 0x5A; // Structured field identifier
081: data[1] = 0x00; // Length byte 1
082: data[2] = 0x10; // Length byte 2
083: data[3] = (byte) 0xD3; // Structured field id byte 1
084: data[4] = (byte) 0xA8; // Structured field id byte 2
085: data[5] = (byte) 0xDF; // Structured field id byte 3
086: data[6] = 0x00; // Flags
087: data[7] = 0x00; // Reserved
088: data[8] = 0x00; // Reserved
089:
090: for (int i = 0; i < _nameBytes.length; i++) {
091:
092: data[9 + i] = _nameBytes[i];
093:
094: }
095:
096: os.write(data);
097:
098: }
099:
100: /**
101: * Helper method to write the end of the overlay.
102: * @param os The stream to write to
103: */
104: private void writeEnd(OutputStream os) throws IOException {
105:
106: byte[] data = new byte[17];
107:
108: data[0] = 0x5A; // Structured field identifier
109: data[1] = 0x00; // Length byte 1
110: data[2] = 0x10; // Length byte 2
111: data[3] = (byte) 0xD3; // Structured field id byte 1
112: data[4] = (byte) 0xA9; // Structured field id byte 2
113: data[5] = (byte) 0xDF; // Structured field id byte 3
114: data[6] = 0x00; // Flags
115: data[7] = 0x00; // Reserved
116: data[8] = 0x00; // Reserved
117:
118: for (int i = 0; i < _nameBytes.length; i++) {
119:
120: data[9 + i] = _nameBytes[i];
121:
122: }
123:
124: os.write(data);
125:
126: }
127:
128: }
|