Java tutorial
/* * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package javax.print.attribute.standard; import javax.print.attribute.Attribute; import javax.print.attribute.DocAttribute; import javax.print.attribute.EnumSyntax; import javax.print.attribute.PrintJobAttribute; import javax.print.attribute.PrintRequestAttribute; /** * Class {@code Finishings} is a printing attribute class, an enumeration, that * identifies whether the printer applies a finishing operation of some kind of * binding to each copy of each printed document in the job. For multidoc print * jobs (jobs with multiple documents), the * {@link MultipleDocumentHandling MultipleDocumentHandling} attribute * determines what constitutes a "copy" for purposes of finishing. * <p> * Standard Finishings values are: * <table class="borderless" style="width:100%;margin: 0px auto"> * <caption>Standard Finishings values</caption> * <tr> * <td style="width:10%"> * <td style="width:27%">{@link #NONE NONE} * <td style="width:27%">{@link #STAPLE STAPLE} * <td style="width:36%">{@link #EDGE_STITCH EDGE_STITCH} * <tr> * <td> * <td>{@link #BIND BIND} * <td>{@link #SADDLE_STITCH SADDLE_STITCH} * <td>{@link #COVER COVER} * <td> * </table> * <p> * The following {@code Finishings} values are more specific; they indicate a * corner or an edge as if the document were a portrait document: * <table class="borderless" style="width:100%;margin: 0px auto"> * <caption>Specific Finishings values</caption> * <tr> * <td style="width:10%"> * <td style="width:27%">{@link #STAPLE_TOP_LEFT STAPLE_TOP_LEFT} * <td style="width:27%">{@link #EDGE_STITCH_LEFT EDGE_STITCH_LEFT} * <td style="width:27%">{@link #STAPLE_DUAL_LEFT STAPLE_DUAL_LEFT} * <td style="width:9%"> * <tr> * <td style="width:10%"> * <td style="width:27%">{@link #STAPLE_BOTTOM_LEFT STAPLE_BOTTOM_LEFT} * <td style="width:27%">{@link #EDGE_STITCH_TOP EDGE_STITCH_TOP} * <td style="width:27%">{@link #STAPLE_DUAL_TOP STAPLE_DUAL_TOP} * <td style="width:9%"> * <tr> * <td style="width:10%"> * <td style="width:27%">{@link #STAPLE_TOP_RIGHT STAPLE_TOP_RIGHT} * <td style="width:27%">{@link #EDGE_STITCH_RIGHT EDGE_STITCH_RIGHT} * <td style="width:27%">{@link #STAPLE_DUAL_RIGHT STAPLE_DUAL_RIGHT} * <td style="width:9%"> * <tr> * <td style="width:10%"> * <td style="width:27%">{@link #STAPLE_BOTTOM_RIGHT STAPLE_BOTTOM_RIGHT} * <td style="width:27%">{@link #EDGE_STITCH_BOTTOM EDGE_STITCH_BOTTOM} * <td style="width:27%">{@link #STAPLE_DUAL_BOTTOM STAPLE_DUAL_BOTTOM} * <td style="width:9%"> * </table> * <p> * The STAPLE_<i>XXX</i> values are specified with respect to the document as if * the document were a portrait document. If the document is actually a * landscape or a reverse-landscape document, the client supplies the * appropriate transformed value. For example, to position a staple in the upper * left hand corner of a landscape document when held for reading, the client * supplies the {@code STAPLE_BOTTOM_LEFT} value (since landscape is defined as * a +90 degree rotation from portrait, i.e., anti-clockwise). On the other * hand, to position a staple in the upper left hand corner of a * reverse-landscape document when held for reading, the client supplies the * {@code STAPLE_TOP_RIGHT} value (since reverse-landscape is defined as a -90 * degree rotation from portrait, i.e., clockwise). * <p> * The angle (vertical, horizontal, angled) of each staple with respect to the * document depends on the implementation which may in turn depend on the value * of the attribute. * <p> * The effect of a {@code Finishings} attribute on a multidoc print job (a job * with multiple documents) depends on whether all the docs have the same * binding specified or whether different docs have different bindings * specified, and on the (perhaps defaulted) value of the * {@link MultipleDocumentHandling MultipleDocumentHandling} attribute. * <ul> * <li>If all the docs have the same binding specified, then any value of * {@link MultipleDocumentHandling MultipleDocumentHandling} makes sense, and * the printer's processing depends on the * {@link MultipleDocumentHandling MultipleDocumentHandling} value: * <ul> * <li>{@code SINGLE_DOCUMENT} -- All the input docs will be bound together * as one output document with the specified binding. * <li>{@code SINGLE_DOCUMENT_NEW_SHEET} -- All the input docs will be bound * together as one output document with the specified binding, and the first * impression of each input doc will always start on a new media sheet. * <li>{@code SEPARATE_DOCUMENTS_UNCOLLATED_COPIES} -- Each input doc will * be bound separately with the specified binding. * <li>{@code SEPARATE_DOCUMENTS_COLLATED_COPIES} -- Each input doc will be * bound separately with the specified binding. * </ul> * <li>If different docs have different bindings specified, then only two * values of {@link MultipleDocumentHandling MultipleDocumentHandling} make * sense, and the printer reports an error when the job is submitted if any * other value is specified: * <ul> * <li>{@code SEPARATE_DOCUMENTS_UNCOLLATED_COPIES} -- Each input doc will * be bound separately with its own specified binding. * <li>{@code SEPARATE_DOCUMENTS_COLLATED_COPIES} -- Each input doc will be * bound separately with its own specified binding. * </ul> * </ul> * <p> * <b>IPP Compatibility:</b> Class Finishings encapsulates some of the IPP enum * values that can be included in an IPP "finishings" attribute, which is a set * of enums. The category name returned by {@code getName()} is the IPP * attribute name. The enumeration's integer value is the IPP enum value. The * {@code toString()} method returns the IPP string representation of the * attribute value. In IPP Finishings is a multi-value attribute, this API * currently allows only one binding to be specified. * * @author Alan Kaminsky */ public class Finishings extends EnumSyntax implements DocAttribute, PrintRequestAttribute, PrintJobAttribute { /** * Use serialVersionUID from JDK 1.4 for interoperability. */ private static final long serialVersionUID = -627840419548391754L; /** * Perform no binding. */ public static final Finishings NONE = new Finishings(3); /** * Bind the document(s) with one or more staples. The exact number and * placement of the staples is site-defined. */ public static final Finishings STAPLE = new Finishings(4); /** * This value is specified when it is desired to select a non-printed (or * pre-printed) cover for the document. This does not supplant the * specification of a printed cover (on cover stock medium) by the document * itself. */ public static final Finishings COVER = new Finishings(6); /** * This value indicates that a binding is to be applied to the document; the * type and placement of the binding is site-defined. */ public static final Finishings BIND = new Finishings(7); /** * Bind the document(s) with one or more staples (wire stitches) along the * middle fold. The exact number and placement of the staples and the middle * fold is implementation- and/or site-defined. */ public static final Finishings SADDLE_STITCH = new Finishings(8); /** * Bind the document(s) with one or more staples (wire stitches) along one * edge. The exact number and placement of the staples is implementation- * and/or site- defined. */ public static final Finishings EDGE_STITCH = new Finishings(9); /** * Bind the document(s) with one or more staples in the top left corner. */ public static final Finishings STAPLE_TOP_LEFT = new Finishings(20); /** * Bind the document(s) with one or more staples in the bottom left corner. */ public static final Finishings STAPLE_BOTTOM_LEFT = new Finishings(21); /** * Bind the document(s) with one or more staples in the top right corner. */ public static final Finishings STAPLE_TOP_RIGHT = new Finishings(22); /** * Bind the document(s) with one or more staples in the bottom right corner. */ public static final Finishings STAPLE_BOTTOM_RIGHT = new Finishings(23); /** * Bind the document(s) with one or more staples (wire stitches) along the * left edge. The exact number and placement of the staples is * implementation- and/or site-defined. */ public static final Finishings EDGE_STITCH_LEFT = new Finishings(24); /** * Bind the document(s) with one or more staples (wire stitches) along the * top edge. The exact number and placement of the staples is * implementation- and/or site-defined. */ public static final Finishings EDGE_STITCH_TOP = new Finishings(25); /** * Bind the document(s) with one or more staples (wire stitches) along the * right edge. The exact number and placement of the staples is * implementation- and/or site-defined. */ public static final Finishings EDGE_STITCH_RIGHT = new Finishings(26); /** * Bind the document(s) with one or more staples (wire stitches) along the * bottom edge. The exact number and placement of the staples is * implementation- and/or site-defined. */ public static final Finishings EDGE_STITCH_BOTTOM = new Finishings(27); /** * Bind the document(s) with two staples (wire stitches) along the left edge * assuming a portrait document (see above). */ public static final Finishings STAPLE_DUAL_LEFT = new Finishings(28); /** * Bind the document(s) with two staples (wire stitches) along the top edge * assuming a portrait document (see above). */ public static final Finishings STAPLE_DUAL_TOP = new Finishings(29); /** * Bind the document(s) with two staples (wire stitches) along the right * edge assuming a portrait document (see above). */ public static final Finishings STAPLE_DUAL_RIGHT = new Finishings(30); /** * Bind the document(s) with two staples (wire stitches) along the bottom * edge assuming a portrait document (see above). */ public static final Finishings STAPLE_DUAL_BOTTOM = new Finishings(31); /** * Construct a new finishings binding enumeration value with the given * integer value. * * @param value Integer value */ protected Finishings(int value) { super(value); } /** * The string table for class {@code Finishings}. */ private static final String[] myStringTable = { "none", "staple", null, "cover", "bind", "saddle-stitch", "edge-stitch", null, // The next ten enum values are reserved. null, null, null, null, null, null, null, null, null, "staple-top-left", "staple-bottom-left", "staple-top-right", "staple-bottom-right", "edge-stitch-left", "edge-stitch-top", "edge-stitch-right", "edge-stitch-bottom", "staple-dual-left", "staple-dual-top", "staple-dual-right", "staple-dual-bottom" }; /** * The enumeration value table for class {@code Finishings}. */ private static final Finishings[] myEnumValueTable = { NONE, STAPLE, null, COVER, BIND, SADDLE_STITCH, EDGE_STITCH, null, // The next ten enum values are reserved. null, null, null, null, null, null, null, null, null, STAPLE_TOP_LEFT, STAPLE_BOTTOM_LEFT, STAPLE_TOP_RIGHT, STAPLE_BOTTOM_RIGHT, EDGE_STITCH_LEFT, EDGE_STITCH_TOP, EDGE_STITCH_RIGHT, EDGE_STITCH_BOTTOM, STAPLE_DUAL_LEFT, STAPLE_DUAL_TOP, STAPLE_DUAL_RIGHT, STAPLE_DUAL_BOTTOM }; /** * Returns the string table for class {@code Finishings}. */ protected String[] getStringTable() { return myStringTable.clone(); } /** * Returns the enumeration value table for class {@code Finishings}. */ protected EnumSyntax[] getEnumValueTable() { return (EnumSyntax[]) myEnumValueTable.clone(); } /** * Returns the lowest integer value used by class {@code Finishings}. */ protected int getOffset() { return 3; } /** * Get the printing attribute class which is to be used as the "category" * for this printing attribute value. * <p> * For class {@code Finishings} and any vendor-defined subclasses, the * category is class {@code Finishings} itself. * * @return printing attribute class (category), an instance of class * {@link Class java.lang.Class} */ public final Class<? extends Attribute> getCategory() { return Finishings.class; } /** * Get the name of the category of which this attribute value is an * instance. * <p> * For class {@code Finishings} and any vendor-defined subclasses, the * category name is {@code "finishings"}. * * @return attribute category name */ public final String getName() { return "finishings"; } }