Class IFSerializer

All Implemented Interfaces:
IFConstants, IFDocumentHandler, IFDocumentNavigationHandler, IFPainter, XMLConstants

IFPainter implementation that serializes the intermediate format to XML.
  • Field Details

    • VERSION

      public static final 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:
  • Constructor Details

    • IFSerializer

      public IFSerializer(IFContext context)
  • Method Details

    • getMainNamespace

      protected String getMainNamespace()
      Returns the main namespace used for generated XML content.
      Specified by:
      getMainNamespace in class AbstractXMLWritingIFDocumentHandler
      Returns:
      the main namespace
    • 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 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
    • getConfigurator

      public IFDocumentHandlerConfigurator getConfigurator()
      Returns the configurator for this document handler, if any.
      Specified by:
      getConfigurator in interface IFDocumentHandler
      Returns:
      the configurator or null if there's no configurator
    • getDocumentNavigationHandler

      public IFDocumentNavigationHandler getDocumentNavigationHandler()
      Returns a document navigation handler if this feature is supported.
      Specified by:
      getDocumentNavigationHandler in interface IFDocumentHandler
      Overrides:
      getDocumentNavigationHandler in class AbstractIFDocumentHandler
      Returns:
      the document navigation handler or null if not supported
    • 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
    • getFontInfo

      public FontInfo getFontInfo()
      Returns the font set to work with.
      Specified by:
      getFontInfo in interface IFDocumentHandler
      Returns:
      the font info object
    • 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
    • getStructureTreeEventHandler

      public StructureTreeEventHandler getStructureTreeEventHandler()
      Description copied from class: AbstractIFDocumentHandler
      Specified by:
      getStructureTreeEventHandler in interface IFDocumentHandler
      Overrides:
      getStructureTreeEventHandler in class AbstractIFDocumentHandler
      Returns:
      the structure tree builder
    • startDocument

      public void startDocument() throws IFException
      Indicates the start of a document. This method may only be called once before any other event method.
      Specified by:
      startDocument in interface IFDocumentHandler
      Overrides:
      startDocument in class AbstractIFDocumentHandler
      Throws:
      IFException - if an error occurs while handling this event
    • setDocumentLocale

      public void setDocumentLocale(Locale locale)
      Description copied from class: AbstractIFDocumentHandler
      Specified by:
      setDocumentLocale in interface IFDocumentHandler
      Overrides:
      setDocumentLocale in class AbstractIFDocumentHandler
      Parameters:
      locale - Locale of the document.
    • startDocumentHeader

      public void startDocumentHeader() throws IFException
      Indicates the start of the document header. This method is called right after the IFDocumentHandler.startDocument() method. Extensions sent to this painter between IFDocumentHandler.startDocumentHeader() and IFDocumentHandler.endDocumentHeader() apply to the document as a whole (like document metadata).
      Specified by:
      startDocumentHeader in interface IFDocumentHandler
      Overrides:
      startDocumentHeader in class AbstractIFDocumentHandler
      Throws:
      IFException - if an error occurs while handling this event
    • endDocumentHeader

      public void endDocumentHeader() throws IFException
      Indicates the end of the document header. This method is called before the first page sequence.
      Specified by:
      endDocumentHeader in interface IFDocumentHandler
      Overrides:
      endDocumentHeader in class AbstractIFDocumentHandler
      Throws:
      IFException - if an error occurs while handling this event
    • startDocumentTrailer

      public void startDocumentTrailer() throws IFException
      Indicates the start of the document trailer. This method is called after the last page sequence. Extensions sent to the painter between IFDocumentHandler.startDocumentTrailer() and IFDocumentHandler.endDocumentTrailer() apply to the document as a whole and is used for document-level content that is only known after all pages have been rendered (like named destinations or the bookmark tree).
      Specified by:
      startDocumentTrailer in interface IFDocumentHandler
      Overrides:
      startDocumentTrailer in class AbstractIFDocumentHandler
      Throws:
      IFException - if an error occurs while handling this event
    • endDocumentTrailer

      public void endDocumentTrailer() throws IFException
      Indicates the end of the document trailer. This method is called right before the IFDocumentHandler.endDocument() method.
      Specified by:
      endDocumentTrailer in interface IFDocumentHandler
      Overrides:
      endDocumentTrailer in class AbstractIFDocumentHandler
      Throws:
      IFException - if an error occurs while handling this event
    • 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(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
    • endPageSequence

      public void endPageSequence() throws IFException
      Indicates the end of a page sequence.
      Specified by:
      endPageSequence in interface IFDocumentHandler
      Throws:
      IFException - if an error occurs while handling this event
    • startPage

      public void startPage(int index, String name, String pageMasterName, 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
    • startPageHeader

      public void startPageHeader() throws IFException
      Indicates the start of the page header.
      Specified by:
      startPageHeader in interface IFDocumentHandler
      Overrides:
      startPageHeader in class AbstractIFDocumentHandler
      Throws:
      IFException - if an error occurs while handling this event
    • endPageHeader

      public void endPageHeader() throws IFException
      Indicates the end of the page header.
      Specified by:
      endPageHeader in interface IFDocumentHandler
      Overrides:
      endPageHeader in class AbstractIFDocumentHandler
      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
    • endPageContent

      public void endPageContent() throws IFException
      Indicates the end of the page content. Calls to the IFPainter returned by the respective IFDocumentHandler.startPageContent() method are illegal.
      Specified by:
      endPageContent in interface IFDocumentHandler
      Throws:
      IFException - if an error occurs while handling this event
    • startPageTrailer

      public void startPageTrailer() throws IFException
      Indicates the start of the page trailer. The page trailer is used for writing down page elements which are only know after handling the page itself (like PDF targets).
      Specified by:
      startPageTrailer in interface IFDocumentHandler
      Overrides:
      startPageTrailer in class AbstractIFDocumentHandler
      Throws:
      IFException - if an error occurs while handling this event
    • endPageTrailer

      public void endPageTrailer() throws IFException
      Indicates the end of the page trailer.
      Specified by:
      endPageTrailer in interface IFDocumentHandler
      Overrides:
      endPageTrailer in class AbstractIFDocumentHandler
      Throws:
      IFException - if an error occurs while handling this event
    • endPage

      public void endPage() throws IFException
      Indicates the end of a page
      Specified by:
      endPage in interface IFDocumentHandler
      Throws:
      IFException - if an error occurs while handling this event
    • startViewport

      public void startViewport(AffineTransform transform, Dimension size, 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(AffineTransform[] transforms, Dimension size, 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(AffineTransform[] transforms, 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(AffineTransform transform, 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(String uri, 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(Document doc, 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(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(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(Rectangle rect, 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(Rectangle rect, BorderProps top, BorderProps bottom, BorderProps left, BorderProps right, 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(Point start, Point end, int width, 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, 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
    • drawText

      public void drawText(int x, int y, int letterSpacing, int wordSpacing, int[][] dp, String text, boolean nextIsSpace) throws IFException
      Specified by:
      drawText in interface IFPainter
      Throws:
      IFException
    • setFont

      public void setFont(String family, String style, Integer weight, String variant, Integer size, 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(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 IllegalStateException
      Returns:
      a new rendering context
      Throws:
      IllegalStateException - unless overridden
    • renderNamedDestination

      public void renderNamedDestination(NamedDestination destination) throws IFException
      Renders a named destination.
      Specified by:
      renderNamedDestination in interface IFDocumentNavigationHandler
      Parameters:
      destination - the named destination
      Throws:
      IFException - if an error occurs while handling this event
    • renderBookmarkTree

      public void renderBookmarkTree(BookmarkTree tree) throws IFException
      Render the bookmark tree.
      Specified by:
      renderBookmarkTree in interface IFDocumentNavigationHandler
      Parameters:
      tree - the bookmark tree
      Throws:
      IFException - if an error occurs while handling this event
    • renderLink

      public void renderLink(Link link) throws IFException
      Specified by:
      renderLink in interface IFDocumentNavigationHandler
      Parameters:
      link - a link
      Throws:
      IFException - of not caught
    • addResolvedAction

      public void addResolvedAction(AbstractAction action) throws IFException
      Specified by:
      addResolvedAction in interface IFDocumentNavigationHandler
      Parameters:
      action - an action
      Throws:
      IFException - of not caught
    • getPageIndex

      public int getPageIndex()
      Specified by:
      getPageIndex in interface IFDocumentNavigationHandler
    • 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