Class IFSerializer

    • Field Detail

      • VERSION

        public static final java.lang.String VERSION
        Intermediate Format (IF) version, used to express an @version attribute in the root element of the IF document, the initial value of which is set to '2.0' to signify that something preceded it (but didn't happen to be marked as such), and that this version is not necessarily backwards compatible with the unmarked (<2.0) version.
        See Also:
        Constant Field Values
    • Constructor Detail

      • IFSerializer

        public IFSerializer​(IFContext context)
    • Method Detail

      • supportsPagesOutOfOrder

        public boolean supportsPagesOutOfOrder()
        Indicates whether the painter supports to handle the pages in mixed order rather than ascending order.
        Specified by:
        supportsPagesOutOfOrder in interface IFDocumentHandler
        Returns:
        true if out-of-order handling is supported
      • getMimeType

        public java.lang.String getMimeType()
        Returns the MIME type of the output format that is generated by this implementation.
        Specified by:
        getMimeType in interface IFDocumentHandler
        Returns:
        the MIME type
      • mimicDocumentHandler

        public void mimicDocumentHandler​(IFDocumentHandler targetHandler)
        Tells this serializer to mimic the given document handler (mostly applies to the font set that is used during layout).
        Parameters:
        targetHandler - the document handler to mimic
      • getMimickedDocumentHandler

        public IFDocumentHandler getMimickedDocumentHandler()
        Returns the document handler that is being mimicked by this serializer.
        Returns:
        the mimicked document handler or null if no such document handler has been set
      • setFontInfo

        public void setFontInfo​(FontInfo fontInfo)
        Sets the font set to work with.
        Specified by:
        setFontInfo in interface IFDocumentHandler
        Parameters:
        fontInfo - the font info object
      • setDefaultFontInfo

        public void setDefaultFontInfo​(FontInfo fontInfo)
        Sets the default font set (with no custom configuration).
        Specified by:
        setDefaultFontInfo in interface IFDocumentHandler
        Parameters:
        fontInfo - the font info object to populate
      • endDocument

        public void endDocument()
                         throws IFException
        Indicates the end of a document. This method may only be called once after the whole document has been handled. Implementations can release resources (close streams). It is an error to call any event method after this method.
        Specified by:
        endDocument in interface IFDocumentHandler
        Throws:
        IFException - if an error occurs while handling this event
      • startPageSequence

        public void startPageSequence​(java.lang.String id)
                               throws IFException
        Indicates the start of a new page sequence.
        Specified by:
        startPageSequence in interface IFDocumentHandler
        Parameters:
        id - the page sequence's identifier (or null if none is available)
        Throws:
        IFException - if an error occurs while handling this event
      • startPage

        public void startPage​(int index,
                              java.lang.String name,
                              java.lang.String pageMasterName,
                              java.awt.Dimension size)
                       throws IFException
        Indicates the start of a new page.
        Specified by:
        startPage in interface IFDocumentHandler
        Parameters:
        index - the index of the page (0-based)
        name - the page name (usually the formatted page number)
        pageMasterName - the name of the simple-page-master that generated this page
        size - the size of the page (equivalent to the MediaBox in PDF)
        Throws:
        IFException - if an error occurs while handling this event
      • startPageContent

        public IFPainter startPageContent()
                                   throws IFException
        Indicates the start of the page content. The method returns an IFPainter interface which is used to paint the page contents.
        Specified by:
        startPageContent in interface IFDocumentHandler
        Returns:
        the IFPainter for the page content
        Throws:
        IFException - if an error occurs while handling this event
      • startViewport

        public void startViewport​(java.awt.geom.AffineTransform transform,
                                  java.awt.Dimension size,
                                  java.awt.Rectangle clipRect)
                           throws IFException
        Starts a new viewport, establishing a new coordinate system. A viewport has a size and can optionally be clipped. Corresponds to SVG's svg element.
        Specified by:
        startViewport in interface IFPainter
        Parameters:
        transform - the transformation matrix establishing the new coordinate system
        size - the size of the viewport
        clipRect - the clipping rectangle (may be null)
        Throws:
        IFException - if an error occurs while handling this element
      • startViewport

        public void startViewport​(java.awt.geom.AffineTransform[] transforms,
                                  java.awt.Dimension size,
                                  java.awt.Rectangle clipRect)
                           throws IFException
        Starts a new viewport, establishing a new coordinate system. A viewport has a size and can optionally be clipped. Corresponds to SVG's svg element.
        Specified by:
        startViewport in interface IFPainter
        Parameters:
        transforms - a series of transformation matrices establishing the new coordinate system
        size - the size of the viewport
        clipRect - the clipping rectangle (may be null)
        Throws:
        IFException - if an error occurs while handling this element
      • endViewport

        public void endViewport()
                         throws IFException
        Ends the current viewport and restores the previous coordinate system.
        Specified by:
        endViewport in interface IFPainter
        Throws:
        IFException - if an error occurs while handling this element
      • startGroup

        public void startGroup​(java.awt.geom.AffineTransform[] transforms,
                               java.lang.String layer)
                        throws IFException
        Starts a new group of graphical elements. Corresponds to SVG's g element.
        Specified by:
        startGroup in interface IFPainter
        Parameters:
        transforms - a series of transformation matrices establishing the new coordinate system
        layer - an optional layer label (or null if none)
        Throws:
        IFException - if an error occurs while handling this element
      • startGroup

        public void startGroup​(java.awt.geom.AffineTransform transform,
                               java.lang.String layer)
                        throws IFException
        Starts a new group of graphical elements. Corresponds to SVG's g element.
        Specified by:
        startGroup in interface IFPainter
        Parameters:
        transform - the transformation matrix establishing the new coordinate system
        layer - an optional layer label (or null if none)
        Throws:
        IFException - if an error occurs while handling this element
      • endGroup

        public void endGroup()
                      throws IFException
        Ends the current group and restores the previous coordinate system (and layer).
        Specified by:
        endGroup in interface IFPainter
        Throws:
        IFException - if an error occurs while handling this element
      • drawImage

        public void drawImage​(java.lang.String uri,
                              java.awt.Rectangle rect)
                       throws IFException
        Draws an image identified by a URI inside a given rectangle. This is the equivalent to an fo:external-graphic in XSL-FO.
        Specified by:
        drawImage in interface IFPainter
        Parameters:
        uri - the image's URI
        rect - the rectangle in which the image shall be painted
        Throws:
        IFException - if an error occurs while handling this event
      • drawImage

        public void drawImage​(org.w3c.dom.Document doc,
                              java.awt.Rectangle rect)
                       throws IFException
        Draws an image (represented by a DOM document) inside a given rectangle. This is the equivalent to an fo:instream-foreign-object in XSL-FO.
        Specified by:
        drawImage in interface IFPainter
        Parameters:
        doc - the DOM document containing the foreign object
        rect - the rectangle in which the image shall be painted
        Throws:
        IFException - if an error occurs while handling this event
      • clipRect

        public void clipRect​(java.awt.Rectangle rect)
                      throws IFException
        Restricts the current clipping region with the given rectangle.
        Specified by:
        clipRect in interface IFPainter
        Parameters:
        rect - the rectangle's coordinates and extent
        Throws:
        IFException - if an error occurs while handling this event
      • clipBackground

        public void clipBackground​(java.awt.Rectangle rect,
                                   BorderProps bpsBefore,
                                   BorderProps bpsAfter,
                                   BorderProps bpsStart,
                                   BorderProps bpsEnd)
                            throws IFException
        Restricts the current clipping region to the inner border.
        Specified by:
        clipBackground in interface IFPainter
        Parameters:
        rect - the rectangle's coordinates and extent
        bpsBefore - the border segment on the before-side (top)
        bpsAfter - the border segment on the after-side (bottom)
        bpsStart - the border segment on the start-side (left)
        bpsEnd - the border segment on the end-side (right)
        Throws:
        IFException - if an error occurs while handling this event
      • fillRect

        public void fillRect​(java.awt.Rectangle rect,
                             java.awt.Paint fill)
                      throws IFException
        Fills a rectangular area.
        Specified by:
        fillRect in interface IFPainter
        Parameters:
        rect - the rectangle's coordinates and extent
        fill - the fill paint
        Throws:
        IFException - if an error occurs while handling this event
      • drawBorderRect

        public void drawBorderRect​(java.awt.Rectangle rect,
                                   BorderProps top,
                                   BorderProps bottom,
                                   BorderProps left,
                                   BorderProps right,
                                   java.awt.Color innerBackgroundColor)
                            throws IFException
        Draws a border rectangle. The border segments are specified through BorderProps instances.
        Specified by:
        drawBorderRect in interface IFPainter
        Parameters:
        rect - the rectangle's coordinates and extent
        top - the border segment on the top edge
        bottom - the border segment on the bottom edge
        left - the border segment on the left edge
        right - the border segment on the right edge
        innerBackgroundColor - the color of the inner background
        Throws:
        IFException - if an error occurs while handling this event
      • drawLine

        public void drawLine​(java.awt.Point start,
                             java.awt.Point end,
                             int width,
                             java.awt.Color color,
                             RuleStyle style)
                      throws IFException
        Draws a line. NOTE: Currently, only horizontal lines are implemented!
        Specified by:
        drawLine in interface IFPainter
        Parameters:
        start - the start point of the line
        end - the end point of the line
        width - the line width
        color - the line color
        style - the line style (using the Constants.EN_* constants for the rule-style property)
        Throws:
        IFException - if an error occurs while handling this event
      • drawText

        public void drawText​(int x,
                             int y,
                             int letterSpacing,
                             int wordSpacing,
                             int[][] dp,
                             java.lang.String text)
                      throws IFException
        Draws text. The initial coordinates (x and y) point to the starting point at the normal baseline of the font. The parameters letterSpacing, wordSpacing and the array dx are optional and can be used to influence character positioning (for example, for kerning).
        Specified by:
        drawText in interface IFPainter
        Parameters:
        x - X-coordinate of the starting point of the text
        y - Y-coordinate of the starting point of the text
        letterSpacing - additional spacing between characters (may be 0)
        wordSpacing - additional spacing between words (may be 0)
        dp - an array of 4-tuples, expressing [X,Y] placment adjustments and [X,Y] advancement adjustments, in that order (may be null); if not null, then adjustments.length must be the same as text.length()
        text - the text
        Throws:
        IFException - if an error occurs while handling this event
      • setFont

        public void setFont​(java.lang.String family,
                            java.lang.String style,
                            java.lang.Integer weight,
                            java.lang.String variant,
                            java.lang.Integer size,
                            java.awt.Color color)
                     throws IFException
        Updates the current font.
        Specified by:
        setFont in interface IFPainter
        Parameters:
        family - the font family (or null if there's no change)
        style - the font style (or null if there's no change)
        weight - the font weight (or null if there's no change)
        variant - the font variant (or null if there's no change)
        size - the font size (or null if there's no change)
        color - the text color (or null if there's no change)
        Throws:
        IFException - if an error occurs while handling this event
      • handleExtensionObject

        public void handleExtensionObject​(java.lang.Object extension)
                                   throws IFException
        Handles an extension object. This can be a DOM document or any arbitrary object. If an implementation doesn't know how to handle a particular extension it is simply ignored.
        Specified by:
        handleExtensionObject in interface IFDocumentHandler
        Parameters:
        extension - the extension object
        Throws:
        IFException - if an error occurs while handling this event
      • createRenderingContext

        protected RenderingContext createRenderingContext()
                                                   throws java.lang.IllegalStateException
        Returns:
        a new rendering context
        Throws:
        java.lang.IllegalStateException - unless overridden
      • isBackgroundRequired

        public boolean isBackgroundRequired​(BorderProps bpsTop,
                                            BorderProps bpsBottom,
                                            BorderProps bpsLeft,
                                            BorderProps bpsRight)
        TODO Painter-specific rounded borders logic required background drawing to be made optional. A future refactoring of the rounded borders code should aim to make the need for this abstraction obsolete
        Specified by:
        isBackgroundRequired in interface IFPainter
        Parameters:
        bpsTop - the before border
        bpsBottom - the after border
        bpsLeft - the start border
        bpsRight - the end border
        Returns:
        true if and only if background drawing is required