Package org.pentaho.reporting.engine.classic.core.layout.complextext

Source Code of org.pentaho.reporting.engine.classic.core.layout.complextext.RichTextRenderingTest

/*
* This program is free software; you can redistribute it and/or modify it under the
*  terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
*  Foundation.
*
*  You should have received a copy of the GNU Lesser General Public License along with this
*  program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
*  or from the Free Software Foundation, Inc.,
*  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
*  This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
*  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*  See the GNU Lesser General Public License for more details.
*
*  Copyright (c) 2006 - 2013 Pentaho Corporation..  All rights reserved.
*/

package org.pentaho.reporting.engine.classic.core.layout.complextext;

import java.awt.Color;
import java.awt.font.TextAttribute;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.StringWriter;
import java.net.URL;
import java.text.AttributedString;
import java.util.HashMap;
import javax.swing.table.DefaultTableModel;

import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.RichTextString;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Assert;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
import org.pentaho.reporting.engine.classic.core.AttributeNames;
import org.pentaho.reporting.engine.classic.core.Band;
import org.pentaho.reporting.engine.classic.core.ClassicEngineBoot;
import org.pentaho.reporting.engine.classic.core.ClassicEngineCoreModule;
import org.pentaho.reporting.engine.classic.core.Element;
import org.pentaho.reporting.engine.classic.core.ElementAlignment;
import org.pentaho.reporting.engine.classic.core.MasterReport;
import org.pentaho.reporting.engine.classic.core.ReportProcessingException;
import org.pentaho.reporting.engine.classic.core.filter.types.LabelType;
import org.pentaho.reporting.engine.classic.core.function.ExpressionRuntime;
import org.pentaho.reporting.engine.classic.core.function.GenericExpressionRuntime;
import org.pentaho.reporting.engine.classic.core.layout.build.RichTextStyleResolver;
import org.pentaho.reporting.engine.classic.core.layout.model.LayoutNodeTypes;
import org.pentaho.reporting.engine.classic.core.layout.model.LogicalPageBox;
import org.pentaho.reporting.engine.classic.core.layout.model.ParagraphRenderBox;
import org.pentaho.reporting.engine.classic.core.layout.model.RenderBox;
import org.pentaho.reporting.engine.classic.core.layout.model.RenderNode;
import org.pentaho.reporting.engine.classic.core.layout.model.RenderableComplexText;
import org.pentaho.reporting.engine.classic.core.layout.model.RenderableReplacedContentBox;
import org.pentaho.reporting.engine.classic.core.layout.output.DefaultProcessingContext;
import org.pentaho.reporting.engine.classic.core.layout.output.OutputProcessorMetaData;
import org.pentaho.reporting.engine.classic.core.layout.process.ParagraphLineBreakStep;
import org.pentaho.reporting.engine.classic.core.layout.process.text.RichTextSpec;
import org.pentaho.reporting.engine.classic.core.modules.output.fast.html.FastHtmlImageBounds;
import org.pentaho.reporting.engine.classic.core.modules.output.fast.html.FastHtmlTextExtractor;
import org.pentaho.reporting.engine.classic.core.modules.output.fast.xls.FastExcelTextExtractor;
import org.pentaho.reporting.engine.classic.core.modules.output.table.html.HtmlTextExtractor;
import org.pentaho.reporting.engine.classic.core.modules.output.table.html.URLRewriteException;
import org.pentaho.reporting.engine.classic.core.modules.output.table.html.helper.ContentUrlReWriteService;
import org.pentaho.reporting.engine.classic.core.modules.output.table.html.helper.DefaultHtmlContentGenerator;
import org.pentaho.reporting.engine.classic.core.modules.output.table.html.helper.DefaultStyleBuilder;
import org.pentaho.reporting.engine.classic.core.modules.output.table.html.helper.DefaultStyleBuilderFactory;
import org.pentaho.reporting.engine.classic.core.modules.output.table.html.helper.HtmlOutputProcessorMetaData;
import org.pentaho.reporting.engine.classic.core.modules.output.table.html.helper.HtmlTagHelper;
import org.pentaho.reporting.engine.classic.core.modules.output.table.html.helper.InlineStyleManager;
import org.pentaho.reporting.engine.classic.core.modules.output.table.html.helper.StyleBuilder;
import org.pentaho.reporting.engine.classic.core.modules.output.table.xls.helper.ExcelColorProducer;
import org.pentaho.reporting.engine.classic.core.modules.output.table.xls.helper.ExcelFontFactory;
import org.pentaho.reporting.engine.classic.core.modules.output.table.xls.helper.ExcelOutputProcessorMetaData;
import org.pentaho.reporting.engine.classic.core.modules.output.table.xls.helper.ExcelTextExtractor;
import org.pentaho.reporting.engine.classic.core.modules.output.table.xls.helper.StaticExcelColorSupport;
import org.pentaho.reporting.engine.classic.core.style.ElementStyleKeys;
import org.pentaho.reporting.engine.classic.core.style.TextDirection;
import org.pentaho.reporting.engine.classic.core.style.TextStyleKeys;
import org.pentaho.reporting.engine.classic.core.testsupport.DebugReportRunner;
import org.pentaho.reporting.engine.classic.core.testsupport.selector.MatchFactory;
import org.pentaho.reporting.engine.classic.core.util.InstanceID;
import org.pentaho.reporting.engine.classic.core.util.geom.StrictGeomUtility;
import org.pentaho.reporting.libraries.repository.ContentIOException;
import org.pentaho.reporting.libraries.repository.ContentItem;
import org.pentaho.reporting.libraries.repository.DefaultNameGenerator;
import org.pentaho.reporting.libraries.repository.zipwriter.ZipRepository;
import org.pentaho.reporting.libraries.resourceloader.ResourceException;
import org.pentaho.reporting.libraries.resourceloader.ResourceManager;
import org.pentaho.reporting.libraries.xmlns.writer.DefaultTagDescription;
import org.pentaho.reporting.libraries.xmlns.writer.XmlWriter;

