Class TLspViewComponentPrintable

java.lang.Object
com.luciad.view.swing.ALcdViewComponentPrintable
com.luciad.view.lightspeed.swing.TLspViewComponentPrintable
All Implemented Interfaces:
ILcdChangeSource, ILcdDisposable, ILcdStatusSource, Printable, AutoCloseable

public class TLspViewComponentPrintable extends ALcdViewComponentPrintable
Prints the contents of a given Component containing a Lightspeed view component. This view component is used to avoid changing the original view.

By default, the component is scaled to fit in the imageable part of the page. If the component no longer fits on a single page, a multi-page print is created, with optional crop marks and positioning marks indicating where and how the pages should be joined (setCropMarks(boolean), setPositioningMarks(boolean)). The methods getPageCountX and getPageCountY allow to see how many pages will be required.

There are two ways to define the number of pages printed.

  • By calling the usePageCount(int, int) method: When using this method, this class will try to use the number of pages specified. Because the aspect ratio of the view component does not necessarily match the aspect ratio of the printable area on the pages, it is possible that less pages are used.
  • By calling the useMapScale(double) method: When using this method, this class will make sure the map scale is preserved by adjusting the number of pages.

By default, the component is centered on the page or the set of pages. Alternatively, its position can also be set explicitly (setOrigin(Point)).

Note that the effects of rounding to integer AWT coordinates during painting may become more obvious in print. The component's print method must never overwrite the transformation of the Graphics using the setTransform method. Instead, it must always use relative transformation methods, such as scale.

The view must not be changed while printing. This includes all layers in the view and their models. A typical case is a model that is updated asynchronously (for example updates received from a remote server or a updates from a simulation). These asynchronous updates should be paused before starting the print. You can for example do this by taking a read lock on all models in the view.

For more information on printing Lightspeed views, refer to the printing sample and the developer's guide.

