Package net.sf.jasperreports.engine

Examples of net.sf.jasperreports.engine.TabStop


   */
  public static TabStop[] getTabStops(JRParagraph paragraph, float endX)
  {
    List<TabStop> tabStopList = new ArrayList<TabStop>();

    TabStop lastTabStop = new TabStop();
   
    TabStop[] tabStops = paragraph.getTabStops();
    if (tabStops != null && tabStops.length > 0)
    {
      for (int i = 0; i < tabStops.length; i++)
      {
        lastTabStop = tabStops[i];
        if (
          //startX <= lastTabStop.getPosition() &&
          lastTabStop.getPosition() <= endX
          )
        {
          tabStopList.add(lastTabStop);
        }
      }
    }
   
    while (
      //startX <= lastTabStop.getPosition() + paragraph.getTabStopWidth() &&
      lastTabStop.getPosition() + paragraph.getTabStopWidth() <= endX
      )
    {
      lastTabStop = new TabStop((lastTabStop.getPosition() / paragraph.getTabStopWidth() + 1) * paragraph.getTabStopWidth(), TabStopAlignEnum.LEFT);
      tabStopList.add(lastTabStop);
    }
   
    return tabStopList.toArray(new TabStop[tabStopList.size()]);
  }
View Full Code Here


  /**
   *
   */
  public static TabStop getNextTabStop(JRParagraph paragraph, float endX, float rightX)
  {
    TabStop nextTabStop = null;
    TabStop[] tabStops = getTabStops(paragraph, endX);
    int i = 0;
    for (; i < tabStops.length; i++)
    {
      TabStop tabStop = tabStops[i];
      if (tabStop.getPosition() > rightX)//FIXMETAB assumes tab stops are sorted by position
      {
        nextTabStop = tabStop;
        break;
      }
    }
    if (i == tabStops.length)
    {
      //FIXMETAB what to do here?
      nextTabStop = new TabStop();
      nextTabStop.setPosition((int)((rightX / paragraph.getTabStopWidth() + 1) * paragraph.getTabStopWidth()));
    }
    return nextTabStop;
  }
View Full Code Here

  /**
   *
   */
  public static TabStop getFirstTabStop(JRParagraph paragraph, float endX)
  {
    TabStop firstTabStop = new TabStop();
    TabStop[] tabStops = getTabStops(paragraph, endX);
    firstTabStop = tabStops[0];
    return firstTabStop;
  }
View Full Code Here

  /**
   *
   */
  public static TabStop getLastTabStop(JRParagraph paragraph, float endX)
  {
    TabStop lastTabStop = new TabStop();
    TabStop[] tabStops = getTabStops(paragraph, endX);
    int i = tabStops.length - 1;
    for (; i >= 0; i--)
    {
      TabStop tabStop = tabStops[i];
      if (tabStop.getPosition() < endX)//FIXMETAB assumes tab stops are sorted by position
      {
        lastTabStop = tabStop;
        break;
      }
    }
View Full Code Here

    TabStop[] tabStops = paragraph.getTabStops();
    if (tabStops != null && tabStops.length > 0)
    {
      for (int i = 0; i < tabStops.length; i++)
      {
        TabStop tabStop = tabStops[i];
        sbuffer.append("|").append(tabStop.getPosition()).append("|").append(tabStop.getAlignment().getName());
      }
    }
   
    return sbuffer.toString();
  }
View Full Code Here

    if (tabStops != null && tabStops.length > 0)
    {
      styleWriter.write("<style:tab-stops>");
      for (int i = 0; i < tabStops.length; i++)
      {
        TabStop tabStop = tabStops[i];
        styleWriter.write("<style:tab-stop style:type=\"" + getTabStopAlignment(tabStop.getAlignment()) + "\" style:position=\"" + LengthUtil.inch(tabStop.getPosition()) + "in\"/>");
      }
      styleWriter.write("</style:tab-stops>");
    }
   
    styleWriter.write("</style:paragraph-properties>\n");