public class RichTextRenderingTest
{
  public RichTextRenderingTest()
  {
  }

  @Before
  public void setUp()
  {
    ClassicEngineBoot.getInstance().start();
  }

  //@Test
  public void testPdf() throws ResourceException, ReportProcessingException, IOException
  {
    URL resource = getClass().getResource("rich-text-sample1.prpt");
    ResourceManager mgr = new ResourceManager();
    MasterReport report = (MasterReport) mgr.createDirectly(resource, MasterReport.class).getResource();
    report.getReportHeader().getElement(0).getStyle().setStyleProperty(TextStyleKeys.DIRECTION, TextDirection.LTR);
    report.getReportHeader().getElement(1).getStyle().setStyleProperty(TextStyleKeys.DIRECTION, TextDirection.RTL);
    report.getReportHeader().removeElement(0);
    report.getReportHeader().getStyle().setStyleProperty(ElementStyleKeys.BACKGROUND_COLOR, Color.YELLOW);
    report.getReportFooter().clear();
//    DebugReportRunner.showDialog(report);
//    PdfReportUtil.createPDF(report, new File(DebugReportRunner.createTestOutputFile(), "rich-text-sample1.pdf"));
  }

  //@Test
  public void testPdfRendering() throws Exception
  {
    MasterReport report = new MasterReport();
    report.getReportConfiguration().setConfigProperty(ClassicEngineCoreModule.COMPLEX_TEXT_CONFIG_OVERRIDE_KEY, "true");
    report.getReportHeader().addElement(createDataItem("A longer text asda askdjalejqi halfhlajdfh askdjfha ksdfjhLKFDH ASKDJFHAS asda askdjalejqi halfhlajdfh askdjfha ksdfjhLKFDH ASKDJFHAS asda askdjalejqi halfhlajdfh askdjfha ksdfjhLKFDH ASKDJFHAS DKFHSDKF", 400, 60));
    report.getReportHeader().getElement(0).getStyle().setStyleProperty(TextStyleKeys.DIRECTION, TextDirection.RTL);
    report.getReportHeader().getElement(0).getStyle().setStyleProperty(TextStyleKeys.FONT, "Arial Unicode MS");
    report.getReportHeader().getElement(0).getStyle().setStyleProperty(TextStyleKeys.FONTSIZE, 15);
    report.getReportHeader().getElement(0).getStyle().setStyleProperty(ElementStyleKeys.BACKGROUND_COLOR, Color.YELLOW);
    report.getReportHeader().getElement(0).getStyle().setStyleProperty(ElementStyleKeys.ALIGNMENT, ElementAlignment.RIGHT);
//    DebugReportRunner.showDialog(report);
//    PdfReportUtil.createPDF(report, new File(DebugReportRunner.createTestOutputFile(), "rich-text-sample1.pdf"));
  }

