| /* |
| * 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.IOUtils; |
| 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); |
| } |
| byte[] bytes = bout.toByteArray(); |
| IOUtils.closeQuietly(bout); |
| return bytes; |
| } |
| |
| |
| } |