blob: 1c03739446a93ba61d4223b21396d6b5c3b71079 [file] [log] [blame]
/*
* 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.pdf;
import java.io.IOException;
import org.apache.commons.io.output.ByteArrayOutputStream;
/**
* Represents the OutputIntent dictionary.
* @since PDF 1.4
*/
public class PDFOutputIntent extends PDFObject {
/** Subtype for PDF/X output intents */
public static final String GTS_PDFX = "GTS_PDFX";
/** Subtype for PDF/A-1 output intents */
public static final String GTS_PDFA1 = "GTS_PDFA1";
private String subtype; //S in the PDF spec
private String outputCondition;
private String outputConditionIdentifier;
private String registryName;
private String info;
private PDFICCStream destOutputProfile;
/** @return the output intent subtype. */
public String getSubtype() {
return subtype;
}
/**
* Sets the output intent subtype.
* @param subtype the subtype (usually "GTS_PDFX")
*/
public void setSubtype(String subtype) {
this.subtype = subtype;
}
/** @return the OutputCondition field */
public String getOutputCondition() {
return outputCondition;
}
/**
* Sets the human-readable form of the output condition.
* @param outputCondition A text string concisely identifying the intended output
* device or production condition in human-readable form.
*/
public void setOutputCondition(String outputCondition) {
this.outputCondition = outputCondition;
}
/** @return the OutputConditionIdentifier field */
public String getOutputConditionIdentifier() {
return outputConditionIdentifier;
}
/**
* Sets the identifier for the output condition.
* @param outputConditionIdentifier A string identifying the intended output device or
* production condition in human- or machine-readable form.
*/
public void setOutputConditionIdentifier(String outputConditionIdentifier) {
this.outputConditionIdentifier = outputConditionIdentifier;
}
/** @return the RegistryName field */
public String getRegistryName() {
return registryName;
}
/**
* Sets the registry name.
* @param registryName A string (conventionally a uniform resource identifier,
* or URI) identifying the registry in which the condition designated
* by OutputConditionIdentifier is defined.
*/
public void setRegistryName(String registryName) {
this.registryName = registryName;
}
/** @return the Info field */
public String getInfo() {
return info;
}
/**
* Sets the Info field.
* @param info A human-readable text string containing additional information or comments about
* the intended target device or production condition.
*/
public void setInfo(String info) {
this.info = info;
}
/** @return the DestOutputProfile */
public PDFICCStream getDestOutputProfile() {
return destOutputProfile;
}
/**
* Sets the destination ICC profile.
* @param destOutputProfile An ICC profile stream defining the transformation from the PDF
* document's source colors to output device colorants.
*/
public void setDestOutputProfile(PDFICCStream destOutputProfile) {
this.destOutputProfile = destOutputProfile;
}
/** {@inheritDoc} */
public byte[] toPDF() {
ByteArrayOutputStream bout = new ByteArrayOutputStream(128);
try {
bout.write(encode("<<\n"));
bout.write(encode("/Type /OutputIntent\n"));
bout.write(encode("/S /"));
bout.write(encode(this.subtype));
bout.write(encode("\n"));
if (outputCondition != null) {
bout.write(encode("/OutputCondition "));
bout.write(encodeText(this.outputCondition));
bout.write(encode("\n"));
}
bout.write(encode("/OutputConditionIdentifier "));
bout.write(encodeText(this.outputConditionIdentifier));
bout.write(encode("\n"));
if (registryName != null) {
bout.write(encode("/RegistryName "));
bout.write(encodeText(this.registryName));
bout.write(encode("\n"));
}
if (info != null) {
bout.write(encode("/Info "));
bout.write(encodeText(this.info));
bout.write(encode("\n"));
}
if (destOutputProfile != null) {
bout.write(encode("/DestOutputProfile " + destOutputProfile.referencePDF() + "\n"));
}
bout.write(encode(">>"));
} catch (IOException ioe) {
log.error("Ignored I/O exception", ioe);
}
return bout.toByteArray();
}
}