  @Test
  public void testExcelRendering() throws Exception
  {
    URL resource = getClass().getResource("rich-text-sample1.prpt");
    ResourceManager mgr = new ResourceManager();
    MasterReport report = (MasterReport) mgr.createDirectly(resource, MasterReport.class).getResource();
    report.getReportConfiguration().setConfigProperty(ClassicEngineCoreModule.COMPLEX_TEXT_CONFIG_OVERRIDE_KEY, "true");
    report.getReportHeader().getElement(0).getStyle().setStyleProperty(TextStyleKeys.DIRECTION, TextDirection.LTR);
    report.getReportHeader().getElement(1).getStyle().setStyleProperty(TextStyleKeys.DIRECTION, TextDirection.RTL);
    report.getReportHeader().removeElement(0);
    report.getReportHeader().getStyle().setStyleProperty(ElementStyleKeys.BACKGROUND_COLOR, Color.YELLOW);
    report.getReportFooter().clear();

    LogicalPageBox logicalPageBox = DebugReportRunner.layoutPage(report, 0);

    RenderNode second = MatchFactory.findElementByName(logicalPageBox, "second");
    assertTrue(second instanceof RenderBox);

    ExcelOutputProcessorMetaData metaData = new ExcelOutputProcessorMetaData(ExcelOutputProcessorMetaData.PAGINATION_FULL);
    metaData.initialize(report.getConfiguration());

    XSSFWorkbook hssfWorkbook = new XSSFWorkbook();
    ExcelColorProducer colorProducer = new StaticExcelColorSupport();
    ExcelFontFactory ff = new ExcelFontFactory(hssfWorkbook, colorProducer);
    CreationHelper ch = hssfWorkbook.getCreationHelper();
    ExcelTextExtractor te = new ExcelTextExtractor(metaData, colorProducer, ch, ff);

    Object compute = te.compute((RenderBox) second);
    assertTrue(compute instanceof RichTextString);
    XSSFRichTextString rt = (XSSFRichTextString) compute;
    assertEquals(4, rt.numFormattingRuns());
  }

  @Test
  public void testFastExcelRendering() throws Exception
  {
    URL resource = getClass().getResource("rich-text-sample1.prpt");
    ResourceManager mgr = new ResourceManager();
    MasterReport report = (MasterReport) mgr.createDirectly(resource, MasterReport.class).getResource();
    report.getReportConfiguration().setConfigProperty(ClassicEngineCoreModule.COMPLEX_TEXT_CONFIG_OVERRIDE_KEY, "true");
    report.getReportHeader().getElement(0).getStyle().setStyleProperty(TextStyleKeys.DIRECTION, TextDirection.LTR);
    report.getReportHeader().getElement(1).getStyle().setStyleProperty(TextStyleKeys.DIRECTION, TextDirection.RTL);
    report.getReportHeader().removeElement(0);
    report.getReportHeader().getStyle().setStyleProperty(ElementStyleKeys.BACKGROUND_COLOR, Color.YELLOW);
    report.getReportFooter().clear();

    ExpressionRuntime runtime = new GenericExpressionRuntime(new DefaultTableModel(), 0, new DefaultProcessingContext(report));

    RichTextStyleResolver.resolveStyle(report);

    XSSFWorkbook hssfWorkbook = new XSSFWorkbook();
    ExcelColorProducer colorProducer = new StaticExcelColorSupport();
    ExcelFontFactory ff = new ExcelFontFactory(hssfWorkbook, colorProducer);
    CreationHelper ch = hssfWorkbook.getCreationHelper();
    FastExcelTextExtractor te = new FastExcelTextExtractor(colorProducer, ff, ch);

    Element element = report.getReportHeader().getElement(0);
    Object compute = te.compute(element, runtime);
    assertTrue(compute instanceof RichTextString);
    XSSFRichTextString rt = (XSSFRichTextString) compute;
    assertEquals(4, rt.numFormattingRuns());
  }

  @Test
  public void testHtmlRendering() throws Exception
  {
    URL resource = getClass().getResource("rich-text-sample1.prpt");
    ResourceManager mgr = new ResourceManager();
    MasterReport report = (MasterReport) mgr.createDirectly(resource, MasterReport.class).getResource();
    report.getReportConfiguration().setConfigProperty(ClassicEngineCoreModule.COMPLEX_TEXT_CONFIG_OVERRIDE_KEY, "true");
    report.getReportHeader().getElement(0).getStyle().setStyleProperty(TextStyleKeys.DIRECTION, TextDirection.LTR);
    report.getReportHeader().getElement(1).getStyle().setStyleProperty(TextStyleKeys.DIRECTION, TextDirection.RTL);
    report.getReportHeader().removeElement(0);
    report.getReportHeader().getStyle().setStyleProperty(ElementStyleKeys.BACKGROUND_COLOR, Color.YELLOW);
    report.getReportFooter().clear();

    LogicalPageBox logicalPageBox = DebugReportRunner.layoutPage(report, 0);

    RenderNode second = MatchFactory.findElementByName(logicalPageBox, "second");
    assertTrue(second instanceof RenderBox);

    HtmlRenderingSetup setup = new HtmlRenderingSetup(report);
    HtmlTextExtractor te = setup.createTextExtractor();

    assertTrue(te.performOutput((RenderBox) second, setup.productImpliedStyles()));
    String text = setup.getResult();
    String start = text.substring(0, FAST_HTML_MATCH.length());
    assertEquals(FAST_HTML_MATCH, start);
    assertTrue(text.endsWith("</span>\n"));
  }

  @Test
  public void testFastHtmlRendering() throws Exception
  {
    URL resource = getClass().getResource("rich-text-sample1.prpt");
    ResourceManager mgr = new ResourceManager();
    MasterReport report = (MasterReport) mgr.createDirectly(resource, MasterReport.class).getResource();
    report.getReportConfiguration().setConfigProperty(ClassicEngineCoreModule.COMPLEX_TEXT_CONFIG_OVERRIDE_KEY, "true");
    report.getReportHeader().getElement(0).getStyle().setStyleProperty(TextStyleKeys.DIRECTION, TextDirection.LTR);
    report.getReportHeader().getElement(1).getStyle().setStyleProperty(TextStyleKeys.DIRECTION, TextDirection.RTL);
    report.getReportHeader().removeElement(0);
    report.getReportHeader().getStyle().setStyleProperty(ElementStyleKeys.BACKGROUND_COLOR, Color.YELLOW);
    report.getReportFooter().clear();

    RichTextStyleResolver.resolveStyle(report);

    HtmlRenderingSetup setup = new HtmlRenderingSetup(report);
    FastHtmlTextExtractor te = setup.createFastExtractor();

    Band element = (Band) report.getReportHeader().getElement(0);
    HashMap<InstanceID, FastHtmlImageBounds> recordedBounds = new HashMap<InstanceID, FastHtmlImageBounds>();
    FastHtmlImageBounds bounds = new FastHtmlImageBounds(StrictGeomUtility.toInternalValue(20.465),
        StrictGeomUtility.toInternalValue(20.465), StrictGeomUtility.toInternalValue(16),
        StrictGeomUtility.toInternalValue(16));
    recordedBounds.put(element.getElement(1).getObjectID(), bounds);

    ExpressionRuntime runtime = new GenericExpressionRuntime(new DefaultTableModel(), 0, new DefaultProcessingContext(report));
    assertTrue(te.performOutput(element, setup.productImpliedStyles(), recordedBounds, runtime));
    String text = setup.getResult();
    String start = text.substring(0, FAST_HTML_MATCH.length());
    assertEquals(FAST_HTML_MATCH, start);
    assertTrue(text.endsWith("</span>\n"));
  }

  private static final String FAST_HTML_MATCH = "<span>Label</span>\n" +
      "<span><img src=\"image.gif\" border=\"0\" style=\"width: 27px; height: 27px\"/></span>\n" +
      "<span style=\"font-size: 15pt\">Label</span>\n" +
      "<span style=\"font-size: 20pt\">Label</span>\n" +
      "<span>";

  public static Element createDataItem(final String text, final float width, final float height)
  {
    final Element label = new Element();
    label.setName("Label");
    label.setElementType(LabelType.INSTANCE);
    label.setAttribute(AttributeNames.Core.NAMESPACE, AttributeNames.Core.VALUE, text);
    label.getStyle().setStyleProperty(ElementStyleKeys.MIN_WIDTH, width);
    label.getStyle().setStyleProperty(ElementStyleKeys.MAX_WIDTH, width);
    label.getStyle().setStyleProperty(ElementStyleKeys.MIN_HEIGHT, height);
    label.getStyle().setStyleProperty(ElementStyleKeys.MAX_HEIGHT, height);
    return label;
  }

