Class AbstractBranchSvgNodeRenderer

java.lang.Object
com.itextpdf.svg.renderers.impl.AbstractSvgNodeRenderer
com.itextpdf.svg.renderers.impl.AbstractBranchSvgNodeRenderer
All Implemented Interfaces:
IBranchSvgNodeRenderer, ISvgNodeRenderer
Direct Known Subclasses:
AbstractContainerSvgNodeRenderer, AbstractGradientSvgNodeRenderer, ClipPathSvgNodeRenderer, DefsSvgNodeRenderer, GroupSvgNodeRenderer, MarkerSvgNodeRenderer, PatternSvgNodeRenderer, StopSvgNodeRenderer

public abstract class AbstractBranchSvgNodeRenderer extends AbstractSvgNodeRenderer implements IBranchSvgNodeRenderer
Abstract class that will be the superclass for any element that can function as a parent.
  • Field Details

    • VIEWBOX_VALUES_NUMBER

      protected static final int VIEWBOX_VALUES_NUMBER
      The number of viewBox values.
      See Also:
    • children

      private final List<ISvgNodeRenderer> children
    • LOGGER

      private static final org.slf4j.Logger LOGGER
  • Constructor Details

    • AbstractBranchSvgNodeRenderer

      public AbstractBranchSvgNodeRenderer()
  • Method Details

    • doDraw

      protected void doDraw(SvgDrawContext context)
      Method that will set properties to be inherited by this branch renderer's children and will iterate over all children in order to draw them.
      Specified by:
      doDraw in class AbstractSvgNodeRenderer
      Parameters:
      context - the object that knows the place to draw this element and maintains its state
    • addXObject

      static void addXObject(PdfCanvas canvas, PdfXObject xObject, float x, float y)
    • applyViewBox

      void applyViewBox(SvgDrawContext context)
      Applies a transformation based on a viewBox for a given branch node.
      Parameters:
      context - current svg draw context
    • retrieveAlignAndMeet

      String[] retrieveAlignAndMeet()
    • applyViewportClip

      private void applyViewportClip(SvgDrawContext context)
      Applies a clipping operation based on the view port.
      Parameters:
      context - the svg draw context
    • applyViewportTranslationCorrection

      private void applyViewportTranslationCorrection(SvgDrawContext context)
    • processAspectRatioPosition

      AffineTransform processAspectRatioPosition(SvgDrawContext context, float[] viewBoxValues, String align, float scaleWidth, float scaleHeight)
      If present, process the preserveAspectRatio position.
      Parameters:
      context - the svg draw context
      viewBoxValues - the four values depicting the viewbox [min-x min-y width height]
      align - alignment method to use
      scaleWidth - the multiplier for scaling width
      scaleHeight - the multiplier for scaling height
      Returns:
      the transformation based on the preserveAspectRatio value
    • cleanUp

      private void cleanUp(SvgDrawContext context)
      Cleans up the SvgDrawContext by removing the current viewport and by popping the current canvas.
      Parameters:
      context - context to clean
    • addChild

      public final void addChild(ISvgNodeRenderer child)
      Description copied from interface: IBranchSvgNodeRenderer
      Adds a renderer as the last element of the list of children.
      Specified by:
      addChild in interface IBranchSvgNodeRenderer
      Parameters:
      child - any renderer
    • getChildren

      public final List<ISvgNodeRenderer> getChildren()
      Description copied from interface: IBranchSvgNodeRenderer
      Gets all child renderers of this object.
      Specified by:
      getChildren in interface IBranchSvgNodeRenderer
      Returns:
      the list of child renderers (in the order that they were added)
    • deepCopyChildren

      protected final void deepCopyChildren(AbstractBranchSvgNodeRenderer deepCopy)
      Create a deep copy of every child renderer and add them to the passed AbstractBranchSvgNodeRenderer
      Parameters:
      deepCopy - renderer to add copies of children to
    • postDraw

      void postDraw(SvgDrawContext context)
      Description copied from class: AbstractSvgNodeRenderer
      Operations to be performed after drawing the element. This includes filling, stroking.
      Overrides:
      postDraw in class AbstractSvgNodeRenderer
      Parameters:
      context - the svg draw context
    • createDeepCopy

      public abstract ISvgNodeRenderer createDeepCopy()
      Description copied from interface: ISvgNodeRenderer
      Creates a deep copy of this renderer, including it's subtree of children
      Specified by:
      createDeepCopy in interface ISvgNodeRenderer
      Returns:
      deep copy of this renderer
    • setPartOfClipPath

      void setPartOfClipPath(boolean isPart)
      Overrides:
      setPartOfClipPath in class AbstractSvgNodeRenderer
    • calculateAndApplyViewBox

      void calculateAndApplyViewBox(SvgDrawContext context, float[] values, Rectangle currentViewPort)
    • getViewBoxValues

      float[] getViewBoxValues()
    • scaleViewBoxValues

      private static float[] scaleViewBoxValues(float[] values, float scaleWidth, float scaleHeight)
    • isOverflowVisible

      private static boolean isOverflowVisible(AbstractSvgNodeRenderer currentElement)
    • writeBBoxAccordingToVisibleOverflow

      private static void writeBBoxAccordingToVisibleOverflow(SvgDrawContext context, PdfStream stream)
      When in the svg element overflow is visible the corresponding formXObject should have a BBox (form XObject’s bounding box; see PDF 32000-1:2008 - 8.10.2 Form Dictionaries) that should cover the entire svg space (page in pdf) in order to be able to show parts of the element which are outside the current element viewPort. To do this, we get the inverse matrix of all the current transformation matrix changes and apply it to the root viewPort. This allows you to get the root rectangle in the final coordinate system.
      Parameters:
      context - current context to get canvases and view ports
      stream - stream to write a BBox