All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.itextpdf.kernel.pdf.annot.PdfTrapNetworkAnnotation Maven / Gradle / Ivy

There is a newer version: 9.0.0
Show newest version
/*
    This file is part of the iText (R) project.
    Copyright (c) 1998-2024 Apryse Group NV
    Authors: Apryse Software.

    This program is offered under a commercial and under the AGPL license.
    For commercial licensing, contact us at https://itextpdf.com/sales.  For AGPL licensing, see below.

    AGPL licensing:
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program 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 Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with this program.  If not, see .
 */
package com.itextpdf.kernel.pdf.annot;

import com.itextpdf.kernel.exceptions.PdfException;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.pdf.PdfArray;
import com.itextpdf.kernel.pdf.PdfDate;
import com.itextpdf.kernel.pdf.PdfDictionary;
import com.itextpdf.kernel.pdf.PdfName;
import com.itextpdf.kernel.pdf.PdfObject;
import com.itextpdf.kernel.pdf.PdfString;
import com.itextpdf.kernel.pdf.xobject.PdfFormXObject;

import java.util.List;

/**
 * A {@link PdfTrapNetworkAnnotation} may be used to define the trapping characteristics for a page
 * of a PDF document. Trapping is the process of adding marks to a page along colour boundaries
 * to avoid unwanted visual artifacts resulting from misregistration of colorants when the page is printed.
 * TrapNet annotations are deprecated in PDF 2.0.
 * 

* See ISO-320001 14.11.6 "Trapping Support" and 14.11.6.2 "Trap Network Annotations" in particular. */ public class PdfTrapNetworkAnnotation extends PdfAnnotation { /** * Creates a {@link PdfTrapNetworkAnnotation} instance. Note that there shall be at most one trap network annotation * per page, which shall be the last element in the page’s Annots array. * TrapNet annotations are deprecated in PDF 2.0. * * @param rect the annotation rectangle, defining the location of the annotation on the page * in default user space units. See {@link PdfAnnotation#setRectangle(PdfArray)}. * @param appearanceStream the form XObject defining a trap network which body contains the graphics objects needed * to paint the traps making up the trap network. Process colour model shall be defined for the * appearance stream (see {@link PdfFormXObject#setProcessColorModel(PdfName)}. * See also ISO-320001 Table 367 "Additional entries specific to a trap network appearance stream". */ public PdfTrapNetworkAnnotation(Rectangle rect, PdfFormXObject appearanceStream) { super(rect); if (appearanceStream.getProcessColorModel() == null) { throw new PdfException("Process color model must be set in appearance stream for Trap Network annotation!"); } setNormalAppearance(appearanceStream.getPdfObject()); setFlags(PdfAnnotation.PRINT | PdfAnnotation.READ_ONLY); } /** * Creates a {@link PdfLineAnnotation} instance from the given {@link PdfDictionary} * that represents existing annotation object in the document. * This method is useful for property reading in reading mode or modifying in stamping mode. * TrapNet annotations are deprecated in PDF 2.0. * * @param pdfObject the {@link PdfDictionary} representing annotation object * @see PdfAnnotation#makeAnnotation(PdfObject) */ protected PdfTrapNetworkAnnotation(PdfDictionary pdfObject) { super(pdfObject); } /** * {@inheritDoc} */ @Override public PdfName getSubtype() { return PdfName.TrapNet; } /** * The date and time when the trap network was most recently modified. *

* This entry is required if /Version ({@link #getVersion()}) and /AnnotStates ({@link #getAnnotStates()}) * entries are absent; shall be absent if /Version and /AnnotStates entries are present. * * @param lastModified a {@link PdfDate} wrapper with the specified date. * @return this {@link PdfTrapNetworkAnnotation} instance. */ public PdfTrapNetworkAnnotation setLastModified(PdfDate lastModified) { return (PdfTrapNetworkAnnotation) put(PdfName.LastModified, lastModified.getPdfObject()); } /** * The date and time when the trap network was most recently modified. * * @return a {@link PdfString} with date. The format should be a date string as described * in ISO-320001 7.9.4, "Dates". See also {@link PdfDate#decode(String)}. */ public PdfString getLastModified() { return getPdfObject().getAsString(PdfName.LastModified); } /** * An unordered array of all objects present in the page description at the time the trap networks * were generated and that, if changed, could affect the appearance of the page. *

* This entry is required if /AnnotStates ({@link #getAnnotStates()}) is present; * shall be absent if /LastModified ({@link #getLastModified()}) is present. * * @param version an unordered {@link PdfArray} of all objects present in the page description at the time the trap networks * were generated. If present, the array shall include the following objects: *

    *
  • all page content streams; *
  • all page resource objects (other than procedure sets); *
  • all resource objects (other than procedure sets) of any form XObjects on the page; *
  • all OPI dictionaries associated with XObjects on the page (see ISO-320001 14.11.7, "Open Prepress Interface (OPI)") *
* @return this {@link PdfTrapNetworkAnnotation} instance. */ public PdfTrapNetworkAnnotation setVersion(PdfArray version) { return (PdfTrapNetworkAnnotation) put(PdfName.Version, version); } /** * An unordered array of all objects present in the page description at the time the trap networks were generated * and that, if changed, could affect the appearance of the page. * * @return an unordered {@link PdfArray} of all objects present in the page description at the time the trap networks * were generated. */ public PdfArray getVersion() { return getPdfObject().getAsArray(PdfName.Version); } /** * An array of name objects representing the appearance states (value of the /AS entry {@link PdfAnnotation#getAppearanceState()}) * for annotations associated with the page. The appearance states shall be listed in the same order as the annotations * in the page’s /Annots array. For an annotation with no /AS entry, the corresponding array element * should be {@link com.itextpdf.kernel.pdf.PdfNull}. * No appearance state shall be included for the trap network annotation itself. *

* Required if /Version ({@link #getVersion()}) is present; shall be absent if /LastModified {@link #getLastModified()} is present. * * @param annotStates a {@link PdfArray} of name objects representing the appearance states for annotations associated with the page. * @return this {@link PdfTrapNetworkAnnotation} instance. */ public PdfTrapNetworkAnnotation setAnnotStates(PdfArray annotStates) { return (PdfTrapNetworkAnnotation) put(PdfName.AnnotStates, annotStates); } /** * An array of name objects representing the appearance states for annotations associated with the page. * See also {@link #setAnnotStates(PdfArray)}. * * @return a {@link PdfArray} of name objects representing the appearance states for annotations associated with the page, */ public PdfArray getAnnotStates() { return getPdfObject().getAsArray(PdfName.AnnotStates); } /** * An array of font dictionaries representing fonts that were fauxed (replaced by substitute fonts) during the * generation of trap networks for the page. * * @param fauxedFonts a {@link PdfArray} of {@link PdfDictionary} each of which represent font in the document. * @return this {@link PdfTrapNetworkAnnotation} instance. */ public PdfTrapNetworkAnnotation setFauxedFonts(PdfArray fauxedFonts) { return (PdfTrapNetworkAnnotation) put(PdfName.FontFauxing, fauxedFonts); } /** * A list of font dictionaries representing fonts that were fauxed (replaced by substitute fonts) during the * generation of trap networks for the page. * * @param fauxedFonts a {@link List} of {@link PdfFont} objects. * @return this {@link PdfTrapNetworkAnnotation} instance. */ public PdfTrapNetworkAnnotation setFauxedFonts(List fauxedFonts) { PdfArray arr = new PdfArray(); for (PdfFont f : fauxedFonts) arr.add(f.getPdfObject()); return setFauxedFonts(arr); } /** * An array of font dictionaries representing fonts that were fauxed (replaced by substitute fonts) during the * generation of trap networks for the page. * * @return a {@link PdfArray} of {@link PdfDictionary} each of which represent font in the document. */ public PdfArray getFauxedFonts() { return getPdfObject().getAsArray(PdfName.FontFauxing); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy