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

de.intarsys.pdf.content.ICSDevice Maven / Gradle / Ivy

/*
 * Copyright (c) 2007, intarsys consulting GmbH
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 *   this list of conditions and the following disclaimer.
 *
 * - Redistributions in binary form must reproduce the above copyright notice,
 *   this list of conditions and the following disclaimer in the documentation
 *   and/or other materials provided with the distribution.
 *
 * - Neither the name of intarsys nor the names of its contributors may be used
 *   to endorse or promote products derived from this software without specific
 *   prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package de.intarsys.pdf.content;

import de.intarsys.pdf.cos.COSDictionary;
import de.intarsys.pdf.cos.COSName;
import de.intarsys.pdf.font.PDFont;
import de.intarsys.pdf.pd.PDColorSpace;
import de.intarsys.pdf.pd.PDExtGState;
import de.intarsys.pdf.pd.PDImage;
import de.intarsys.pdf.pd.PDPattern;
import de.intarsys.pdf.pd.PDResources;
import de.intarsys.pdf.pd.PDShading;
import de.intarsys.pdf.pd.PDXObject;

/**
 * The abstraction of a device that is manipulated by a PDF content stream
 * interpreter ({@link ICSInterpreter}) processing a content stream.
 * 

* The device lifecycle is framed by open/close, issued by the * {@link ICSInterpreter}. The behavior of an {@link ICSDevice} that is not * open is undefined. * *

* Any of the {@link ICSDevice} methods may throw a {@link CSException}. When * the {@link ICSDevice} is used in the context of an {@link ICSInterpreter}, * the exception may be handled by the associated {@link ICSExceptionHandler}, * otherwise you have to be prepared yourself. * * Following a list of operator/method relationship. Not all operators may have * a corresponding method. * * * b | pathCloseFillStrokeNonZero * B | pathFillStrokeNonZero * b* | patcCloseFillStrokeEvenOdd * B* | pathFillStrokeEvenOdd * BDC | markedContentBeginProperties * BI | inlineImageBegin * BMC | markedContentBegin * BT | textBegin * BX | compatibilityBegin * c | penCurveToC * cm | transform * CS | setStrokeColorSpace * cs | setNonStrokeColorSpace * d | setLineDash * d0 | textT3SetGlyphWidth * d1 | textT3SetGlyphWidthBB * Do | doXObject * DP | markedContentPointProperties * EI | inlineImageEnd * EMC | markedContentEnd * ET | textEnd * EX | compatibilityEnd * f | pathFillNonZero * f* | pathFillEvenOdd * G | setStrokeColorGray * g | setNonStrokeColorGray * gs | setExtendedState * h | pathClose * i | setFlatnessTolerance * ID | inlineImageBeginData * j | setLineJoin * J | setLineCap * K | setStrokeColorCMYK * k | setNonStrokeColorCMYK * l | penLineTo * m | penMoveTo * M | setMiterLimit * MP | markedContentPoint * n | pathEnd * q | saveState * Q | restoreState * re | penRectangle * RG | setStrokeColorRGB * rg | setNonStrokeColorRGB * ri | setRenderingIntent * s | pathCloseStroke * S | pathStroke * SC | setStrokeColorValues * sc | setNonStrokeColorValues * SCN | setStrokeColorValuesSpecial * scn | setNonStrokeColorValuesSpecial * sh | paintFill * T* | textLineNew * Tc | textSetCharSpacing * Td | textLineMove * TD | use primitive methods * Tf | textSetFont * Tj | textShow * TJ | textShow & textMove * TL | textSetLeading * Tm | textSetTransform * Tr | textSetRenderingMode * Ts | textSetRise * Tw | textSetWordSpacing * Tz | textSetHorizontalScaling * v | penCurveToV * w | setLineWidth * W | pathClipNonZero * W* | pathClipEvenOdd * y | penCurveToY * ' | use primitive methods * " | use primitive methods * */ public interface ICSDevice { /** * Close the device after use. */ public void close(); /** * Begin a compatibility section. *

* PDF graphics operator "BX" * */ public void compatibilityBegin(); /** * End a compatibility section. *

* PDF graphics operator "EX" * */ public void compatibilityEnd(); /** * Paint shape and color shading according to shading dictionary. *

* PDF graphics operator "sh" * * @param resourceName * The logical name of the resource in the {@link PDResources} * @param shading * The {@link PDShading} to be painted. */ public void doShading(COSName resourceName, PDShading shading); /** * Stroke a PDXObject. A PDXObject is a self contained graphical * description, either a form, an image or a postscript program. * *

* PDF graphics operator "Do" * * @param resourceName * The logical name of the resource in the {@link PDResources} * @param xObject * The {@link PDXObject} to be stroked. */ public void doXObject(COSName resourceName, PDXObject xObject); /** * The current {@link GraphicsState} active. *

* This is a read only representation of the graphics state used when * performing rendering operations in the device. * * @return The current {@link GraphicsState} active. */ public GraphicsState getGraphicsState(); /** * The {@link ICSInterpreter} associated with this {@link ICSDevice}. The * interpreter is associated with "open" and should be no longer used after * "close". * * @return The {@link ICSInterpreter} associated with this {@link ICSDevice}. */ public ICSInterpreter getInterpreter(); /** * Stroke an inlined image. *

* PDF graphics operators "BI", "ID", "EI" * * @param img * The inlined image. The image may use some special keys instead * of the standard {@link PDImage} dictionary keys. */ public void inlineImage(PDImage img); /** * Begin a marked content sequence. *

* PDF graphics operator "BMC" * * @param tag * The tag indicating the role or significance. */ public void markedContentBegin(COSName tag); /** * Begin a marked content sequence with a property list. *

* PDF graphics operator "BDC" * * @param tag * The tag indicating the role or significance. * @param resourceName * The logical name of the resource in the {@link PDResources} * @param properties * The properties for the marked content sequence. */ public void markedContentBeginProperties(COSName tag, COSName resourceName, COSDictionary properties); /** * End marked content sequence started with "BMC" or "BDC". *

* PDF graphics operator "EMC" */ public void markedContentEnd(); /** * Set a marked point. *

* PDF graphics operator "MP" * * @param tag * The tag indicating the role or significance. */ public void markedContentPoint(COSName tag); /** * Define a marked content point with a property list. *

* PDF graphics operator "DP" * * @param tag * The tag indicating the role or significance. * @param resourceName * The logical name of the resource in the {@link PDResources} * @param properties * The properties for the marked content point. */ public void markedContentPointProperties(COSName tag, COSName resourceName, COSDictionary properties); /** * Open the device for use by interpreter. * * @param interpreter */ public void open(ICSInterpreter interpreter); /** * Intersect the current clipping path with the current path using the * even/odd rule. *

* PDF graphics operator "W*" */ public void pathClipEvenOdd(); /** * Intersect the current clipping path with the current path using the * nonzero winding rule. *

* PDF graphics operator "W" */ public void pathClipNonZero(); /** * Close the path and append a line segment from the current coordinate to * the starting point of the path. * *

* PDF graphics operator "h" *

*/ public void pathClose(); /** * Close, Fill and then stroke the path using the even/odd rule. *

* PDF graphics operator "b*" */ public void pathCloseFillStrokeEvenOdd(); /** * Close, Fill and then stroke the path using the non zero winding rule. *

* PDF graphics operator "b" */ public void pathCloseFillStrokeNonZero(); /** * Close and then stroke the path. *

* PDF graphics operator "s" */ public void pathCloseStroke(); /** * End the path without filling or stroking. * *

* This may for example be used to manipulate the clipping path without a * painting operation. *

*

* PDF graphics operator "n" */ public void pathEnd(); /** * Fill the path using the even/odd rule. *

* PDF graphics operator "f*" */ public void pathFillEvenOdd(); /** * Fill the path using the non-zero winding rule. * *

* An open subpath is closed before filling. *

*

* PDF graphics operator "f" */ public void pathFillNonZero(); /** * Fill and then stroke the path using the even/odd rule. *

* PDF graphics operator "B*" */ public void pathFillStrokeEvenOdd(); /** * Fill and then stroke the path using the non-zero winding rule. *

* PDF graphics operator "B" */ public void pathFillStrokeNonZero(); /** * Stroke the current path. *

* PDF graphics operator "S" */ public void pathStroke(); /** * Append a cubic bezier curve to the path.
* The curve extends from the current point to x3, y3, where x1,y1 and x2,y2 * are the bezier control points. * * * * current * +---------* x1/y1 * . _ * -. * . *x2/y2 * . * . * . * + x3/y3 * * *

* PDF graphics operator "c" *

* * @param x1 * x coordinate of first control point * @param y1 * y coordinate of first control point * @param x2 * x coordinate of second control point * @param y2 * y coordinate of second control point * @param x3 * x coordinate of endpoint * @param y3 * y coordinate of endpoint */ public void penCurveToC(float x1, float y1, float x2, float y2, float x3, float y3); /** * Append a cubic bezier curve to the path. The curve extends from the * current point to x3, y3, where the first control point coincides with the * current point and x2,y2 is the second bezier control point. * * * * current * + * . _ * -. * . *x2/y2 * . * . * . * + x3/y3 * * *

* PDF graphics operator "v" *

* * @param x2 * x coordinate of second control point * @param y2 * y coordinate of second control point * @param x3 * x coordinate of endpoint * @param y3 * y coordinate of endpoint */ public void penCurveToV(float x2, float y2, float x3, float y3); /** * Append a cubic bezier curve to the path. *

* The curve extends from the current point to x3, y3, where x1,y1 and x3,y3 * are the bezier control points. * * * * current * +---------* x1/y1 * . _ * -. * . * . * . * . * + x3/y3 * * * *

* PDF graphics operator "y" *

* * @param x1 * x coordinate of first control point * @param y1 * y coordinate of first control point * @param x3 * x coordinate of endpoint * @param y3 * y coordinate of endpoint */ public void penCurveToY(float x1, float y1, float x3, float y3); /** * Add a line from the current point to x, y. * The new current point is x, y. * *

* PDF graphics operator "l" *

* * @param x * The new current x coordinate * @param y * The new current y coordinate */ public void penLineTo(float x, float y); /** * Move the current point to x, y. No line * is added to the path, a new subpath is started. * *

* PDF graphics operator "m" *

* * @param x * The new current x coordinate * @param y * The new current y coordinate */ public void penMoveTo(float x, float y); /** * Append a complete rectangle to as a subpath. * *

* The lower left corner is at x, y, the * dimensions are width and height. The * numbers are defined in user space. *

* *

* PDF graphics operator "re" *

* * @param x * The x coordinate of the lower left corner in user space * @param y * The y coordinate of the lower left corner in user space * @param w * The width in user space * @param h * The height in user space */ public void penRectangle(float x, float y, float w, float h); /** * Restore the graphics state from the stack. *

* PDF graphics operator "Q" */ public void restoreState(); /** * Save the current graphics state on a stack for later use. *

* PDF graphics operator "q" */ public void saveState(); /** * Set the dictionary as the new graphic state, creating a new * {@link PDResources} entry if needed. *

* PDF graphics operator "gs" * * @param resourceName * The logical name of the resource in the {@link PDResources} * @param gstate * The new {@link PDExtGState} */ public void setExtendedState(COSName resourceName, PDExtGState gstate); /** * Set the flatness tolerance. flatness is a value between 0 * and 100, with 0 defining the device's default flatness tolerance. *

* PDF graphics operator "i" * * @param flatness * The flatness tolerance between 0 and 100. */ public void setFlatnessTolerance(float flatness); /** * The line cap specifies the shape to be used at the ends of open subpaths. * * * 0: Butt. The stroke is cut at the endpoint. * 1: Round. A circle is drawn with the diamter of the line width at the endpoint * 2: Square. A square is drawn with its center at the endpoint. * *

* PDF graphics operator "J" * * @param capStyle * The line cap style to use (0,1 or 2) */ public void setLineCap(int capStyle); /** * Define the pattern used to stroke paths. unitsOn defines a * length in user space where the line is drawn, unitsOff * defines a length in user space wher the line is not drawn. * phase defines a "offset" in the pattern definition. * *

* This is a simplified version that only allows for a two phase pattern. *

*

* PDF graphics operator "d" * * @param pattern * The pattern array for the dash * @param phase * Offset in pattern */ public void setLineDash(float[] pattern, float phase); /** * The line join specifies the shape to be used at the connection points of * two adjacent lines in a path. * * * 0: Miter Join, the outer line boreders are extended until they meet. * 1: Round join. A circle is drawn at the meeting point with its * diameter the same as the line width. * 2: Bevel join. The segments are cut at the endpoints as in the line cap * style "Butt". The empty triangle is filled. * *

* PDF graphics operator "j" * * @param joinStyle * The line join style to use (one of 0,1,2) */ public void setLineJoin(int joinStyle); /** * Set the thickness of the line used to stroke a path. This is a number in * user space units. * *

* A width of zero denotes the thinest line that can be rendered. *

*

* PDF graphics operator "w" * * @param lineWidth * The line width in user space. */ public void setLineWidth(float lineWidth); /** * The maximum ratio of MiterLength/LineWidth when connecting two lines with * miter style. *

* PDF graphics operator "M" * * @param miterLimit * The maximum ratio of MiterLength/LineWidth when connecting two * lines with miter style. */ public void setMiterLimit(float miterLimit); /** * Set the non stroking color space to /DeviceCMYK and set the color values * c, m, y, K. * * @param c * A number between 0 (minimum) and 1 (maximum) * @param m * A number between 0 (minimum) and 1 (maximum) * @param y * A number between 0 (minimum) and 1 (maximum) * @param k * A number between 0 (minimum) and 1 (maximum) */ public void setNonStrokeColorCMYK(float c, float m, float y, float k); /** * Set the non stroking color space to /DeviceGray and set the gray level to * gray. * * @param gray * A number between 0 (black) and 1 (white) */ public void setNonStrokeColorGray(float gray); /** * Set the non stroking color space to /DeviceRGB and set the color values * r, g, b. * * @param r * A number between 0 (minimum) and 1 (maximum) * @param g * A number between 0 (minimum) and 1 (maximum) * @param b * A number between 0 (minimum) and 1 (maximum) */ public void setNonStrokeColorRGB(float r, float g, float b); /** * Set color space for non-stroking. *

* PDF graphics operator "cs" * * @param resourceName * The logical name of the resource in the {@link PDResources} * @param colorSpace * The new {@link PDColorSpace} */ public void setNonStrokeColorSpace(COSName resourceName, PDColorSpace colorSpace); /** * Set the color used for non stroking operations, dependent on the * currently selected color spaces. *

* PDF graphics operator "sc" or "scn", dependen on the active color space. * * @param values * The color values */ public void setNonStrokeColorValues(float[] values); /** * Set the color used for non stroking operations, dependent on the * currently selected special color spaces. *

* PDF graphics operator "scn" * * @param values * The color values. * @param resourceName * An optional logical name of the resource in the * {@link PDResources} * @param pattern * An optional {@link PDPattern} */ public void setNonStrokeColorValues(float[] values, COSName resourceName, PDPattern pattern); /** * Set the color rendering intent. *

* PDF graphics operator "ri" * * @param intent * The name of the rendering intent. */ public void setRenderingIntent(COSName intent); /** * Set the stroking color space to /DeviceCMYK and set the color values * c, m, y, K. * * @param c * A number between 0 (minimum) and 1 (maximum) * @param m * A number between 0 (minimum) and 1 (maximum) * @param y * A number between 0 (minimum) and 1 (maximum) * @param k * A number between 0 (minimum) and 1 (maximum) */ public void setStrokeColorCMYK(float c, float m, float y, float k); /** * Set the stroking color space to /DeviceGray and set the gray level to * gray. * * @param gray * A number between 0 (black) and 1 (white) */ public void setStrokeColorGray(float gray); /** * Set the stroking color space to /DeviceRGB and set the color values * r, g, b. * * @param r * A number between 0 (minimum) and 1 (maximum) * @param g * A number between 0 (minimum) and 1 (maximum) * @param b * A number between 0 (minimum) and 1 (maximum) */ public void setStrokeColorRGB(float r, float g, float b); /** * Set color space for stroking. *

* PDF graphics operator "CS" * * @param resourceName * The logical name of the resource in the {@link PDResources} * @param colorSpace * The new {@link PDColorSpace} */ public void setStrokeColorSpace(COSName resourceName, PDColorSpace colorSpace); /** * Set the color used for stroking operations, dependent on the currently * selected color spaces. *

* PDF graphics operator "SC" or "SCN", dependen on the active color space. * * @param values * The color values. */ public void setStrokeColorValues(float[] values); /** * Set the color used for stroking operations, dependent on the currently * selected special color spaces. *

* PDF graphics operator "SCN" * * @param values * The color values. * @param resourceName * An optional logical name of the resource in the * {@link PDResources} * @param pattern * An optional {@link PDPattern} */ public void setStrokeColorValues(float[] values, COSName resourceName, PDPattern pattern); /** * Begin text mode. User space and text space are initialized to be equal. *

* PDF graphics operator "BT" */ public void textBegin(); /** * End text mode. User space is reestablished. *

* PDF graphics operator "ET" */ public void textEnd(); /** * Move the current text line by dx, dy. *

* PDF graphics operator "Td" * * @param dx * The x offset for the new glyph starting point from the last * text line starting point. * @param dy * The y offset for the new glyph starting point from the last * text line starting point. */ public void textLineMove(float dx, float dy); /** * Move the current position to a new line. y. *

* PDF graphics operator "T*" */ public void textLineNew(); /** * Move the current text cursor represented by the current text state * transform by dx, dy. *

* There is no graphics operator for this. It is implemented as a tool for * the ease of creating a content stream. * * @param dx * The x offset for the new glyph starting point from the current * text cursor position. * @param dy * The x offset for the new glyph starting point from the current * text cursor position. */ public void textMove(float dx, float dy); /** * Move the current text cursor represented by the current text state * transform to x, y. *

* There is no graphics operator for this. It is implemented as a tool for * the ease of creating a content stream. * * @param x * The x coordinate for the next glyph starting point . * @param y * The y coordinate for the next glyph starting point . */ public void textMoveTo(float x, float y); /** * Set the character spacing. *

* PDF graphics operator "Tc" * * @param charSpacing * The character spacing */ public void textSetCharSpacing(float charSpacing); /** * Set the current font and size. *

* PDF graphics operator "Tf" * * @param resourceName * The logical name of the resource in the {@link PDResources} * @param font * The new {@link PDFont} * @param size * The new font size (scaling) */ public void textSetFont(COSName resourceName, PDFont font, float size); /** * Set the horizontal scling factor. *

* PDF graphics operator "Tz" * * @param scale * The new horizontal scaling factor. */ public void textSetHorizontalScaling(float scale); /** * Set the text leading. *

* PDF graphics operator "TL" * * @param leading * The new leading */ public void textSetLeading(float leading); /** * Set the text rendering mode. *

* PDF graphics operator "Tr" * * @param renderingMode * The new rendering mode. */ public void textSetRenderingMode(int renderingMode); /** * Set the text rise. *

* PDF graphics operator "Ts" * * @param rise * The new text rise (super/subscript) amount */ public void textSetRise(float rise); /** * Set the text transformation matrix. Both the text matrix and the text * line matrix are set to the new values. *

* PDF graphics operator "Tm" * * @param a * operand 1,1 in the matrix * @param b * operand 1,2 in the matrix * @param c * operand 2,1 in the matrix * @param d * operand 2,2 in the matrix * @param e * operand 3,1 in the matrix * @param f * operand 3,2 in the matrix */ public void textSetTransform(float a, float b, float c, float d, float e, float f); /** * Set the word spacing. *

* PDF graphics operator "Tw" * * @param wordSpacing * The new word spacing. */ public void textSetWordSpacing(float wordSpacing); /** * Show a sequence of bytes as text. The bytes are assumed to be encoded and * copied directly to the device. *

* PDF graphics operator "Tj" * * @param text * The bytes to be shown. * @param offset * @param length */ public void textShow(byte[] text, int offset, int length); /** * Show a sequence of characters as text, using the current font encoding. *

* This is an optional operation from the viewpoint of an * {@link ICSInterpreter}. It is called only "manually" in content creation * devices. This method may throw an {@link UnsupportedOperationException}. *

* PDF graphics operator "Tj" * * @param chars * The chars to be shown. * @param offset * @param length */ public void textShow(char[] chars, int offset, int length); /** * Show a string value as text, using the current font encoding. *

* This is an optional operation from the viewpoint of an * {@link ICSInterpreter}. It is called only "manually" in content creation * devices. This method may throw an {@link UnsupportedOperationException}. *

* PDF graphics operator "Tj" * * @param text * The text value to be shown using the current fonts encoding. */ public void textShow(String text); /** * Set the glyph width for a type 3 font. *

* PDF graphics operator "d0" * * @param x * The glyph width * @param y * must be 0 */ public void textT3SetGlyphWidth(float x, float y); /** * Set the glyph width and bounding box for a type 3 font. *

* PDF graphics operator "d1" * * @param x * The glyph width. * @param y * must be 0 * @param llx * lower left x of bounding box * @param lly * lower left y of bounding box * @param urx * upper right x of bounding box * @param ury * upper right y of bounding box */ public void textT3SetGlyphWidthBB(float x, float y, float llx, float lly, float urx, float ury); /** * Modify the current transformation matrix by concatenating the * transformations. * *

* PDF graphics operator "cm" *

* * @param a * operand 1,1 in the matrix * @param b * operand 1,2 in the matrix * @param c * operand 2,1 in the matrix * @param d * operand 2,2 in the matrix * @param e * operand 3,1 in the matrix * @param f * operand 3,2 in the matrix */ public void transform(float a, float b, float c, float d, float e, float f); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy