123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- /*
- * 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.
- */
-
- /* $Id$ */
-
- package org.apache.fop.afp.modca;
-
- import java.io.IOException;
- import java.io.OutputStream;
-
- import org.apache.fop.afp.modca.triplets.FullyQualifiedNameTriplet;
- import org.apache.fop.afp.util.BinaryUtils;
-
- /**
- * The Preprocess Presentation Object structured field specifies presentation
- * parameters for a data object that has been mapped as a resource.
- */
- public class PreprocessPresentationObject extends AbstractTripletStructuredObject {
- private static final byte TYPE_OTHER = (byte)0x92;
- private static final byte TYPE_OVERLAY = (byte)0xDF;
- private static final byte TYPE_IMAGE = (byte)0xFB;
-
- private byte objType = TYPE_OTHER;
- private byte objOrent; // object always processed at 0 degree orientation
- private int objXOffset = -1;
- private int objYOffset = -1;
-
- /**
- * Main constructor
- *
- * @param prePresObj the presentation object to be preprocessed
- */
- public PreprocessPresentationObject(AbstractTripletStructuredObject prePresObj) {
- if (prePresObj instanceof ImageObject || prePresObj instanceof Overlay) {
- if (prePresObj instanceof ImageObject) {
- this.objType = TYPE_IMAGE;
- } else {
- this.objType = TYPE_OVERLAY;
- }
- setFullyQualifiedName(
- FullyQualifiedNameTriplet.TYPE_BEGIN_RESOURCE_OBJECT_REF,
- FullyQualifiedNameTriplet.FORMAT_CHARSTR,
- prePresObj.getFullyQualifiedName());
- } else {
- this.objType = TYPE_OTHER;
- }
- }
-
- /** 0 degrees orientation */
- public static final byte ORIENTATION_ZERO_DEGREES = 1;
- /** 90 degrees orientation */
- public static final byte ORIENTATION_90_DEGREES = 2;
- /** 180 degrees orientation */
- public static final byte ORIENTATION_180_DEGREES = 4;
- /** 270 degrees orientation */
- public static final byte ORIENTATION_270_DEGREES = 8;
-
- /**
- * Sets the object orientations relative to media leading edge
- *
- * @param orientation the object orientations relative to media leading edge
- */
- public void setOrientation(byte orientation) {
- objOrent = orientation;
- }
-
- /**
- * Sets the X axis origin for object content
- *
- * @param xOffset the X axis origin for object content
- */
- public void setXOffset(int xOffset) {
- this.objXOffset = xOffset;
- }
-
- /**
- * Sets the Y axis origin for object content
- *
- * @param yOffset the Y axis origin for object content
- */
- public void setYOffset(int yOffset) {
- this.objYOffset = yOffset;
- }
-
- /** {@inheritDoc} */
- public void writeStart(OutputStream os) throws IOException {
- super.writeStart(os);
-
- byte[] data = new byte[9];
- copySF(data, Type.PROCESS, Category.DATA_RESOURCE);
-
- byte[] l = BinaryUtils.convert(19 + getTripletDataLength(), 2);
- data[1] = l[0]; // Length byte 1
- data[2] = l[1]; // Length byte 1
-
- os.write(data);
- }
-
- /** {@inheritDoc} */
- public void writeContent(OutputStream os) throws IOException {
- byte[] data = new byte[12];
- byte[] l = BinaryUtils.convert(12 + getTripletDataLength(), 2);
- data[0] = l[0]; // RGLength
- data[1] = l[1]; // RGLength
- data[2] = objType; // ObjType
- data[3] = 0x00; // Reserved
- data[4] = 0x00; // Reserved
- data[5] = objOrent; // ObjOrent
- if (objXOffset > 0) {
- byte[] xOff = BinaryUtils.convert(objYOffset, 3);
- data[6] = xOff[0]; // XocaOset (not specified)
- data[7] = xOff[1]; // XocaOset
- data[8] = xOff[2]; // XocaOset
- } else {
- data[6] = (byte)0xFF; // XocaOset (not specified)
- data[7] = (byte)0xFF; // XocaOset
- data[8] = (byte)0xFF; // XocaOset
- }
- if (objYOffset > 0) {
- byte[] yOff = BinaryUtils.convert(objYOffset, 3);
- data[9] = yOff[0]; // YocaOset (not specified)
- data[10] = yOff[1]; // YocaOset
- data[11] = yOff[2]; // YocaOset
- } else {
- data[9] = (byte)0xFF; // YocaOset (not specified)
- data[10] = (byte)0xFF; // YocaOset
- data[11] = (byte)0xFF; // YocaOset
- }
- os.write(data);
-
- writeTriplets(os);
- }
-
- }
|