Since:
2013.0
  • Constructor Details

    • TLspViewComponentPrintable

      public TLspViewComponentPrintable(Component aComponent)
      Creates a new printable for the given component.
      Parameters:
      aComponent - the component to print. This component should contain a view component. If not, an exception is thrown. The component does not have to be part of a RootPaneContainer (i.e. it does not have to be put in a Frame or Window).
  • Method Details

    • dispose

      public void dispose()
      Cleans up any created resources.
    • createViewComponent

      public static Component createViewComponent(ILspView aView)
      Creates a Component representing the given view. The component passed to the constructor of this class should either be, or contain this component. The component can be laid out, along with other components, and passed to this class.
      Parameters:
      aView - the view for which to create a component.
      Returns:
      a component for the view.
    • getView

      public ILspView getView()
      Returns the view.
      Returns:
      the view.
    • usePageCount

      public void usePageCount(int aPageCountX, int aPageCountY)
      Sets the number of pages in the x and y direction. Note that either this method or the useMapScale(double) method should be used. When calling useMapScale(double) after this method was called, this method will have no effect.

      Note that after calling this method, getPageCountX and getPageCountY may differ from aPageCountX and aPageCountY. This is because the aspect ratio of the view component is most likely not the same as the aspect ratio of the pages.

      Parameters:
      aPageCountX - the page count in the x direction.
      aPageCountY - the page count in the y direction.
      See Also:
    • useMapScale

      public void useMapScale(double aMapScale)
      Sets the map scale to use when printing. Note that either this method or the usePageCount(int, int) method should be used. When calling usePageCount(int, int) after this method was called, this method will have no effect.
      Parameters:
      aMapScale - a ratio that represents 1 / denominator. For example: a MapScale of 1:50000 can be created using 0.00002 (=1.0/50_000) as value.
    • invalidate

      public void invalidate()
      Invalidates this printable. This is for example needed when a component was added or removed from getComponent(), or when a component was resized.
    • getPageCountX

      public int getPageCountX(PageFormat aPageFormat)
      Description copied from class: ALcdViewComponentPrintable
      Returns the page count in the x-direction.
      Specified by:
      getPageCountX in class ALcdViewComponentPrintable
      Parameters:
      aPageFormat - the page format
      Returns:
      the page count in the x-direction.
    • getPageCountY

      public int getPageCountY(PageFormat aPageFormat)
      Description copied from class: ALcdViewComponentPrintable
      Returns the page count in the y-direction.
      Specified by:
      getPageCountY in class ALcdViewComponentPrintable
      Parameters:
      aPageFormat - the page format
      Returns:
      the page count in the y-direction.
    • getMapScale

      public double getMapScale(PageFormat aPageFormat)
      Description copied from class: ALcdViewComponentPrintable
      Returns the map scale (e.g. 1:25.000).
      Specified by:
      getMapScale in class ALcdViewComponentPrintable
      Parameters:
      aPageFormat - the page format
      Returns:
      the map scale.
    • setSnapToFullPages

      public void setSnapToFullPages(boolean aUseSnapToFullPages)
      Specifies weather the content should fill the entire pages. By default this value is true.
      Parameters:
      aUseSnapToFullPages - true to specify that the content should fill the entire pages.
      See Also:
    • isSnapToFullPages

      public boolean isSnapToFullPages()
      Returns if snap to full pages is used.
      Returns:
      if snap to full pages is used.
      See Also:
    • setDPI

      public void setDPI(int aaDPI)
      Sets the rasterization quality in dpi. The default is 144.
      Parameters:
      aaDPI - the rasterization quality in dpi.
      See Also:
    • getDPI

      public int getDPI()
      Returns the rasterization quality in dpi.
      Specified by:
      getDPI in class ALcdViewComponentPrintable
      Returns:
      the rasterization quality in dpi.
      See Also:
    • setFeatureScale

      public void setFeatureScale(double aFeatureScale)
      Changes the relative size of features (such as icons, labels or line widths) in a view. The default value is 1.

      Lower values will make features proportionally smaller (allowing, for instance, more labels to be placed). Higher values will make features proportionally larger (for instance, to make text more readable on very high-resolution displays).

      Feature scale may also affect level-of-detail decisions, e.g. for raster layers. Lower feature scales may cause higher detail levels to be shown (and vice versa).

      A possible use case is printing a complex CAD drawing, where you would like to reduce the line widths to get a detailed print-out. Use for example 0.25. Another use case is to make a print-out that will be looked at from a distance. A larger value (e.g. 2.0) makes sure the lines are still visible from a distance.

      Parameters:
      aFeatureScale - the size factor for line widths, icons sizes, font sizes ...
      See Also:
    • getFeatureScale

      public double getFeatureScale()
      Returns the relative size of features (such as icons, labels or line widths) in a view. The default value is 1.

      Lower values will make features proportionally smaller (allowing, for instance, more labels to be placed). Higher values will make features proportionally larger (for instance, to make text more readable on very high-resolution displays).

      Feature scale may also affect level-of-detail decisions, e.g. for raster layers. Lower feature scales may cause higher detail levels to be shown (and vice versa).

      A possible use case is printing a complex CAD drawing, where you would like to reduce the line widths to get a detailed print-out. Use for example 0.25. Another use case is to make a print-out that will be looked at from a distance. A larger value (e.g. 2.0) makes sure the lines are still visible from a distance.

      Specified by:
      getFeatureScale in class ALcdViewComponentPrintable
      Returns:
      the used feature scale.
      See Also:
    • setCropMarks

      public void setCropMarks(boolean aCropMarks)
      Specifies whether to draw crop marks on multi-page prints. The default is true.
      Parameters:
      aCropMarks - true to draw crop marks on multi-page prints.
    • hasCropMarks

      public boolean hasCropMarks()
      Returns whether crop marks are drawn on multi-page prints.
      Returns:
      whether crop marks are drawn on multi-page prints.
    • setPositioningMarks

      public void setPositioningMarks(boolean aPositioningMarks)
      Specifies whether to draw positioning marks on multi-page prints. The default is true.
      Parameters:
      aPositioningMarks - true to draw positioning marks on multi-page prints.
    • hasPositioningMarks

      public boolean hasPositioningMarks()
      Returns whether positioning marks are drawn on multi-page prints.
      Returns:
      whether positioning marks are drawn on multi-page prints.
    • setOrigin

      public void setOrigin(Point aOrigin)
      Sets the origin of the component on the page. The default is null, meaning that the component is automatically centered on the page. This setting is mostly useful when disabling snap to full pages.
      Parameters:
      aOrigin - the origin, or null.
    • getOrigin

      public Point getOrigin()
      Returns the origin of the component on the page.
      Returns:
      the origin of the component on the page, or null.
      See Also:
    • setPageDecorator

      public void setPageDecorator(Printable aPageDecorator)

      Sets a Printable that can be used to decorate each page. It is for example possible to add a watermark to each page using this method.

      The default is null, meaning that no decorations are added.

      Parameters:
      aPageDecorator - the page decorator.
    • getPageDecorator

      public Printable getPageDecorator()
      Returns the Printable that is used as page decorator.
      Returns:
      the Printable that is used as page decorator.
    • print

      public int print(Graphics aGraphics, PageFormat aPageFormat, int aPageIndex) throws PrinterException
      Throws:
      PrinterException
    • createPreview

      public TLcdPrintPreview createPreview(PageFormat aPageFormat)
      Creates a preview panel for the given page format.
      Specified by:
      createPreview in class ALcdViewComponentPrintable
      Parameters:
      aPageFormat - the page format to use
      Returns:
      a panel visualizing the component