View Full Code Here

   
    int currentTab = 0;
    int lines = 0;
    float endX = 0;
   
    TabStop nextTabStop = null;
    boolean requireNextWord = false;
 
    LineBreakMeasurer lineMeasurer = new LineBreakMeasurer(paragraph, getFontRenderContext());//grx.getFontRenderContext()

    // the paragraph is rendered one line at a time
    while (lineMeasurer.getPosition() < paragraph.getEndIndex() && !isMaxHeightReached)
    {
      boolean lineComplete = false;

      float maxAscent = 0;
      float maxDescent = 0;
      float maxLeading = 0;
     
      // each line is split into segments, using the tab character as delimiter
      segments = new ArrayList<TabSegment>(1);

      TabSegment oldSegment = null;
      TabSegment crtSegment = null;

      // splitting the current line into tab segments
      while (!lineComplete)
      {
        // the current segment limit is either the next tab character or the paragraph end
        int tabIndexOrEndIndex = (tabIndexes == null || currentTab >= tabIndexes.size() ? paragraph.getEndIndex() : tabIndexes.get(currentTab) + 1);
       
        float startX = (lineMeasurer.getPosition() == 0 ? text.getParagraph().getFirstLineIndent() : 0);
        endX = width - text.getParagraph().getRightIndent() - rightPadding;
        endX = endX < startX ? startX : endX;
        //formatWidth = endX - startX;
        //formatWidth = endX;
       
        int startIndex = lineMeasurer.getPosition();

        int rightX = 0;

        if (segments.size() == 0)
        {
          rightX = (int)startX;
          //nextTabStop = nextTabStop;
        }
        else
        {
          rightX = oldSegment.rightX;
          nextTabStop = ParagraphUtil.getNextTabStop(text.getParagraph(), endX, rightX);
        }

        //float availableWidth = formatWidth - ParagraphUtil.getSegmentOffset(nextTabStop, rightX); // nextTabStop can be null here; and that's OK
        float availableWidth = endX - text.getParagraph().getLeftIndent() - ParagraphUtil.getSegmentOffset(nextTabStop, rightX); // nextTabStop can be null here; and that's OK
       
        // creating a text layout object for each tab segment
        TextLayout layout =
          lineMeasurer.nextLayout(
            availableWidth,
            tabIndexOrEndIndex,
            requireNextWord
            );
       
        if (layout != null)
        {
           AttributedString tmpText =
            new AttributedString(
              paragraph,
              startIndex,
              startIndex + layout.getCharacterCount()
              );
          
          if (isMinimizePrinterJobSize)
          {
            //eugene fix - start
            layout = new TextLayout(tmpText.getIterator(), getFontRenderContext());
            //eugene fix - end
          }
   
          if (
            text.getHorizontalAlignmentValue() == HorizontalAlignEnum.JUSTIFIED
            && lineMeasurer.getPosition() < paragraph.getEndIndex()
            )
          {
            layout = layout.getJustifiedLayout(availableWidth);
          }
         
          maxAscent = Math.max(maxAscent, layout.getAscent());
          maxDescent = Math.max(maxDescent, layout.getDescent());
          maxLeading = Math.max(maxLeading, layout.getLeading());

          //creating the current segment
          crtSegment = new TabSegment();
          crtSegment.layout = layout;
          crtSegment.as = tmpText;
          crtSegment.text = lastParagraphText.substring(startIndex, startIndex + layout.getCharacterCount());

          int leftX = ParagraphUtil.getLeftX(nextTabStop, layout.getAdvance()); // nextTabStop can be null here; and that's OK
          if (rightX > leftX)
          {
            crtSegment.leftX = rightX;
            crtSegment.rightX = (int)(rightX + layout.getAdvance());//FIXMETAB some rounding issues here
          }
          else
          {
            crtSegment.leftX = leftX;
            // we need this special tab stop based utility call because adding the advance to leftX causes rounding issues
            crtSegment.rightX = ParagraphUtil.getRightX(nextTabStop, layout.getAdvance()); // nextTabStop can be null here; and that's OK
          }

          segments.add(crtSegment);
        }
       
        requireNextWord = true;

        if (lineMeasurer.getPosition() == tabIndexOrEndIndex)
        {
          // the segment limit was a tab; going to the next tab
          currentTab++;
        }

        if (lineMeasurer.getPosition() == paragraph.getEndIndex())
        {
          // the segment limit was the paragraph end; line completed and next line should start at normal zero x offset
          lineComplete = true;
          nextTabStop = null;
        }
        else
        {
          // there is paragraph text remaining
          if (lineMeasurer.getPosition() == tabIndexOrEndIndex)
          {
            // the segment limit was a tab
            if (crtSegment.rightX >= ParagraphUtil.getLastTabStop(text.getParagraph(), endX).getPosition())
            {
              // current segment stretches out beyond the last tab stop; line complete
              lineComplete = true;
              // next line should should start at first tab stop indent
              nextTabStop = ParagraphUtil.getFirstTabStop(text.getParagraph(), endX);
            }
            else
            {
              //nothing; this leaves lineComplete=false
            }
          }
          else
          {
            // the segment did not fit entirely
            lineComplete = true;
            if (layout == null)
            {
              // nothing fitted; next line should start at first tab stop indent
              if (nextTabStop.getPosition() == ParagraphUtil.getFirstTabStop(text.getParagraph(), endX).getPosition())//FIXMETAB check based on segments.size()
              {
                // at second attempt we give up to avoid infinite loop
                nextTabStop = null;
                requireNextWord = false;
               
View Full Code Here

    if (tabStops != null && tabStops.length > 0)
    {
      write("   <w:tabs>\n");
      for (int i = 0; i < tabStops.length; i++)
      {
        TabStop tabStop = tabStops[i];
        write("   <w:tab w:pos=\"" + LengthUtil.twip(tabStop.getPosition()) + "\" w:val=\"" + getTabStopAlignment(tabStop.getAlignment()) + "\"/>\n");
      }
      write("   </w:tabs>\n");
    }
  }
View Full Code Here

    TabStop[] tabStops = text.getParagraph().getTabStops();
    if (tabStops != null && tabStops.length > 0)
    {
      for (int i = 0; i < tabStops.length; i++)
      {
        TabStop tabStop = tabStops[i];

        String tabStopAlign = "";
       
        switch (tabStop.getAlignment())
        {
          case CENTER:
            tabStopAlign = "\\tqc";
            break;
          case RIGHT:
            tabStopAlign = "\\tqr";
            break;
          case LEFT:
          default:
            tabStopAlign = "";
            break;
        }

        writer.write(tabStopAlign + "\\tx" + LengthUtil.twip(tabStop.getPosition()) + " ");
      }
    }

    JRFont font = text;
    if (text.getRunDirectionValue() == RunDirectionEnum.RTL)
View Full Code Here

  /**
   *
   */
  public Object createObject(Attributes atts)
  {
    TabStop tabStop = new TabStop();
   
    String position = atts.getValue(JRXmlConstants.ATTRIBUTE_position);
    if (position != null && position.length() > 0)
    {
      tabStop.setPosition(Integer.parseInt(position));
    }

    TabStopAlignEnum alignment = TabStopAlignEnum.getByName(atts.getValue(JRXmlConstants.ATTRIBUTE_alignment));
    if (alignment != null)
    {
      tabStop.setAlignment(alignment);
    }

    return tabStop;
  }
View Full Code Here

TOP

Related Classes of net.sf.jasperreports.engine.TabStop

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.