  //@Test
  public void testGraphics() throws ResourceException, ReportProcessingException, IOException
  {
    URL resource = getClass().getResource("rich-text-sample1.prpt");
    ResourceManager mgr = new ResourceManager();
    MasterReport report = (MasterReport) mgr.createDirectly(resource, MasterReport.class).getResource();
    report.getReportHeader().getElement(0).getStyle().setStyleProperty(TextStyleKeys.DIRECTION, TextDirection.LTR);
    report.getReportHeader().getElement(1).getStyle().setStyleProperty(TextStyleKeys.DIRECTION, TextDirection.RTL);
    DebugReportRunner.execGraphics2D(report);

  }

  @Test
  public void testGraphics2D() throws Exception
  {
    URL resource = getClass().getResource("rich-text-sample1.prpt");
    ResourceManager mgr = new ResourceManager();
    MasterReport report = (MasterReport) mgr.createDirectly(resource, MasterReport.class).getResource();
    report.getReportConfiguration().setConfigProperty(ClassicEngineCoreModule.COMPLEX_TEXT_CONFIG_OVERRIDE_KEY, "true");

    LogicalPageBox logicalPageBox = DebugReportRunner.layoutPage(report, 0);
    RenderNode first = MatchFactory.findElementByName(logicalPageBox, "first");
    assertNotNull(first);
    assertTrue(first.getHeight() > StrictGeomUtility.toInternalValue(20));

    RenderNode[] elementsByNodeType = MatchFactory.findElementsByNodeType(first, LayoutNodeTypes.TYPE_NODE_COMPLEX_TEXT);
    assertEquals(1, elementsByNodeType.length);
    assertTrue(elementsByNodeType[0] instanceof RenderableComplexText);

    RenderableComplexText text = (RenderableComplexText) elementsByNodeType[0];
    RichTextSpec richText = text.getRichText();
    assertEquals(4, richText.getStyleChunks().size());
    assertEquals("Label@LabelLabel", richText.getText());

    RenderNode second = MatchFactory.findElementByName(logicalPageBox, "second");
    assertTrue(second instanceof ParagraphRenderBox);
    ParagraphRenderBox p = (ParagraphRenderBox) second;
    assertTrue(p.getPool().getFirstChild().getNext() instanceof RenderableReplacedContentBox);

    assertTrue(second.getHeight() > StrictGeomUtility.toInternalValue(20));
    RenderNode[] secondText = MatchFactory.findElementsByNodeType(second, LayoutNodeTypes.TYPE_NODE_COMPLEX_TEXT);
    assertTrue(secondText.length > 10); // this is an approximate value. There is no safe stable value with complex text
    assertTrue(secondText[0] instanceof RenderableComplexText);
  }

  @Test
  public void testLineBreaking() throws Exception
  {
    URL resource = getClass().getResource("rich-text-sample1.prpt");
    ResourceManager mgr = new ResourceManager();
    MasterReport report = (MasterReport) mgr.createDirectly(resource, MasterReport.class).getResource();
    report.getReportConfiguration().setConfigProperty(ClassicEngineCoreModule.COMPLEX_TEXT_CONFIG_OVERRIDE_KEY, "true");
    report.getReportHeader().removeElement(report.getReportHeader().getElement(0));
    report.getReportHeader().getElement(0).getStyle().setStyleProperty(TextStyleKeys.DIRECTION, TextDirection.RTL);

    LogicalPageBox logicalPageBox = DebugReportRunner.layoutPage(report, 0);

    RenderNode second = MatchFactory.findElementByName(logicalPageBox, "second");
    assertTrue(second instanceof ParagraphRenderBox);
    ParagraphRenderBox p = (ParagraphRenderBox) second;
    assertTrue(p.getPool().getFirstChild().getNext() instanceof RenderableReplacedContentBox);

    ParagraphLineBreakStep step = new ParagraphLineBreakStep();
    step.compute(logicalPageBox);

    RenderNode[] elementsByNodeType = MatchFactory.findElementsByNodeType(p, LayoutNodeTypes.TYPE_NODE_COMPLEX_TEXT);
    assertContainsImage(elementsByNodeType);
    RenderableComplexText t = (RenderableComplexText) elementsByNodeType[0];
    AttributedString attributedString = t.getRichText().getAttributedString();
    assertEquals(TextAttribute.RUN_DIRECTION_RTL, attributedString.getIterator().getAttribute(TextAttribute.RUN_DIRECTION));

  }

  private void assertContainsImage(RenderNode[] elementsByNodeType)
  {
    for (RenderNode renderNode : elementsByNodeType)
    {
      RenderableComplexText t = (RenderableComplexText) renderNode;
      RichTextSpec richText = t.getRichText();
      for (RichTextSpec.StyledChunk styledChunk : richText.getStyleChunks())
      {
        if (styledChunk.getAttributes().containsKey(TextAttribute.CHAR_REPLACEMENT))
        {
          return;
        }
      }

    }
    Assert.fail();
  }


  private static class DummyContentUrlReWriteService implements ContentUrlReWriteService
  {
    public String rewriteContentDataItem(final ContentItem item) throws URLRewriteException
    {
      return item.getName();
    }
  }

  private static class HtmlRenderingSetup
  {
    private final StringWriter sw;
    private final XmlWriter writer;
    private MasterReport report;

    private HtmlRenderingSetup(final MasterReport report)
    {
      this.report = report;
      sw = new StringWriter();
      writer = new XmlWriter(sw, new DefaultTagDescription(), "  ", "\n");
      writer.addImpliedNamespace("http://www.w3.org/1999/xhtml", "");
    }

    public String getResult()
    {
      return sw.toString();
    }

    private XmlWriter getWriter()
    {
      return writer;
    }

    private StyleBuilder.StyleCarrier[] productImpliedStyles()
    {
      DefaultStyleBuilder builder = new DefaultStyleBuilder(new DefaultStyleBuilderFactory());
      builder.append(StyleBuilder.CSSKeys.COLOR, "black");
      builder.append(StyleBuilder.CSSKeys.FONT_SIZE, "10", "pt");
      builder.appendRaw(StyleBuilder.CSSKeys.FONT_FAMILY, "\"Arial Unicode MS\"");
      builder.append(StyleBuilder.CSSKeys.FONT_WEIGHT, "normal");
      builder.append(StyleBuilder.CSSKeys.FONT_STYLE, "normal");
      builder.append(StyleBuilder.CSSKeys.TEXT_DECORATION, "none");
      builder.append(StyleBuilder.CSSKeys.TEXT_ALIGN, "right");
      builder.append(StyleBuilder.CSSKeys.WORD_SPACING, "0", "pt");
      builder.append(StyleBuilder.CSSKeys.LETTER_SPACING, "0", "pt");
      builder.append(StyleBuilder.CSSKeys.WHITE_SPACE, "pre");
      return builder.toArray();
    }

    public HtmlTextExtractor createTextExtractor() throws ContentIOException
    {
      OutputProcessorMetaData metaData = createMetaData();
      DefaultHtmlContentGenerator contentGenerator = createContentGenerator();
      HtmlTagHelper tagHelper = createTagHelper();
      return new HtmlTextExtractor(metaData, getWriter(), contentGenerator, tagHelper);
    }

    private HtmlTagHelper createTagHelper()
    {
      HtmlTagHelper tagHelper = new HtmlTagHelper(report.getConfiguration(), new DefaultStyleBuilderFactory());
      tagHelper.setStyleManager(new InlineStyleManager());
      return tagHelper;
    }

    private DefaultHtmlContentGenerator createContentGenerator() throws ContentIOException
    {
      ZipRepository zr = new ZipRepository(new ByteArrayOutputStream());
      DefaultHtmlContentGenerator contentGenerator = new DefaultHtmlContentGenerator(report.getResourceManager());
      contentGenerator.setDataWriter(zr.getRoot(), new DefaultNameGenerator(zr.getRoot()), new RichTextRenderingTest.DummyContentUrlReWriteService());
      return contentGenerator;
    }

    private OutputProcessorMetaData createMetaData()
    {
      OutputProcessorMetaData metaData = new HtmlOutputProcessorMetaData(HtmlOutputProcessorMetaData.PAGINATION_NONE);
      metaData.initialize(report.getReportConfiguration());
      return metaData;
    }

    public FastHtmlTextExtractor createFastExtractor() throws ContentIOException
    {
      OutputProcessorMetaData metaData = createMetaData();
      DefaultHtmlContentGenerator contentGenerator = createContentGenerator();
      HtmlTagHelper tagHelper = createTagHelper();
      return new FastHtmlTextExtractor(metaData, getWriter(), contentGenerator, tagHelper);
    }
  }
}
TOP

Related Classes of org.pentaho.reporting.engine.classic.core.layout.complextext.RichTextRenderingTest

TOP
Copyright © 2018 www.massapi.com. 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.